1
0
Fork 0
sqlglot/docs/sqlglot/parser.html
Daniel Baumann 69b6dd9501
Merging upstream version 26.12.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-03-31 15:54:56 +02:00

19190 lines
No EOL
4.5 MiB

<!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 15.0.1"/>
<title>sqlglot.parser 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 .alert{padding:1rem 1rem 1rem calc(1.5rem + 24px);border:1px solid transparent;border-radius:.25rem;background-repeat:no-repeat;background-position:.75rem center;margin-bottom:1rem;}.pdoc .alert > em{display:none;}.pdoc .alert > *:last-child{margin-bottom:0;}.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 .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 .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 .decorator-deprecated{color:#842029;}.pdoc .decorator-deprecated ~ span{filter:grayscale(1) opacity(0.8);}.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="../sqlglot.html">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-in-left" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M10 3.5a.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 1 1 0v2A1.5 1.5 0 0 1 9.5 14h-8A1.5 1.5 0 0 1 0 12.5v-9A1.5 1.5 0 0 1 1.5 2h8A1.5 1.5 0 0 1 11 3.5v2a.5.5 0 0 1-1 0v-2z"/>
<path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
</svg> &nbsp;sqlglot</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="#logger">logger</a>
</li>
<li>
<a class="variable" href="#OPTIONS_TYPE">OPTIONS_TYPE</a>
</li>
<li>
<a class="function" href="#build_var_map">build_var_map</a>
</li>
<li>
<a class="function" href="#build_like">build_like</a>
</li>
<li>
<a class="function" href="#binary_range_parser">binary_range_parser</a>
</li>
<li>
<a class="function" href="#build_logarithm">build_logarithm</a>
</li>
<li>
<a class="function" href="#build_hex">build_hex</a>
</li>
<li>
<a class="function" href="#build_lower">build_lower</a>
</li>
<li>
<a class="function" href="#build_upper">build_upper</a>
</li>
<li>
<a class="function" href="#build_extract_json_with_path">build_extract_json_with_path</a>
</li>
<li>
<a class="function" href="#build_mod">build_mod</a>
</li>
<li>
<a class="function" href="#build_pad">build_pad</a>
</li>
<li>
<a class="function" href="#build_array_constructor">build_array_constructor</a>
</li>
<li>
<a class="function" href="#build_convert_timezone">build_convert_timezone</a>
</li>
<li>
<a class="function" href="#build_trim">build_trim</a>
</li>
<li>
<a class="function" href="#build_coalesce">build_coalesce</a>
</li>
<li>
<a class="function" href="#build_locate_strposition">build_locate_strposition</a>
</li>
<li>
<a class="class" href="#Parser">Parser</a>
<ul class="memberlist">
<li>
<a class="function" href="#Parser.__init__">Parser</a>
</li>
<li>
<a class="variable" href="#Parser.FUNCTIONS">FUNCTIONS</a>
</li>
<li>
<a class="variable" href="#Parser.NO_PAREN_FUNCTIONS">NO_PAREN_FUNCTIONS</a>
</li>
<li>
<a class="variable" href="#Parser.STRUCT_TYPE_TOKENS">STRUCT_TYPE_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.NESTED_TYPE_TOKENS">NESTED_TYPE_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.ENUM_TYPE_TOKENS">ENUM_TYPE_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.AGGREGATE_TYPE_TOKENS">AGGREGATE_TYPE_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.TYPE_TOKENS">TYPE_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.SIGNED_TO_UNSIGNED_TYPE_TOKEN">SIGNED_TO_UNSIGNED_TYPE_TOKEN</a>
</li>
<li>
<a class="variable" href="#Parser.SUBQUERY_PREDICATES">SUBQUERY_PREDICATES</a>
</li>
<li>
<a class="variable" href="#Parser.RESERVED_TOKENS">RESERVED_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.DB_CREATABLES">DB_CREATABLES</a>
</li>
<li>
<a class="variable" href="#Parser.CREATABLES">CREATABLES</a>
</li>
<li>
<a class="variable" href="#Parser.ALTERABLES">ALTERABLES</a>
</li>
<li>
<a class="variable" href="#Parser.ID_VAR_TOKENS">ID_VAR_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.TABLE_ALIAS_TOKENS">TABLE_ALIAS_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.ALIAS_TOKENS">ALIAS_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.ARRAY_CONSTRUCTORS">ARRAY_CONSTRUCTORS</a>
</li>
<li>
<a class="variable" href="#Parser.COMMENT_TABLE_ALIAS_TOKENS">COMMENT_TABLE_ALIAS_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.UPDATE_ALIAS_TOKENS">UPDATE_ALIAS_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.TRIM_TYPES">TRIM_TYPES</a>
</li>
<li>
<a class="variable" href="#Parser.FUNC_TOKENS">FUNC_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.CONJUNCTION">CONJUNCTION</a>
</li>
<li>
<a class="variable" href="#Parser.ASSIGNMENT">ASSIGNMENT</a>
</li>
<li>
<a class="variable" href="#Parser.DISJUNCTION">DISJUNCTION</a>
</li>
<li>
<a class="variable" href="#Parser.EQUALITY">EQUALITY</a>
</li>
<li>
<a class="variable" href="#Parser.COMPARISON">COMPARISON</a>
</li>
<li>
<a class="variable" href="#Parser.BITWISE">BITWISE</a>
</li>
<li>
<a class="variable" href="#Parser.TERM">TERM</a>
</li>
<li>
<a class="variable" href="#Parser.FACTOR">FACTOR</a>
</li>
<li>
<a class="variable" href="#Parser.EXPONENT">EXPONENT</a>
</li>
<li>
<a class="variable" href="#Parser.TIMES">TIMES</a>
</li>
<li>
<a class="variable" href="#Parser.TIMESTAMPS">TIMESTAMPS</a>
</li>
<li>
<a class="variable" href="#Parser.SET_OPERATIONS">SET_OPERATIONS</a>
</li>
<li>
<a class="variable" href="#Parser.JOIN_METHODS">JOIN_METHODS</a>
</li>
<li>
<a class="variable" href="#Parser.JOIN_SIDES">JOIN_SIDES</a>
</li>
<li>
<a class="variable" href="#Parser.JOIN_KINDS">JOIN_KINDS</a>
</li>
<li>
<a class="variable" href="#Parser.JOIN_HINTS">JOIN_HINTS</a>
</li>
<li>
<a class="variable" href="#Parser.LAMBDAS">LAMBDAS</a>
</li>
<li>
<a class="variable" href="#Parser.COLUMN_OPERATORS">COLUMN_OPERATORS</a>
</li>
<li>
<a class="variable" href="#Parser.EXPRESSION_PARSERS">EXPRESSION_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.STATEMENT_PARSERS">STATEMENT_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.UNARY_PARSERS">UNARY_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.STRING_PARSERS">STRING_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.NUMERIC_PARSERS">NUMERIC_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.PRIMARY_PARSERS">PRIMARY_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.PLACEHOLDER_PARSERS">PLACEHOLDER_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.RANGE_PARSERS">RANGE_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.PROPERTY_PARSERS">PROPERTY_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.CONSTRAINT_PARSERS">CONSTRAINT_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.ALTER_PARSERS">ALTER_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.ALTER_ALTER_PARSERS">ALTER_ALTER_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.SCHEMA_UNNAMED_CONSTRAINTS">SCHEMA_UNNAMED_CONSTRAINTS</a>
</li>
<li>
<a class="variable" href="#Parser.NO_PAREN_FUNCTION_PARSERS">NO_PAREN_FUNCTION_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.INVALID_FUNC_NAME_TOKENS">INVALID_FUNC_NAME_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.FUNCTIONS_WITH_ALIASED_ARGS">FUNCTIONS_WITH_ALIASED_ARGS</a>
</li>
<li>
<a class="variable" href="#Parser.KEY_VALUE_DEFINITIONS">KEY_VALUE_DEFINITIONS</a>
</li>
<li>
<a class="variable" href="#Parser.FUNCTION_PARSERS">FUNCTION_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.QUERY_MODIFIER_PARSERS">QUERY_MODIFIER_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.SET_PARSERS">SET_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.SHOW_PARSERS">SHOW_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.TYPE_LITERAL_PARSERS">TYPE_LITERAL_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.TYPE_CONVERTERS">TYPE_CONVERTERS</a>
</li>
<li>
<a class="variable" href="#Parser.DDL_SELECT_TOKENS">DDL_SELECT_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.PRE_VOLATILE_TOKENS">PRE_VOLATILE_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.TRANSACTION_KIND">TRANSACTION_KIND</a>
</li>
<li>
<a class="variable" href="#Parser.TRANSACTION_CHARACTERISTICS">TRANSACTION_CHARACTERISTICS</a>
</li>
<li>
<a class="variable" href="#Parser.CONFLICT_ACTIONS">CONFLICT_ACTIONS</a>
</li>
<li>
<a class="variable" href="#Parser.CREATE_SEQUENCE">CREATE_SEQUENCE</a>
</li>
<li>
<a class="variable" href="#Parser.ISOLATED_LOADING_OPTIONS">ISOLATED_LOADING_OPTIONS</a>
</li>
<li>
<a class="variable" href="#Parser.USABLES">USABLES</a>
</li>
<li>
<a class="variable" href="#Parser.CAST_ACTIONS">CAST_ACTIONS</a>
</li>
<li>
<a class="variable" href="#Parser.SCHEMA_BINDING_OPTIONS">SCHEMA_BINDING_OPTIONS</a>
</li>
<li>
<a class="variable" href="#Parser.PROCEDURE_OPTIONS">PROCEDURE_OPTIONS</a>
</li>
<li>
<a class="variable" href="#Parser.EXECUTE_AS_OPTIONS">EXECUTE_AS_OPTIONS</a>
</li>
<li>
<a class="variable" href="#Parser.KEY_CONSTRAINT_OPTIONS">KEY_CONSTRAINT_OPTIONS</a>
</li>
<li>
<a class="variable" href="#Parser.INSERT_ALTERNATIVES">INSERT_ALTERNATIVES</a>
</li>
<li>
<a class="variable" href="#Parser.CLONE_KEYWORDS">CLONE_KEYWORDS</a>
</li>
<li>
<a class="variable" href="#Parser.HISTORICAL_DATA_PREFIX">HISTORICAL_DATA_PREFIX</a>
</li>
<li>
<a class="variable" href="#Parser.HISTORICAL_DATA_KIND">HISTORICAL_DATA_KIND</a>
</li>
<li>
<a class="variable" href="#Parser.OPCLASS_FOLLOW_KEYWORDS">OPCLASS_FOLLOW_KEYWORDS</a>
</li>
<li>
<a class="variable" href="#Parser.OPTYPE_FOLLOW_TOKENS">OPTYPE_FOLLOW_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.TABLE_INDEX_HINT_TOKENS">TABLE_INDEX_HINT_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.VIEW_ATTRIBUTES">VIEW_ATTRIBUTES</a>
</li>
<li>
<a class="variable" href="#Parser.WINDOW_ALIAS_TOKENS">WINDOW_ALIAS_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.WINDOW_BEFORE_PAREN_TOKENS">WINDOW_BEFORE_PAREN_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.WINDOW_SIDES">WINDOW_SIDES</a>
</li>
<li>
<a class="variable" href="#Parser.JSON_KEY_VALUE_SEPARATOR_TOKENS">JSON_KEY_VALUE_SEPARATOR_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.FETCH_TOKENS">FETCH_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.ADD_CONSTRAINT_TOKENS">ADD_CONSTRAINT_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.DISTINCT_TOKENS">DISTINCT_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.NULL_TOKENS">NULL_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.UNNEST_OFFSET_ALIAS_TOKENS">UNNEST_OFFSET_ALIAS_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.SELECT_START_TOKENS">SELECT_START_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.COPY_INTO_VARLEN_OPTIONS">COPY_INTO_VARLEN_OPTIONS</a>
</li>
<li>
<a class="variable" href="#Parser.IS_JSON_PREDICATE_KIND">IS_JSON_PREDICATE_KIND</a>
</li>
<li>
<a class="variable" href="#Parser.ODBC_DATETIME_LITERALS">ODBC_DATETIME_LITERALS</a>
</li>
<li>
<a class="variable" href="#Parser.ON_CONDITION_TOKENS">ON_CONDITION_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.PRIVILEGE_FOLLOW_TOKENS">PRIVILEGE_FOLLOW_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.DESCRIBE_STYLES">DESCRIBE_STYLES</a>
</li>
<li>
<a class="variable" href="#Parser.ANALYZE_STYLES">ANALYZE_STYLES</a>
</li>
<li>
<a class="variable" href="#Parser.ANALYZE_EXPRESSION_PARSERS">ANALYZE_EXPRESSION_PARSERS</a>
</li>
<li>
<a class="variable" href="#Parser.PARTITION_KEYWORDS">PARTITION_KEYWORDS</a>
</li>
<li>
<a class="variable" href="#Parser.AMBIGUOUS_ALIAS_TOKENS">AMBIGUOUS_ALIAS_TOKENS</a>
</li>
<li>
<a class="variable" href="#Parser.OPERATION_MODIFIERS">OPERATION_MODIFIERS</a>
</li>
<li>
<a class="variable" href="#Parser.RECURSIVE_CTE_SEARCH_KIND">RECURSIVE_CTE_SEARCH_KIND</a>
</li>
<li>
<a class="variable" href="#Parser.MODIFIABLES">MODIFIABLES</a>
</li>
<li>
<a class="variable" href="#Parser.STRICT_CAST">STRICT_CAST</a>
</li>
<li>
<a class="variable" href="#Parser.PREFIXED_PIVOT_COLUMNS">PREFIXED_PIVOT_COLUMNS</a>
</li>
<li>
<a class="variable" href="#Parser.IDENTIFY_PIVOT_STRINGS">IDENTIFY_PIVOT_STRINGS</a>
</li>
<li>
<a class="variable" href="#Parser.LOG_DEFAULTS_TO_LN">LOG_DEFAULTS_TO_LN</a>
</li>
<li>
<a class="variable" href="#Parser.ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</a>
</li>
<li>
<a class="variable" href="#Parser.TABLESAMPLE_CSV">TABLESAMPLE_CSV</a>
</li>
<li>
<a class="variable" href="#Parser.DEFAULT_SAMPLING_METHOD">DEFAULT_SAMPLING_METHOD</a>
</li>
<li>
<a class="variable" href="#Parser.SET_REQUIRES_ASSIGNMENT_DELIMITER">SET_REQUIRES_ASSIGNMENT_DELIMITER</a>
</li>
<li>
<a class="variable" href="#Parser.TRIM_PATTERN_FIRST">TRIM_PATTERN_FIRST</a>
</li>
<li>
<a class="variable" href="#Parser.STRING_ALIASES">STRING_ALIASES</a>
</li>
<li>
<a class="variable" href="#Parser.MODIFIERS_ATTACHED_TO_SET_OP">MODIFIERS_ATTACHED_TO_SET_OP</a>
</li>
<li>
<a class="variable" href="#Parser.SET_OP_MODIFIERS">SET_OP_MODIFIERS</a>
</li>
<li>
<a class="variable" href="#Parser.NO_PAREN_IF_COMMANDS">NO_PAREN_IF_COMMANDS</a>
</li>
<li>
<a class="variable" href="#Parser.JSON_ARROWS_REQUIRE_JSON_TYPE">JSON_ARROWS_REQUIRE_JSON_TYPE</a>
</li>
<li>
<a class="variable" href="#Parser.COLON_IS_VARIANT_EXTRACT">COLON_IS_VARIANT_EXTRACT</a>
</li>
<li>
<a class="variable" href="#Parser.VALUES_FOLLOWED_BY_PAREN">VALUES_FOLLOWED_BY_PAREN</a>
</li>
<li>
<a class="variable" href="#Parser.SUPPORTS_IMPLICIT_UNNEST">SUPPORTS_IMPLICIT_UNNEST</a>
</li>
<li>
<a class="variable" href="#Parser.INTERVAL_SPANS">INTERVAL_SPANS</a>
</li>
<li>
<a class="variable" href="#Parser.SUPPORTS_PARTITION_SELECTION">SUPPORTS_PARTITION_SELECTION</a>
</li>
<li>
<a class="variable" href="#Parser.WRAPPED_TRANSFORM_COLUMN_CONSTRAINT">WRAPPED_TRANSFORM_COLUMN_CONSTRAINT</a>
</li>
<li>
<a class="variable" href="#Parser.OPTIONAL_ALIAS_TOKEN_CTE">OPTIONAL_ALIAS_TOKEN_CTE</a>
</li>
<li>
<a class="variable" href="#Parser.SHOW_TRIE">SHOW_TRIE</a>
</li>
<li>
<a class="variable" href="#Parser.SET_TRIE">SET_TRIE</a>
</li>
<li>
<a class="variable" href="#Parser.error_level">error_level</a>
</li>
<li>
<a class="variable" href="#Parser.error_message_context">error_message_context</a>
</li>
<li>
<a class="variable" href="#Parser.max_errors">max_errors</a>
</li>
<li>
<a class="variable" href="#Parser.dialect">dialect</a>
</li>
<li>
<a class="function" href="#Parser.reset">reset</a>
</li>
<li>
<a class="function" href="#Parser.parse">parse</a>
</li>
<li>
<a class="function" href="#Parser.parse_into">parse_into</a>
</li>
<li>
<a class="function" href="#Parser.check_errors">check_errors</a>
</li>
<li>
<a class="function" href="#Parser.raise_error">raise_error</a>
</li>
<li>
<a class="function" href="#Parser.expression">expression</a>
</li>
<li>
<a class="function" href="#Parser.validate_expression">validate_expression</a>
</li>
<li>
<a class="variable" href="#Parser.errors">errors</a>
</li>
<li>
<a class="variable" href="#Parser.sql">sql</a>
</li>
</ul>
</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/parser.py">Edit on GitHub</a>
<h1 class="modulename">
<a href="./../sqlglot.html">sqlglot</a><wbr>.parser </h1>
<input id="mod-parser-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-source-button" for="mod-parser-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="w"> </span><span class="nn">__future__</span><span class="w"> </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="w"> </span><span class="nn">logging</span>
</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">t</span>
</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">collections</span><span class="w"> </span><span class="kn">import</span> <span class="n">defaultdict</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="w"> </span><span class="nn">sqlglot</span><span class="w"> </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="w"> </span><span class="nn">sqlglot.errors</span><span class="w"> </span><span class="kn">import</span> <span class="n">ErrorLevel</span><span class="p">,</span> <span class="n">ParseError</span><span class="p">,</span> <span class="n">concat_messages</span><span class="p">,</span> <span class="n">merge_errors</span>
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.helper</span><span class="w"> </span><span class="kn">import</span> <span class="n">apply_index_offset</span><span class="p">,</span> <span class="n">ensure_list</span><span class="p">,</span> <span class="n">seq_get</span>
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.time</span><span class="w"> </span><span class="kn">import</span> <span class="n">format_time</span>
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.tokens</span><span class="w"> </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-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.trie</span><span class="w"> </span><span class="kn">import</span> <span class="n">TrieResult</span><span class="p">,</span> <span class="n">in_trie</span><span class="p">,</span> <span class="n">new_trie</span>
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a>
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="k">if</span> <span class="n">t</span><span class="o">.</span><span class="n">TYPE_CHECKING</span><span class="p">:</span>
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot._typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">E</span><span class="p">,</span> <span class="n">Lit</span>
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects.dialect</span><span class="w"> </span><span class="kn">import</span> <span class="n">Dialect</span><span class="p">,</span> <span class="n">DialectType</span>
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a>
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">T</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;T&quot;</span><span class="p">)</span>
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">TCeilFloor</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;TCeilFloor&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Ceil</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Floor</span><span class="p">)</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a>
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;sqlglot&quot;</span><span class="p">)</span>
</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="n">OPTIONS_TYPE</span> <span class="o">=</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">Sequence</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Union</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Sequence</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span> <span class="nb">str</span><span class="p">]]]</span>
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a>
</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="k">def</span><span class="w"> </span><span class="nf">build_var_map</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">StarMap</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span>
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</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">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">is_star</span><span class="p">:</span>
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StarMap</span><span class="p">(</span><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><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</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-33"><a href="#L-33"><span class="linenos"> 33</span></a> <span class="n">keys</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">])</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">(</span><span class="n">keys</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="o">*</span><span class="n">keys</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">values</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="o">*</span><span class="n">values</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a>
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a>
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_like</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">Escape</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Like</span><span class="p">:</span>
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="n">like</span> <span class="o">=</span> <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">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">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">0</span><span class="p">))</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Escape</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">like</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">2</span><span class="p">))</span> <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">&gt;</span> <span class="mi">2</span> <span class="k">else</span> <span class="n">like</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="k">def</span><span class="w"> </span><span class="nf">binary_range_parser</span><span class="p">(</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">reverse_args</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</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">Parser</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 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-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_binary_range</span><span class="p">(</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Parser</span><span class="p">,</span> <span class="n">this</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-49"><a href="#L-49"><span class="linenos"> 49</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-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="k">if</span> <span class="n">reverse_args</span><span class="p">:</span>
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <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">this</span>
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_escape</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</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">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-54"><a href="#L-54"><span class="linenos"> 54</span></a>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="k">return</span> <span class="n">_parse_binary_range</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">def</span><span class="w"> </span><span class="nf">build_logarithm</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="n">dialect</span><span class="p">:</span> <span class="n">Dialect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">:</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="c1"># Default argument order is base, expression</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</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-61"><a href="#L-61"><span class="linenos"> 61</span></a> <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-62"><a href="#L-62"><span class="linenos"> 62</span></a>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dialect</span><span class="o">.</span><span class="n">LOG_BASE_FIRST</span><span class="p">:</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <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">this</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</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">expression</span><span class="p">)</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="k">return</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Ln</span> <span class="k">if</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parser_class</span><span class="o">.</span><span class="n">LOG_DEFAULTS_TO_LN</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</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-69"><a href="#L-69"><span class="linenos"> 69</span></a>
</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="w"> </span><span class="nf">build_hex</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="n">dialect</span><span class="p">:</span> <span class="n">Dialect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">LowerHex</span><span class="p">:</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">arg</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-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">LowerHex</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="p">)</span> <span class="k">if</span> <span class="n">dialect</span><span class="o">.</span><span class="n">HEX_LOWERCASE</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="p">)</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_lower</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">Lower</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">:</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="c1"># LOWER(HEX(..)) can be simplified to LowerHex to simplify its transpilation</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">arg</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-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">LowerHex</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">)</span> <span class="k">else</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">arg</span><span class="p">)</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_upper</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">Upper</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">:</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="c1"># UPPER(HEX(..)) can be simplified to Hex to simplify its transpilation</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">arg</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-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Upper</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="p">)</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_extract_json_with_path</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">E</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">Dialect</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_builder</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="n">dialect</span><span class="p">:</span> <span class="n">Dialect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expr_type</span><span class="p">(</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</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 class="n">expression</span><span class="o">=</span><span class="n">dialect</span><span class="o">.</span><span class="n">to_json_path</span><span class="p">(</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-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="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">expr_type</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">expression</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="n">args</span><span class="p">[</span><span class="mi">2</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="k">return</span> <span class="n">expression</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="k">return</span> <span class="n">_builder</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
</span><span id="L-100"><a href="#L-100"><span class="linenos"> 100</span></a>
</span><span id="L-101"><a href="#L-101"><span class="linenos"> 101</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_mod</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">Mod</span><span class="p">:</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos"> 102</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-103"><a href="#L-103"><span class="linenos"> 103</span></a> <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-104"><a href="#L-104"><span class="linenos"> 104</span></a>
</span><span id="L-105"><a href="#L-105"><span class="linenos"> 105</span></a> <span class="c1"># Wrap the operands if they are binary nodes, e.g. MOD(a + 1, 7) -&gt; (a + 1) % 7</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos"> 106</span></a> <span class="n">this</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">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span> <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">Binary</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos"> 107</span></a> <span class="n">expression</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">this</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span> <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">Binary</span><span class="p">)</span> <span class="k">else</span> <span class="n">expression</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos"> 108</span></a>
</span><span id="L-109"><a href="#L-109"><span class="linenos"> 109</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mod</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">expression</span><span class="p">)</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos"> 110</span></a>
</span><span id="L-111"><a href="#L-111"><span class="linenos"> 111</span></a>
</span><span id="L-112"><a href="#L-112"><span class="linenos"> 112</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_pad</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="n">is_left</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos"> 113</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pad</span><span class="p">(</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos"> 114</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-115"><a href="#L-115"><span class="linenos"> 115</span></a> <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-116"><a href="#L-116"><span class="linenos"> 116</span></a> <span class="n">fill_pattern</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-117"><a href="#L-117"><span class="linenos"> 117</span></a> <span class="n">is_left</span><span class="o">=</span><span class="n">is_left</span><span class="p">,</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos"> 118</span></a> <span class="p">)</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos"> 119</span></a>
</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">def</span><span class="w"> </span><span class="nf">build_array_constructor</span><span class="p">(</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos"> 122</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">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="n">bracket_kind</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">Dialect</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos"> 123</span></a><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-124"><a href="#L-124"><span class="linenos"> 124</span></a> <span class="n">array_exp</span> <span class="o">=</span> <span class="n">exp_class</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos"> 125</span></a>
</span><span id="L-126"><a href="#L-126"><span class="linenos"> 126</span></a> <span class="k">if</span> <span class="n">exp_class</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span> <span class="ow">and</span> <span class="n">dialect</span><span class="o">.</span><span class="n">HAS_DISTINCT_ARRAY_CONSTRUCTORS</span><span class="p">:</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos"> 127</span></a> <span class="n">array_exp</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;bracket_notation&quot;</span><span class="p">,</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos"> 128</span></a>
</span><span id="L-129"><a href="#L-129"><span class="linenos"> 129</span></a> <span class="k">return</span> <span class="n">array_exp</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos"> 130</span></a>
</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 class="k">def</span><span class="w"> </span><span class="nf">build_convert_timezone</span><span class="p">(</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos"> 133</span></a> <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="n">default_source_tz</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-134"><a href="#L-134"><span class="linenos"> 134</span></a><span class="p">)</span> <span class="o">-&gt;</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">ConvertTimezone</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">]:</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos"> 135</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">==</span> <span class="mi">2</span><span class="p">:</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos"> 136</span></a> <span class="n">source_tz</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">default_source_tz</span><span class="p">)</span> <span class="k">if</span> <span class="n">default_source_tz</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos"> 137</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConvertTimezone</span><span class="p">(</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos"> 138</span></a> <span class="n">source_tz</span><span class="o">=</span><span class="n">source_tz</span><span class="p">,</span> <span class="n">target_tz</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">timestamp</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-139"><a href="#L-139"><span class="linenos"> 139</span></a> <span class="p">)</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos"> 140</span></a>
</span><span id="L-141"><a href="#L-141"><span class="linenos"> 141</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConvertTimezone</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</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><span id="L-144"><a href="#L-144"><span class="linenos"> 144</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_trim</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="n">is_left</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos"> 145</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">(</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos"> 146</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-147"><a href="#L-147"><span class="linenos"> 147</span></a> <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-148"><a href="#L-148"><span class="linenos"> 148</span></a> <span class="n">position</span><span class="o">=</span><span class="s2">&quot;LEADING&quot;</span> <span class="k">if</span> <span class="n">is_left</span> <span class="k">else</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">,</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos"> 149</span></a> <span class="p">)</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos"> 150</span></a>
</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="k">def</span><span class="w"> </span><span class="nf">build_coalesce</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="n">is_nvl</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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">:</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos"> 153</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</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">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="n">is_nvl</span><span class="o">=</span><span class="n">is_nvl</span><span class="p">)</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos"> 154</span></a>
</span><span id="L-155"><a href="#L-155"><span class="linenos"> 155</span></a>
</span><span id="L-156"><a href="#L-156"><span class="linenos"> 156</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_locate_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><span id="L-157"><a href="#L-157"><span class="linenos"> 157</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-158"><a href="#L-158"><span class="linenos"> 158</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-159"><a href="#L-159"><span class="linenos"> 159</span></a> <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><span id="L-160"><a href="#L-160"><span class="linenos"> 160</span></a> <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-161"><a href="#L-161"><span class="linenos"> 161</span></a> <span class="p">)</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos"> 162</span></a>
</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="k">class</span><span class="w"> </span><span class="nc">_Parser</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos"> 165</span></a> <span class="k">def</span><span class="w"> </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-166"><a href="#L-166"><span class="linenos"> 166</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-167"><a href="#L-167"><span class="linenos"> 167</span></a>
</span><span id="L-168"><a href="#L-168"><span class="linenos"> 168</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">SHOW_TRIE</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span><span class="n">key</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">key</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">)</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos"> 169</span></a> <span class="n">klass</span><span class="o">.</span><span class="n">SET_TRIE</span> <span class="o">=</span> <span class="n">new_trie</span><span class="p">(</span><span class="n">key</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">key</span> <span class="ow">in</span> <span class="n">klass</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">)</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="k">return</span> <span class="n">klass</span>
</span><span id="L-172"><a href="#L-172"><span class="linenos"> 172</span></a>
</span><span id="L-173"><a href="#L-173"><span class="linenos"> 173</span></a>
</span><span id="L-174"><a href="#L-174"><span class="linenos"> 174</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Parser</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">_Parser</span><span class="p">):</span>
</span><span id="L-175"><a href="#L-175"><span class="linenos"> 175</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-176"><a href="#L-176"><span class="linenos"> 176</span></a><span class="sd"> Parser consumes a list of tokens produced by the Tokenizer and produces a parsed syntax tree.</span>
</span><span id="L-177"><a href="#L-177"><span class="linenos"> 177</span></a>
</span><span id="L-178"><a href="#L-178"><span class="linenos"> 178</span></a><span class="sd"> Args:</span>
</span><span id="L-179"><a href="#L-179"><span class="linenos"> 179</span></a><span class="sd"> error_level: The desired error level.</span>
</span><span id="L-180"><a href="#L-180"><span class="linenos"> 180</span></a><span class="sd"> Default: ErrorLevel.IMMEDIATE</span>
</span><span id="L-181"><a href="#L-181"><span class="linenos"> 181</span></a><span class="sd"> error_message_context: The amount of context to capture from a query string when displaying</span>
</span><span id="L-182"><a href="#L-182"><span class="linenos"> 182</span></a><span class="sd"> the error message (in number of characters).</span>
</span><span id="L-183"><a href="#L-183"><span class="linenos"> 183</span></a><span class="sd"> Default: 100</span>
</span><span id="L-184"><a href="#L-184"><span class="linenos"> 184</span></a><span class="sd"> max_errors: Maximum number of error messages to include in a raised ParseError.</span>
</span><span id="L-185"><a href="#L-185"><span class="linenos"> 185</span></a><span class="sd"> This is only relevant if error_level is ErrorLevel.RAISE.</span>
</span><span id="L-186"><a href="#L-186"><span class="linenos"> 186</span></a><span class="sd"> Default: 3</span>
</span><span id="L-187"><a href="#L-187"><span class="linenos"> 187</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-188"><a href="#L-188"><span class="linenos"> 188</span></a>
</span><span id="L-189"><a href="#L-189"><span class="linenos"> 189</span></a> <span class="n">FUNCTIONS</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">Callable</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 class="o">**</span><span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">func</span><span class="o">.</span><span class="n">from_arg_list</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">func</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">FUNCTION_BY_NAME</span><span class="o">.</span><span class="n">items</span><span class="p">()},</span>
</span><span id="L-191"><a href="#L-191"><span class="linenos"> 191</span></a> <span class="o">**</span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">((</span><span class="s2">&quot;COALESCE&quot;</span><span class="p">,</span> <span class="s2">&quot;IFNULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NVL&quot;</span><span class="p">),</span> <span class="n">build_coalesce</span><span class="p">),</span>
</span><span id="L-192"><a href="#L-192"><span class="linenos"> 192</span></a> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">,</span> <span class="n">dialect</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="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="L-193"><a href="#L-193"><span class="linenos"> 193</span></a> <span class="s2">&quot;ARRAYAGG&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">(</span>
</span><span id="L-194"><a href="#L-194"><span class="linenos"> 194</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 class="n">nulls_excluded</span><span class="o">=</span><span class="n">dialect</span><span class="o">.</span><span class="n">ARRAY_AGG_INCLUDES_NULLS</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos"> 195</span></a> <span class="p">),</span>
</span><span id="L-196"><a href="#L-196"><span class="linenos"> 196</span></a> <span class="s2">&quot;ARRAY_AGG&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">(</span>
</span><span id="L-197"><a href="#L-197"><span class="linenos"> 197</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 class="n">nulls_excluded</span><span class="o">=</span><span class="n">dialect</span><span class="o">.</span><span class="n">ARRAY_AGG_INCLUDES_NULLS</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="L-198"><a href="#L-198"><span class="linenos"> 198</span></a> <span class="p">),</span>
</span><span id="L-199"><a href="#L-199"><span class="linenos"> 199</span></a> <span class="s2">&quot;CHAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Chr</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="L-200"><a href="#L-200"><span class="linenos"> 200</span></a> <span class="s2">&quot;CHR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Chr</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="L-201"><a href="#L-201"><span class="linenos"> 201</span></a> <span class="s2">&quot;COUNT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</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">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="n">big_int</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-202"><a href="#L-202"><span class="linenos"> 202</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">(</span>
</span><span id="L-203"><a href="#L-203"><span class="linenos"> 203</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">,</span>
</span><span id="L-204"><a href="#L-204"><span class="linenos"> 204</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
</span><span id="L-205"><a href="#L-205"><span class="linenos"> 205</span></a> <span class="n">coalesce</span><span class="o">=</span><span class="n">dialect</span><span class="o">.</span><span class="n">CONCAT_COALESCE</span><span class="p">,</span>
</span><span id="L-206"><a href="#L-206"><span class="linenos"> 206</span></a> <span class="p">),</span>
</span><span id="L-207"><a href="#L-207"><span class="linenos"> 207</span></a> <span class="s2">&quot;CONCAT_WS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">(</span>
</span><span id="L-208"><a href="#L-208"><span class="linenos"> 208</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">,</span>
</span><span id="L-209"><a href="#L-209"><span class="linenos"> 209</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a> <span class="n">coalesce</span><span class="o">=</span><span class="n">dialect</span><span class="o">.</span><span class="n">CONCAT_COALESCE</span><span class="p">,</span>
</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</span></a> <span class="p">),</span>
</span><span id="L-212"><a href="#L-212"><span class="linenos"> 212</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&quot;</span><span class="p">:</span> <span class="n">build_convert_timezone</span><span class="p">,</span>
</span><span id="L-213"><a href="#L-213"><span class="linenos"> 213</span></a> <span class="s2">&quot;DATE_TO_DATE_STR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
</span><span id="L-214"><a href="#L-214"><span class="linenos"> 214</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-215"><a href="#L-215"><span class="linenos"> 215</span></a> <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="p">(</span><span class="n">this</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">TEXT</span><span class="p">),</span>
</span><span id="L-216"><a href="#L-216"><span class="linenos"> 216</span></a> <span class="p">),</span>
</span><span id="L-217"><a href="#L-217"><span class="linenos"> 217</span></a> <span class="s2">&quot;GENERATE_DATE_ARRAY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateDateArray</span><span class="p">(</span>
</span><span id="L-218"><a href="#L-218"><span class="linenos"> 218</span></a> <span class="n">start</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-219"><a href="#L-219"><span class="linenos"> 219</span></a> <span class="n">end</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-220"><a href="#L-220"><span class="linenos"> 220</span></a> <span class="n">step</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 class="ow">or</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">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">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="s2">&quot;DAY&quot;</span><span class="p">)),</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos"> 221</span></a> <span class="p">),</span>
</span><span id="L-222"><a href="#L-222"><span class="linenos"> 222</span></a> <span class="s2">&quot;GLOB&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Glob</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">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">0</span><span class="p">)),</span>
</span><span id="L-223"><a href="#L-223"><span class="linenos"> 223</span></a> <span class="s2">&quot;HEX&quot;</span><span class="p">:</span> <span class="n">build_hex</span><span class="p">,</span>
</span><span id="L-224"><a href="#L-224"><span class="linenos"> 224</span></a> <span class="s2">&quot;JSON_EXTRACT&quot;</span><span class="p">:</span> <span class="n">build_extract_json_with_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">),</span>
</span><span id="L-225"><a href="#L-225"><span class="linenos"> 225</span></a> <span class="s2">&quot;JSON_EXTRACT_SCALAR&quot;</span><span class="p">:</span> <span class="n">build_extract_json_with_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">),</span>
</span><span id="L-226"><a href="#L-226"><span class="linenos"> 226</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">:</span> <span class="n">build_extract_json_with_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">),</span>
</span><span id="L-227"><a href="#L-227"><span class="linenos"> 227</span></a> <span class="s2">&quot;LIKE&quot;</span><span class="p">:</span> <span class="n">build_like</span><span class="p">,</span>
</span><span id="L-228"><a href="#L-228"><span class="linenos"> 228</span></a> <span class="s2">&quot;LOG&quot;</span><span class="p">:</span> <span class="n">build_logarithm</span><span class="p">,</span>
</span><span id="L-229"><a href="#L-229"><span class="linenos"> 229</span></a> <span class="s2">&quot;LOG2&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</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">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</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">0</span><span class="p">)),</span>
</span><span id="L-230"><a href="#L-230"><span class="linenos"> 230</span></a> <span class="s2">&quot;LOG10&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</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">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">10</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">0</span><span class="p">)),</span>
</span><span id="L-231"><a href="#L-231"><span class="linenos"> 231</span></a> <span class="s2">&quot;LOWER&quot;</span><span class="p">:</span> <span class="n">build_lower</span><span class="p">,</span>
</span><span id="L-232"><a href="#L-232"><span class="linenos"> 232</span></a> <span class="s2">&quot;LPAD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_pad</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
</span><span id="L-233"><a href="#L-233"><span class="linenos"> 233</span></a> <span class="s2">&quot;LEFTPAD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_pad</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos"> 234</span></a> <span class="s2">&quot;LTRIM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_trim</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
</span><span id="L-235"><a href="#L-235"><span class="linenos"> 235</span></a> <span class="s2">&quot;MOD&quot;</span><span class="p">:</span> <span class="n">build_mod</span><span class="p">,</span>
</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a> <span class="s2">&quot;RIGHTPAD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_pad</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">is_left</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a> <span class="s2">&quot;RPAD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_pad</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">is_left</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="L-238"><a href="#L-238"><span class="linenos"> 238</span></a> <span class="s2">&quot;RTRIM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_trim</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">is_left</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a> <span class="s2">&quot;SCOPE_RESOLUTION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ScopeResolution</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">0</span><span class="p">))</span>
</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</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">!=</span> <span class="mi">2</span>
</span><span id="L-241"><a href="#L-241"><span class="linenos"> 241</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">ScopeResolution</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-242"><a href="#L-242"><span class="linenos"> 242</span></a> <span class="s2">&quot;STRPOS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="L-243"><a href="#L-243"><span class="linenos"> 243</span></a> <span class="s2">&quot;CHARINDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_locate_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</span></a> <span class="s2">&quot;INSTR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="L-245"><a href="#L-245"><span class="linenos"> 245</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_locate_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a> <span class="s2">&quot;TIME_TO_TIME_STR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
</span><span id="L-247"><a href="#L-247"><span class="linenos"> 247</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-248"><a href="#L-248"><span class="linenos"> 248</span></a> <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="p">(</span><span class="n">this</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">TEXT</span><span class="p">),</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos"> 249</span></a> <span class="p">),</span>
</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">build_hex</span><span class="p">,</span>
</span><span id="L-251"><a href="#L-251"><span class="linenos"> 251</span></a> <span class="s2">&quot;TS_OR_DS_TO_DATE_STR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
</span><span id="L-252"><a href="#L-252"><span class="linenos"> 252</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><span id="L-253"><a href="#L-253"><span class="linenos"> 253</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-254"><a href="#L-254"><span class="linenos"> 254</span></a> <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="p">(</span><span class="n">this</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">TEXT</span><span class="p">),</span>
</span><span id="L-255"><a href="#L-255"><span class="linenos"> 255</span></a> <span class="p">),</span>
</span><span id="L-256"><a href="#L-256"><span class="linenos"> 256</span></a> <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><span id="L-257"><a href="#L-257"><span class="linenos"> 257</span></a> <span class="n">length</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">10</span><span class="p">),</span>
</span><span id="L-258"><a href="#L-258"><span class="linenos"> 258</span></a> <span class="p">),</span>
</span><span id="L-259"><a href="#L-259"><span class="linenos"> 259</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">ensure_list</span><span class="p">(</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-260"><a href="#L-260"><span class="linenos"> 260</span></a> <span class="s2">&quot;UPPER&quot;</span><span class="p">:</span> <span class="n">build_upper</span><span class="p">,</span>
</span><span id="L-261"><a href="#L-261"><span class="linenos"> 261</span></a> <span class="s2">&quot;VAR_MAP&quot;</span><span class="p">:</span> <span class="n">build_var_map</span><span class="p">,</span>
</span><span id="L-262"><a href="#L-262"><span class="linenos"> 262</span></a> <span class="p">}</span>
</span><span id="L-263"><a href="#L-263"><span class="linenos"> 263</span></a>
</span><span id="L-264"><a href="#L-264"><span class="linenos"> 264</span></a> <span class="n">NO_PAREN_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-265"><a href="#L-265"><span class="linenos"> 265</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">,</span>
</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">,</span>
</span><span id="L-267"><a href="#L-267"><span class="linenos"> 267</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">,</span>
</span><span id="L-268"><a href="#L-268"><span class="linenos"> 268</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">,</span>
</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="p">,</span>
</span><span id="L-270"><a href="#L-270"><span class="linenos"> 270</span></a> <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="n">STRUCT_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-273"><a href="#L-273"><span class="linenos"> 273</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NESTED</span><span class="p">,</span>
</span><span id="L-274"><a href="#L-274"><span class="linenos"> 274</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT</span><span class="p">,</span>
</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
</span><span id="L-276"><a href="#L-276"><span class="linenos"> 276</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</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><span id="L-278"><a href="#L-278"><span class="linenos"> 278</span></a>
</span><span id="L-279"><a href="#L-279"><span class="linenos"> 279</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
</span><span id="L-281"><a href="#L-281"><span class="linenos"> 281</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIST</span><span class="p">,</span>
</span><span id="L-282"><a href="#L-282"><span class="linenos"> 282</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">,</span>
</span><span id="L-283"><a href="#L-283"><span class="linenos"> 283</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
</span><span id="L-284"><a href="#L-284"><span class="linenos"> 284</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">,</span>
</span><span id="L-285"><a href="#L-285"><span class="linenos"> 285</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
</span><span id="L-286"><a href="#L-286"><span class="linenos"> 286</span></a> <span class="o">*</span><span class="n">STRUCT_TYPE_TOKENS</span><span class="p">,</span>
</span><span id="L-287"><a href="#L-287"><span class="linenos"> 287</span></a> <span class="p">}</span>
</span><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="n">ENUM_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-290"><a href="#L-290"><span class="linenos"> 290</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DYNAMIC</span><span class="p">,</span>
</span><span id="L-291"><a href="#L-291"><span class="linenos"> 291</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
</span><span id="L-292"><a href="#L-292"><span class="linenos"> 292</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">,</span>
</span><span id="L-293"><a href="#L-293"><span class="linenos"> 293</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">,</span>
</span><span id="L-294"><a href="#L-294"><span class="linenos"> 294</span></a> <span class="p">}</span>
</span><span id="L-295"><a href="#L-295"><span class="linenos"> 295</span></a>
</span><span id="L-296"><a href="#L-296"><span class="linenos"> 296</span></a> <span class="n">AGGREGATE_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-297"><a href="#L-297"><span class="linenos"> 297</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">,</span>
</span><span id="L-298"><a href="#L-298"><span class="linenos"> 298</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">,</span>
</span><span id="L-299"><a href="#L-299"><span class="linenos"> 299</span></a> <span class="p">}</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="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-302"><a href="#L-302"><span class="linenos"> 302</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT</span><span class="p">,</span>
</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
</span><span id="L-304"><a href="#L-304"><span class="linenos"> 304</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
</span><span id="L-305"><a href="#L-305"><span class="linenos"> 305</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
</span><span id="L-309"><a href="#L-309"><span class="linenos"> 309</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
</span><span id="L-311"><a href="#L-311"><span class="linenos"> 311</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
</span><span id="L-315"><a href="#L-315"><span class="linenos"> 315</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
</span><span id="L-316"><a href="#L-316"><span class="linenos"> 316</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">,</span>
</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UMEDIUMINT</span><span class="p">,</span>
</span><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">,</span>
</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
</span><span id="L-320"><a href="#L-320"><span class="linenos"> 320</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UDOUBLE</span><span class="p">,</span>
</span><span id="L-322"><a href="#L-322"><span class="linenos"> 322</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
</span><span id="L-323"><a href="#L-323"><span class="linenos"> 323</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
</span><span id="L-325"><a href="#L-325"><span class="linenos"> 325</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
</span><span id="L-326"><a href="#L-326"><span class="linenos"> 326</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BPCHAR</span><span class="p">,</span>
</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOB</span><span class="p">,</span>
</span><span id="L-331"><a href="#L-331"><span class="linenos"> 331</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
</span><span id="L-333"><a href="#L-333"><span class="linenos"> 333</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BINARY</span><span class="p">,</span>
</span><span id="L-334"><a href="#L-334"><span class="linenos"> 334</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
</span><span id="L-335"><a href="#L-335"><span class="linenos"> 335</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">,</span>
</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
</span><span id="L-338"><a href="#L-338"><span class="linenos"> 338</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">,</span>
</span><span id="L-339"><a href="#L-339"><span class="linenos"> 339</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">,</span>
</span><span id="L-340"><a href="#L-340"><span class="linenos"> 340</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
</span><span id="L-341"><a href="#L-341"><span class="linenos"> 341</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
</span><span id="L-342"><a href="#L-342"><span class="linenos"> 342</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
</span><span id="L-343"><a href="#L-343"><span class="linenos"> 343</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_S</span><span class="p">,</span>
</span><span id="L-344"><a href="#L-344"><span class="linenos"> 344</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_MS</span><span class="p">,</span>
</span><span id="L-345"><a href="#L-345"><span class="linenos"> 345</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_NS</span><span class="p">,</span>
</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
</span><span id="L-347"><a href="#L-347"><span class="linenos"> 347</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
</span><span id="L-348"><a href="#L-348"><span class="linenos"> 348</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPNTZ</span><span class="p">,</span>
</span><span id="L-349"><a href="#L-349"><span class="linenos"> 349</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
</span><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME2</span><span class="p">,</span>
</span><span id="L-351"><a href="#L-351"><span class="linenos"> 351</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLDATETIME</span><span class="p">,</span>
</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE32</span><span class="p">,</span>
</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
</span><span id="L-357"><a href="#L-357"><span class="linenos"> 357</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
</span><span id="L-358"><a href="#L-358"><span class="linenos"> 358</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
</span><span id="L-364"><a href="#L-364"><span class="linenos"> 364</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
</span><span id="L-368"><a href="#L-368"><span class="linenos"> 368</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL32</span><span class="p">,</span>
</span><span id="L-369"><a href="#L-369"><span class="linenos"> 369</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL64</span><span class="p">,</span>
</span><span id="L-370"><a href="#L-370"><span class="linenos"> 370</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL128</span><span class="p">,</span>
</span><span id="L-371"><a href="#L-371"><span class="linenos"> 371</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL256</span><span class="p">,</span>
</span><span id="L-372"><a href="#L-372"><span class="linenos"> 372</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UDECIMAL</span><span class="p">,</span>
</span><span id="L-373"><a href="#L-373"><span class="linenos"> 373</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
</span><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UUID</span><span class="p">,</span>
</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOGRAPHY</span><span class="p">,</span>
</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">POINT</span><span class="p">,</span>
</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RING</span><span class="p">,</span>
</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LINESTRING</span><span class="p">,</span>
</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MULTILINESTRING</span><span class="p">,</span>
</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">POLYGON</span><span class="p">,</span>
</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MULTIPOLYGON</span><span class="p">,</span>
</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HSTORE</span><span class="p">,</span>
</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
</span><span id="L-388"><a href="#L-388"><span class="linenos"> 388</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
</span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">,</span>
</span><span id="L-390"><a href="#L-390"><span class="linenos"> 390</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
</span><span id="L-391"><a href="#L-391"><span class="linenos"> 391</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">YEAR</span><span class="p">,</span>
</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
</span><span id="L-396"><a href="#L-396"><span class="linenos"> 396</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
</span><span id="L-397"><a href="#L-397"><span class="linenos"> 397</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
</span><span id="L-398"><a href="#L-398"><span class="linenos"> 398</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VECTOR</span><span class="p">,</span>
</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT</span><span class="p">,</span>
</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INET</span><span class="p">,</span>
</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPADDRESS</span><span class="p">,</span>
</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPPREFIX</span><span class="p">,</span>
</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV4</span><span class="p">,</span>
</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV6</span><span class="p">,</span>
</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">,</span>
</span><span id="L-408"><a href="#L-408"><span class="linenos"> 408</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NAME</span><span class="p">,</span>
</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TDIGEST</span><span class="p">,</span>
</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DYNAMIC</span><span class="p">,</span>
</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</span></a> <span class="o">*</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">,</span>
</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</span></a> <span class="o">*</span><span class="n">NESTED_TYPE_TOKENS</span><span class="p">,</span>
</span><span id="L-413"><a href="#L-413"><span class="linenos"> 413</span></a> <span class="o">*</span><span class="n">AGGREGATE_TYPE_TOKENS</span><span class="p">,</span>
</span><span id="L-414"><a href="#L-414"><span class="linenos"> 414</span></a> <span class="p">}</span>
</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">SIGNED_TO_UNSIGNED_TYPE_TOKEN</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-417"><a href="#L-417"><span class="linenos"> 417</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
</span><span id="L-418"><a href="#L-418"><span class="linenos"> 418</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
</span><span id="L-419"><a href="#L-419"><span class="linenos"> 419</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UMEDIUMINT</span><span class="p">,</span>
</span><span id="L-420"><a href="#L-420"><span class="linenos"> 420</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
</span><span id="L-421"><a href="#L-421"><span class="linenos"> 421</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
</span><span id="L-422"><a href="#L-422"><span class="linenos"> 422</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UDECIMAL</span><span class="p">,</span>
</span><span id="L-423"><a href="#L-423"><span class="linenos"> 423</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UDOUBLE</span><span class="p">,</span>
</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a> <span class="p">}</span>
</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a>
</span><span id="L-426"><a href="#L-426"><span class="linenos"> 426</span></a> <span class="n">SUBQUERY_PREDICATES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-427"><a href="#L-427"><span class="linenos"> 427</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
</span><span id="L-428"><a href="#L-428"><span class="linenos"> 428</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">All</span><span class="p">,</span>
</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">,</span>
</span><span id="L-430"><a href="#L-430"><span class="linenos"> 430</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
</span><span id="L-431"><a href="#L-431"><span class="linenos"> 431</span></a> <span class="p">}</span>
</span><span id="L-432"><a href="#L-432"><span class="linenos"> 432</span></a>
</span><span id="L-433"><a href="#L-433"><span class="linenos"> 433</span></a> <span class="n">RESERVED_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-434"><a href="#L-434"><span class="linenos"> 434</span></a> <span class="o">*</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span>
</span><span id="L-435"><a href="#L-435"><span class="linenos"> 435</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span>
</span><span id="L-436"><a href="#L-436"><span class="linenos"> 436</span></a> <span class="p">}</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">}</span>
</span><span id="L-437"><a href="#L-437"><span class="linenos"> 437</span></a>
</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</span></a> <span class="n">DB_CREATABLES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
</span><span id="L-440"><a href="#L-440"><span class="linenos"> 440</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
</span><span id="L-441"><a href="#L-441"><span class="linenos"> 441</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MODEL</span><span class="p">,</span>
</span><span id="L-442"><a href="#L-442"><span class="linenos"> 442</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NAMESPACE</span><span class="p">,</span>
</span><span id="L-443"><a href="#L-443"><span class="linenos"> 443</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
</span><span id="L-444"><a href="#L-444"><span class="linenos"> 444</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEQUENCE</span><span class="p">,</span>
</span><span id="L-445"><a href="#L-445"><span class="linenos"> 445</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SINK</span><span class="p">,</span>
</span><span id="L-446"><a href="#L-446"><span class="linenos"> 446</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOURCE</span><span class="p">,</span>
</span><span id="L-447"><a href="#L-447"><span class="linenos"> 447</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STORAGE_INTEGRATION</span><span class="p">,</span>
</span><span id="L-448"><a href="#L-448"><span class="linenos"> 448</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STREAMLIT</span><span class="p">,</span>
</span><span id="L-449"><a href="#L-449"><span class="linenos"> 449</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
</span><span id="L-450"><a href="#L-450"><span class="linenos"> 450</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TAG</span><span class="p">,</span>
</span><span id="L-451"><a href="#L-451"><span class="linenos"> 451</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">,</span>
</span><span id="L-452"><a href="#L-452"><span class="linenos"> 452</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WAREHOUSE</span><span class="p">,</span>
</span><span id="L-453"><a href="#L-453"><span class="linenos"> 453</span></a> <span class="p">}</span>
</span><span id="L-454"><a href="#L-454"><span class="linenos"> 454</span></a>
</span><span id="L-455"><a href="#L-455"><span class="linenos"> 455</span></a> <span class="n">CREATABLES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-456"><a href="#L-456"><span class="linenos"> 456</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">,</span>
</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">,</span>
</span><span id="L-459"><a href="#L-459"><span class="linenos"> 459</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span>
</span><span id="L-460"><a href="#L-460"><span class="linenos"> 460</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
</span><span id="L-461"><a href="#L-461"><span class="linenos"> 461</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
</span><span id="L-462"><a href="#L-462"><span class="linenos"> 462</span></a> <span class="o">*</span><span class="n">DB_CREATABLES</span><span class="p">,</span>
</span><span id="L-463"><a href="#L-463"><span class="linenos"> 463</span></a> <span class="p">}</span>
</span><span id="L-464"><a href="#L-464"><span class="linenos"> 464</span></a>
</span><span id="L-465"><a href="#L-465"><span class="linenos"> 465</span></a> <span class="n">ALTERABLES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-466"><a href="#L-466"><span class="linenos"> 466</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">,</span>
</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</span></a> <span class="p">}</span>
</span><span id="L-470"><a href="#L-470"><span class="linenos"> 470</span></a>
</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a> <span class="c1"># Tokens that can represent identifiers</span>
</span><span id="L-472"><a href="#L-472"><span class="linenos"> 472</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-473"><a href="#L-473"><span class="linenos"> 473</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span>
</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ATTACH</span><span class="p">,</span>
</span><span id="L-475"><a href="#L-475"><span class="linenos"> 475</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span>
</span><span id="L-476"><a href="#L-476"><span class="linenos"> 476</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
</span><span id="L-477"><a href="#L-477"><span class="linenos"> 477</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
</span><span id="L-478"><a href="#L-478"><span class="linenos"> 478</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span>
</span><span id="L-479"><a href="#L-479"><span class="linenos"> 479</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
</span><span id="L-480"><a href="#L-480"><span class="linenos"> 480</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">,</span>
</span><span id="L-481"><a href="#L-481"><span class="linenos"> 481</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
</span><span id="L-482"><a href="#L-482"><span class="linenos"> 482</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BPCHAR</span><span class="p">,</span>
</span><span id="L-483"><a href="#L-483"><span class="linenos"> 483</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</span><span class="p">,</span>
</span><span id="L-484"><a href="#L-484"><span class="linenos"> 484</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASE</span><span class="p">,</span>
</span><span id="L-485"><a href="#L-485"><span class="linenos"> 485</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">,</span>
</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
</span><span id="L-487"><a href="#L-487"><span class="linenos"> 487</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">,</span>
</span><span id="L-488"><a href="#L-488"><span class="linenos"> 488</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMIT</span><span class="p">,</span>
</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">,</span>
</span><span id="L-490"><a href="#L-490"><span class="linenos"> 490</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COPY</span><span class="p">,</span>
</span><span id="L-491"><a href="#L-491"><span class="linenos"> 491</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">,</span>
</span><span id="L-492"><a href="#L-492"><span class="linenos"> 492</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_SCHEMA</span><span class="p">,</span>
</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">,</span>
</span><span id="L-494"><a href="#L-494"><span class="linenos"> 494</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span>
</span><span id="L-495"><a href="#L-495"><span class="linenos"> 495</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">,</span>
</span><span id="L-496"><a href="#L-496"><span class="linenos"> 496</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</span><span class="p">,</span>
</span><span id="L-497"><a href="#L-497"><span class="linenos"> 497</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DETACH</span><span class="p">,</span>
</span><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
</span><span id="L-499"><a href="#L-499"><span class="linenos"> 499</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DIV</span><span class="p">,</span>
</span><span id="L-500"><a href="#L-500"><span class="linenos"> 500</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">,</span>
</span><span id="L-501"><a href="#L-501"><span class="linenos"> 501</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
</span><span id="L-502"><a href="#L-502"><span class="linenos"> 502</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXPORT</span><span class="p">,</span>
</span><span id="L-503"><a href="#L-503"><span class="linenos"> 503</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">,</span>
</span><span id="L-504"><a href="#L-504"><span class="linenos"> 504</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">,</span>
</span><span id="L-505"><a href="#L-505"><span class="linenos"> 505</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span>
</span><span id="L-506"><a href="#L-506"><span class="linenos"> 506</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span>
</span><span id="L-507"><a href="#L-507"><span class="linenos"> 507</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
</span><span id="L-508"><a href="#L-508"><span class="linenos"> 508</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
</span><span id="L-511"><a href="#L-511"><span class="linenos"> 511</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">,</span>
</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">,</span>
</span><span id="L-513"><a href="#L-513"><span class="linenos"> 513</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
</span><span id="L-514"><a href="#L-514"><span class="linenos"> 514</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">KEEP</span><span class="p">,</span>
</span><span id="L-515"><a href="#L-515"><span class="linenos"> 515</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">KILL</span><span class="p">,</span>
</span><span id="L-516"><a href="#L-516"><span class="linenos"> 516</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
</span><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">,</span>
</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">,</span>
</span><span id="L-519"><a href="#L-519"><span class="linenos"> 519</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">,</span>
</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
</span><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">,</span>
</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">,</span>
</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERLAPS</span><span class="p">,</span>
</span><span id="L-526"><a href="#L-526"><span class="linenos"> 526</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">,</span>
</span><span id="L-527"><a href="#L-527"><span class="linenos"> 527</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span>
</span><span id="L-528"><a href="#L-528"><span class="linenos"> 528</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span>
</span><span id="L-529"><a href="#L-529"><span class="linenos"> 529</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span>
</span><span id="L-530"><a href="#L-530"><span class="linenos"> 530</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">,</span>
</span><span id="L-531"><a href="#L-531"><span class="linenos"> 531</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PUT</span><span class="p">,</span>
</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
</span><span id="L-533"><a href="#L-533"><span class="linenos"> 533</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RECURSIVE</span><span class="p">,</span>
</span><span id="L-534"><a href="#L-534"><span class="linenos"> 534</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">,</span>
</span><span id="L-535"><a href="#L-535"><span class="linenos"> 535</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFRESH</span><span class="p">,</span>
</span><span id="L-536"><a href="#L-536"><span class="linenos"> 536</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RENAME</span><span class="p">,</span>
</span><span id="L-537"><a href="#L-537"><span class="linenos"> 537</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
</span><span id="L-538"><a href="#L-538"><span class="linenos"> 538</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
</span><span id="L-539"><a href="#L-539"><span class="linenos"> 539</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">,</span>
</span><span id="L-540"><a href="#L-540"><span class="linenos"> 540</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
</span><span id="L-541"><a href="#L-541"><span class="linenos"> 541</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span>
</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
</span><span id="L-543"><a href="#L-543"><span class="linenos"> 543</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
</span><span id="L-545"><a href="#L-545"><span class="linenos"> 545</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">,</span>
</span><span id="L-549"><a href="#L-549"><span class="linenos"> 549</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUNCATE</span><span class="p">,</span>
</span><span id="L-550"><a href="#L-550"><span class="linenos"> 550</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">,</span>
</span><span id="L-552"><a href="#L-552"><span class="linenos"> 552</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">,</span>
</span><span id="L-554"><a href="#L-554"><span class="linenos"> 554</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</span><span class="p">,</span>
</span><span id="L-555"><a href="#L-555"><span class="linenos"> 555</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VOLATILE</span><span class="p">,</span>
</span><span id="L-556"><a href="#L-556"><span class="linenos"> 556</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a> <span class="o">*</span><span class="n">CREATABLES</span><span class="p">,</span>
</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
</span><span id="L-560"><a href="#L-560"><span class="linenos"> 560</span></a> <span class="o">*</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">,</span>
</span><span id="L-561"><a href="#L-561"><span class="linenos"> 561</span></a> <span class="p">}</span>
</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a> <span class="n">ID_VAR_TOKENS</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">)</span>
</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a>
</span><span id="L-564"><a href="#L-564"><span class="linenos"> 564</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
</span><span id="L-565"><a href="#L-565"><span class="linenos"> 565</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
</span><span id="L-567"><a href="#L-567"><span class="linenos"> 567</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
</span><span id="L-568"><a href="#L-568"><span class="linenos"> 568</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
</span><span id="L-569"><a href="#L-569"><span class="linenos"> 569</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">,</span>
</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
</span><span id="L-572"><a href="#L-572"><span class="linenos"> 572</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a> <span class="p">}</span>
</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</span></a>
</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</span></a> <span class="n">ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span>
</span><span id="L-578"><a href="#L-578"><span class="linenos"> 578</span></a>
</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</span></a> <span class="n">ARRAY_CONSTRUCTORS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-580"><a href="#L-580"><span class="linenos"> 580</span></a> <span class="s2">&quot;ARRAY&quot;</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-581"><a href="#L-581"><span class="linenos"> 581</span></a> <span class="s2">&quot;LIST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">List</span><span class="p">,</span>
</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a> <span class="p">}</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 class="n">COMMENT_TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">}</span>
</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a>
</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a> <span class="n">UPDATE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">}</span>
</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a>
</span><span id="L-588"><a href="#L-588"><span class="linenos"> 588</span></a> <span class="n">TRIM_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;LEADING&quot;</span><span class="p">,</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">,</span> <span class="s2">&quot;BOTH&quot;</span><span class="p">}</span>
</span><span id="L-589"><a href="#L-589"><span class="linenos"> 589</span></a>
</span><span id="L-590"><a href="#L-590"><span class="linenos"> 590</span></a> <span class="n">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-591"><a href="#L-591"><span class="linenos"> 591</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">,</span>
</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
</span><span id="L-593"><a href="#L-593"><span class="linenos"> 593</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATE</span><span class="p">,</span>
</span><span id="L-594"><a href="#L-594"><span class="linenos"> 594</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">,</span>
</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_SCHEMA</span><span class="p">,</span>
</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
</span><span id="L-597"><a href="#L-597"><span class="linenos"> 597</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIME</span><span class="p">,</span>
</span><span id="L-598"><a href="#L-598"><span class="linenos"> 598</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">,</span>
</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span>
</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span>
</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
</span><span id="L-602"><a href="#L-602"><span class="linenos"> 602</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</span><span class="p">,</span>
</span><span id="L-603"><a href="#L-603"><span class="linenos"> 603</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
</span><span id="L-604"><a href="#L-604"><span class="linenos"> 604</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
</span><span id="L-605"><a href="#L-605"><span class="linenos"> 605</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">,</span>
</span><span id="L-606"><a href="#L-606"><span class="linenos"> 606</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">,</span>
</span><span id="L-608"><a href="#L-608"><span class="linenos"> 608</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
</span><span id="L-610"><a href="#L-610"><span class="linenos"> 610</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">,</span>
</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">,</span>
</span><span id="L-613"><a href="#L-613"><span class="linenos"> 613</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">,</span>
</span><span id="L-618"><a href="#L-618"><span class="linenos"> 618</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span>
</span><span id="L-619"><a href="#L-619"><span class="linenos"> 619</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
</span><span id="L-621"><a href="#L-621"><span class="linenos"> 621</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEQUENCE</span><span class="p">,</span>
</span><span id="L-622"><a href="#L-622"><span class="linenos"> 622</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
</span><span id="L-623"><a href="#L-623"><span class="linenos"> 623</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
</span><span id="L-625"><a href="#L-625"><span class="linenos"> 625</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
</span><span id="L-627"><a href="#L-627"><span class="linenos"> 627</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUNCATE</span><span class="p">,</span>
</span><span id="L-628"><a href="#L-628"><span class="linenos"> 628</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">,</span>
</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
</span><span id="L-632"><a href="#L-632"><span class="linenos"> 632</span></a> <span class="p">}</span>
</span><span id="L-633"><a href="#L-633"><span class="linenos"> 633</span></a>
</span><span id="L-634"><a href="#L-634"><span class="linenos"> 634</span></a> <span class="n">CONJUNCTION</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="n">TokenType</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-635"><a href="#L-635"><span class="linenos"> 635</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">,</span>
</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</span></a> <span class="p">}</span>
</span><span id="L-637"><a href="#L-637"><span class="linenos"> 637</span></a>
</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</span></a> <span class="n">ASSIGNMENT</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="n">TokenType</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-639"><a href="#L-639"><span class="linenos"> 639</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON_EQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</span><span class="p">,</span>
</span><span id="L-640"><a href="#L-640"><span class="linenos"> 640</span></a> <span class="p">}</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 class="n">DISJUNCTION</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="n">TokenType</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-643"><a href="#L-643"><span class="linenos"> 643</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">,</span>
</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</span></a> <span class="p">}</span>
</span><span id="L-645"><a href="#L-645"><span class="linenos"> 645</span></a>
</span><span id="L-646"><a href="#L-646"><span class="linenos"> 646</span></a> <span class="n">EQUALITY</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-647"><a href="#L-647"><span class="linenos"> 647</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLSAFE_EQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span><span class="p">,</span>
</span><span id="L-650"><a href="#L-650"><span class="linenos"> 650</span></a> <span class="p">}</span>
</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="n">COMPARISON</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span>
</span><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</span><span class="p">,</span>
</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span>
</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</span><span class="p">,</span>
</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a> <span class="p">}</span>
</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</span></a>
</span><span id="L-659"><a href="#L-659"><span class="linenos"> 659</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AMP</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseAnd</span><span class="p">,</span>
</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CARET</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">,</span>
</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIPE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseOr</span><span class="p">,</span>
</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a> <span class="p">}</span>
</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="n">TERM</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">,</span>
</span><span id="L-667"><a href="#L-667"><span class="linenos"> 667</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span>
</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mod</span><span class="p">,</span>
</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Collate</span><span class="p">,</span>
</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</span></a> <span class="p">}</span>
</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</span></a>
</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-673"><a href="#L-673"><span class="linenos"> 673</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DIV</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">,</span>
</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LR_ARROW</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distance</span><span class="p">,</span>
</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">,</span>
</span><span id="L-676"><a href="#L-676"><span class="linenos"> 676</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">,</span>
</span><span id="L-677"><a href="#L-677"><span class="linenos"> 677</span></a> <span class="p">}</span>
</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a>
</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a> <span class="n">EXPONENT</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="n">TokenType</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</span></a>
</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a> <span class="n">TIMES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a> <span class="p">}</span>
</span><span id="L-685"><a href="#L-685"><span class="linenos"> 685</span></a>
</span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</span></a> <span class="n">TIMESTAMPS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-687"><a href="#L-687"><span class="linenos"> 687</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
</span><span id="L-688"><a href="#L-688"><span class="linenos"> 688</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPNTZ</span><span class="p">,</span>
</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a> <span class="o">*</span><span class="n">TIMES</span><span class="p">,</span>
</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</span></a> <span class="p">}</span>
</span><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a>
</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</span></a> <span class="n">SET_OPERATIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">,</span>
</span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERSECT</span><span class="p">,</span>
</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a> <span class="p">}</span>
</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</span></a>
</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a> <span class="n">JOIN_METHODS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">POSITIONAL</span><span class="p">,</span>
</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</span></a> <span class="p">}</span>
</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a>
</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a> <span class="n">JOIN_SIDES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
</span><span id="L-708"><a href="#L-708"><span class="linenos"> 708</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><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 class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span>
</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INNER</span><span class="p">,</span>
</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRAIGHT_JOIN</span><span class="p">,</span>
</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a> <span class="p">}</span>
</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="n">JOIN_HINTS</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-722"><a href="#L-722"><span class="linenos"> 722</span></a>
</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a> <span class="n">LAMBDAS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">,</span>
</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_replace_lambda</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">_parse_assignment</span><span class="p">(),</span>
</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a> <span class="n">expressions</span><span class="p">,</span>
</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a> <span class="p">),</span>
</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a> <span class="p">),</span>
</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">,</span>
</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a> <span class="n">this</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">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span>
</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a> <span class="p">),</span>
</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a> <span class="p">}</span>
</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a>
</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-740"><a href="#L-740"><span class="linenos"> 740</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOTCOLON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONCast</span><span class="p">,</span>
</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a> <span class="p">),</span>
</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a> <span class="p">),</span>
</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">to_json_path</span><span class="p">(</span><span class="n">path</span><span class="p">),</span>
</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a> <span class="n">only_json_types</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_ARROWS_REQUIRE_JSON_TYPE</span><span class="p">,</span>
</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a> <span class="p">),</span>
</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span>
</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">to_json_path</span><span class="p">(</span><span class="n">path</span><span class="p">),</span>
</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a> <span class="n">only_json_types</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_ARROWS_REQUIRE_JSON_TYPE</span><span class="p">,</span>
</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a> <span class="p">),</span>
</span><span id="L-763"><a href="#L-763"><span class="linenos"> 763</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH_ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">,</span>
</span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a> <span class="p">),</span>
</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DHASH_ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">,</span>
</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a> <span class="p">),</span>
</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBContains</span><span class="p">,</span>
</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a> <span class="p">),</span>
</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a> <span class="p">}</span>
</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a>
</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a> <span class="n">EXPRESSION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">),</span>
</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Condition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span>
</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">(),</span>
</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">(),</span>
</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_having</span><span class="p">(),</span>
</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint_body</span><span class="p">(),</span>
</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span>
</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(),</span>
</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(),</span>
</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">(),</span>
</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(),</span>
</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_offset</span><span class="p">(),</span>
</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(),</span>
</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(),</span>
</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">(),</span>
</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_qualify</span><span class="p">(),</span>
</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(),</span>
</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Sort</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Sort</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">),</span>
</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(),</span>
</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Whens</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_when_matched</span><span class="p">(),</span>
</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_named_window</span><span class="p">(),</span>
</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_with</span><span class="p">(),</span>
</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a> <span class="s2">&quot;JOIN_TYPE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">(),</span>
</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a> <span class="p">}</span>
</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="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALTER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter</span><span class="p">(),</span>
</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANALYZE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze</span><span class="p">(),</span>
</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_transaction</span><span class="p">(),</span>
</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cache</span><span class="p">(),</span>
</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_comment</span><span class="p">(),</span>
</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMIT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_commit_or_rollback</span><span class="p">(),</span>
</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COPY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_copy</span><span class="p">(),</span>
</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_create</span><span class="p">(),</span>
</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_delete</span><span class="p">(),</span>
</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_describe</span><span class="p">(),</span>
</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_describe</span><span class="p">(),</span>
</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">(),</span>
</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GRANT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_grant</span><span class="p">(),</span>
</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_insert</span><span class="p">(),</span>
</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">KILL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_kill</span><span class="p">(),</span>
</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_load</span><span class="p">(),</span>
</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_merge</span><span class="p">(),</span>
</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</span><span class="p">(),</span>
</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pragma</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()),</span>
</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFRESH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_refresh</span><span class="p">(),</span>
</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_commit_or_rollback</span><span class="p">(),</span>
</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set</span><span class="p">(),</span>
</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUNCATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_truncate_table</span><span class="p">(),</span>
</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNCACHE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_uncache</span><span class="p">(),</span>
</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</span><span class="p">(</span><span class="n">is_unpivot</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_update</span><span class="p">(),</span>
</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_use</span><span class="p">(),</span>
</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Semicolon</span><span class="p">(),</span>
</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a> <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="n">UNARY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">(),</span> <span class="c1"># Unary + is handled as a no-op</span>
</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">()),</span>
</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">BitwiseNot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">()),</span>
</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Neg</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">()),</span>
</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIPE_SLASH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Sqrt</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">()),</span>
</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE_SLASH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cbrt</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">()),</span>
</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a> <span class="p">}</span>
</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a>
</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a> <span class="n">STRING_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RawString</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a> <span class="p">),</span>
</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATIONAL_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">National</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a> <span class="p">),</span>
</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RawString</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">),</span>
</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">True</span>
</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a> <span class="p">),</span>
</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNICODE_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnicodeString</span><span class="p">,</span>
</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a> <span class="n">escape</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UESCAPE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a> <span class="p">),</span>
</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a> <span class="p">}</span>
</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="n">NUMERIC_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">BitString</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">),</span>
</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ByteString</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">),</span>
</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HexString</span><span class="p">,</span>
</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a> <span class="n">is_integer</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_STRING_IS_INTEGER_TYPE</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a> <span class="p">),</span>
</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">False</span>
</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a> <span class="p">),</span>
</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a> <span class="p">}</span>
</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a>
</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a> <span class="n">PRIMARY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a> <span class="o">**</span><span class="n">STRING_PARSERS</span><span class="p">,</span>
</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a> <span class="o">**</span><span class="n">NUMERIC_PARSERS</span><span class="p">,</span>
</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_introducer</span><span class="p">(</span><span class="n">token</span><span class="p">),</span>
</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">),</span>
</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SESSION_PARAMETER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_session_parameter</span><span class="p">(),</span>
</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star_ops</span><span class="p">(),</span>
</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a> <span class="p">}</span>
</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a>
</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a> <span class="n">PLACEHOLDER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">),</span>
</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_parameter</span><span class="p">(),</span>
</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">)</span>
</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a> <span class="p">),</span>
</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a> <span class="p">}</span>
</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a>
</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContainsAll</span><span class="p">),</span>
</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_between</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Glob</span><span class="p">),</span>
</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">),</span>
</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RegexpILike</span><span class="p">),</span>
</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_is</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Like</span><span class="p">),</span>
</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContainsAll</span><span class="p">,</span> <span class="n">reverse_args</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERLAPS</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Overlaps</span><span class="p">),</span>
</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">),</span>
</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMILAR_TO</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SimilarTo</span><span class="p">),</span>
</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_comprehension</span><span class="p">(</span><span class="n">this</span><span class="p">),</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="n">PROPERTY_PARSERS</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">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a> <span class="s2">&quot;ALLOWED_VALUES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AllowedValuesProperty</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">)</span>
</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a> <span class="p">),</span>
</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a> <span class="s2">&quot;ALGORITHM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlgorithmProperty</span><span class="p">),</span>
</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a> <span class="s2">&quot;AUTO&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_auto_property</span><span class="p">(),</span>
</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a> <span class="s2">&quot;AUTO_INCREMENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">),</span>
</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a> <span class="s2">&quot;BACKUP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BackupProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a> <span class="p">),</span>
</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a> <span class="s2">&quot;BLOCKCOMPRESSION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_blockcompression</span><span class="p">(),</span>
</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_character_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_character_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a> <span class="s2">&quot;CHECKSUM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_checksum</span><span class="p">(),</span>
</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a> <span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cluster</span><span class="p">(),</span>
</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a> <span class="s2">&quot;CLUSTERED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_clustered_by</span><span class="p">(),</span>
</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a> <span class="s2">&quot;COLLATE&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span>
</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a> <span class="p">),</span>
</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a> <span class="s2">&quot;COMMENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">),</span>
</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a> <span class="s2">&quot;CONTAINS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_contains_property</span><span class="p">(),</span>
</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a> <span class="s2">&quot;COPY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_copy_property</span><span class="p">(),</span>
</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a> <span class="s2">&quot;DATABLOCKSIZE&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_datablocksize</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a> <span class="s2">&quot;DATA_DELETION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_data_deletion_property</span><span class="p">(),</span>
</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a> <span class="s2">&quot;DEFINER&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_definer</span><span class="p">(),</span>
</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a> <span class="s2">&quot;DETERMINISTIC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;IMMUTABLE&quot;</span><span class="p">)</span>
</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a> <span class="p">),</span>
</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a> <span class="s2">&quot;DISTRIBUTED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_distributed_property</span><span class="p">(),</span>
</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a> <span class="s2">&quot;DUPLICATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_composite_key_property</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DuplicateKeyProperty</span><span class="p">),</span>
</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a> <span class="s2">&quot;DYNAMIC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DynamicProperty</span><span class="p">),</span>
</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a> <span class="s2">&quot;DISTKEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_distkey</span><span class="p">(),</span>
</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a> <span class="s2">&quot;DISTSTYLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">),</span>
</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a> <span class="s2">&quot;EMPTY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EmptyProperty</span><span class="p">),</span>
</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">),</span>
</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a> <span class="s2">&quot;EXECUTE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">),</span>
</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a> <span class="s2">&quot;EXTERNAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">),</span>
</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a> <span class="s2">&quot;FALLBACK&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_fallback</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">),</span>
</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a> <span class="s2">&quot;FREESPACE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_freespace</span><span class="p">(),</span>
</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GlobalProperty</span><span class="p">),</span>
</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a> <span class="s2">&quot;HEAP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">HeapProperty</span><span class="p">),</span>
</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a> <span class="s2">&quot;ICEBERG&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">IcebergProperty</span><span class="p">),</span>
</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a> <span class="s2">&quot;IMMUTABLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;IMMUTABLE&quot;</span><span class="p">)</span>
</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a> <span class="p">),</span>
</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a> <span class="s2">&quot;INHERITS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InheritsProperty</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">)</span>
</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a> <span class="p">),</span>
</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a> <span class="s2">&quot;INPUT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">InputModelProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()),</span>
</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a> <span class="s2">&quot;JOURNAL&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_journal</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">),</span>
</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a> <span class="s2">&quot;LAYOUT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_property</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;LAYOUT&quot;</span><span class="p">),</span>
</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a> <span class="s2">&quot;LIFETIME&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_range</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;LIFETIME&quot;</span><span class="p">),</span>
</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a> <span class="s2">&quot;LIKE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_create_like</span><span class="p">(),</span>
</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a> <span class="s2">&quot;LOCATION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">),</span>
</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locking</span><span class="p">(),</span>
</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a> <span class="s2">&quot;LOCKING&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locking</span><span class="p">(),</span>
</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a> <span class="s2">&quot;LOG&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_log</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a> <span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MaterializedProperty</span><span class="p">),</span>
</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a> <span class="s2">&quot;MERGEBLOCKRATIO&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_mergeblockratio</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a> <span class="s2">&quot;MODIFIES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_modifies_property</span><span class="p">(),</span>
</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a> <span class="s2">&quot;MULTISET&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">,</span> <span class="n">multi</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a> <span class="s2">&quot;NO&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_no_property</span><span class="p">(),</span>
</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a> <span class="s2">&quot;ON&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_property</span><span class="p">(),</span>
</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a> <span class="s2">&quot;ORDER BY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">skip_order_token</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a> <span class="s2">&quot;OUTPUT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OutputModelProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()),</span>
</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a> <span class="s2">&quot;PARTITION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partitioned_of</span><span class="p">(),</span>
</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a> <span class="s2">&quot;PARTITION BY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partitioned_by</span><span class="p">(),</span>
</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a> <span class="s2">&quot;PARTITIONED BY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partitioned_by</span><span class="p">(),</span>
</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a> <span class="s2">&quot;PARTITIONED_BY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partitioned_by</span><span class="p">(),</span>
</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span><span class="n">in_props</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a> <span class="s2">&quot;RANGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_range</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;RANGE&quot;</span><span class="p">),</span>
</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a> <span class="s2">&quot;READS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_reads_property</span><span class="p">(),</span>
</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a> <span class="s2">&quot;REMOTE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_remote_with_connection</span><span class="p">(),</span>
</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a> <span class="s2">&quot;RETURNS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">(),</span>
</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a> <span class="s2">&quot;STRICT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrictProperty</span><span class="p">),</span>
</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a> <span class="s2">&quot;STREAMING&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StreamingTableProperty</span><span class="p">),</span>
</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a> <span class="s2">&quot;ROW&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_row</span><span class="p">(),</span>
</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a> <span class="s2">&quot;ROW_FORMAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">),</span>
</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SampleProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a> <span class="p">),</span>
</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a> <span class="s2">&quot;SECURE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SecureProperty</span><span class="p">),</span>
</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a> <span class="s2">&quot;SECURITY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_security</span><span class="p">(),</span>
</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a> <span class="s2">&quot;SET&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">,</span> <span class="n">multi</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_settings_property</span><span class="p">(),</span>
</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a> <span class="s2">&quot;SHARING&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SharingProperty</span><span class="p">),</span>
</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sortkey</span><span class="p">(),</span>
</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a> <span class="s2">&quot;SOURCE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_property</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;SOURCE&quot;</span><span class="p">),</span>
</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a> <span class="s2">&quot;STABLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;STABLE&quot;</span><span class="p">)</span>
</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a> <span class="p">),</span>
</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a> <span class="s2">&quot;STORED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_stored</span><span class="p">(),</span>
</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a> <span class="s2">&quot;SYSTEM_VERSIONING&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_system_versioning_property</span><span class="p">(),</span>
</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a> <span class="s2">&quot;TBLPROPERTIES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_properties</span><span class="p">(),</span>
</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">),</span>
</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a> <span class="s2">&quot;TEMPORARY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">),</span>
</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a> <span class="s2">&quot;TO&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_to_table</span><span class="p">(),</span>
</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a> <span class="s2">&quot;TRANSIENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">),</span>
</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a> <span class="s2">&quot;TRANSFORM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransformModelProperty</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a> <span class="p">),</span>
</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a> <span class="s2">&quot;TTL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ttl</span><span class="p">(),</span>
</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a> <span class="s2">&quot;USING&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">),</span>
</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a> <span class="s2">&quot;UNLOGGED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">UnloggedProperty</span><span class="p">),</span>
</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a> <span class="s2">&quot;VOLATILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_volatile_property</span><span class="p">(),</span>
</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a> <span class="s2">&quot;WITH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_with_property</span><span class="p">(),</span>
</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a> <span class="p">}</span>
</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a>
</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_auto_increment</span><span class="p">(),</span>
</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a> <span class="s2">&quot;AUTO_INCREMENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_auto_increment</span><span class="p">(),</span>
</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a> <span class="s2">&quot;CASESPECIFIC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">()</span>
</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a> <span class="p">),</span>
</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a> <span class="s2">&quot;CHECK&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CheckColumnConstraint</span><span class="p">,</span>
</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">),</span>
</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a> <span class="n">enforced</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENFORCED&quot;</span><span class="p">),</span>
</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a> <span class="p">),</span>
</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a> <span class="s2">&quot;COLLATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateColumnConstraint</span><span class="p">,</span>
</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a> <span class="p">),</span>
</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a> <span class="s2">&quot;COMMENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a> <span class="p">),</span>
</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a> <span class="s2">&quot;COMPRESS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_compress</span><span class="p">(),</span>
</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a> <span class="s2">&quot;CLUSTERED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">)</span>
</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a> <span class="p">),</span>
</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a> <span class="s2">&quot;NONCLUSTERED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NonClusteredColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">)</span>
</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a> <span class="p">),</span>
</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefaultColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a> <span class="p">),</span>
</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a> <span class="s2">&quot;ENCODE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EncodeColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()),</span>
</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a> <span class="s2">&quot;EPHEMERAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EphemeralColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a> <span class="p">),</span>
</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExcludeColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_params</span><span class="p">()</span>
</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a> <span class="p">),</span>
</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a> <span class="s2">&quot;FOREIGN KEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_foreign_key</span><span class="p">(),</span>
</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFormatColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">()</span>
</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a> <span class="p">),</span>
</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a> <span class="s2">&quot;GENERATED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_generated_as_identity</span><span class="p">(),</span>
</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a> <span class="s2">&quot;IDENTITY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_auto_increment</span><span class="p">(),</span>
</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a> <span class="s2">&quot;INLINE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_inline</span><span class="p">(),</span>
</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a> <span class="s2">&quot;LIKE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_create_like</span><span class="p">(),</span>
</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a> <span class="s2">&quot;NOT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_not_constraint</span><span class="p">(),</span>
</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a> <span class="s2">&quot;NULL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">,</span> <span class="n">allow_null</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a> <span class="s2">&quot;ON&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">)</span>
</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnUpdateColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a> <span class="p">)</span>
</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a> <span class="s2">&quot;PATH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PathColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()),</span>
</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a> <span class="s2">&quot;PERIOD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_period_for_system_time</span><span class="p">(),</span>
</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(),</span>
</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a> <span class="s2">&quot;REFERENCES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_references</span><span class="p">(</span><span class="n">match</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</span></a> <span class="s2">&quot;TITLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TitleColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">()</span>
</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a> <span class="p">),</span>
</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a> <span class="s2">&quot;TTL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()]),</span>
</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</span></a> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unique</span><span class="p">(),</span>
</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a> <span class="s2">&quot;UPPERCASE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">UppercaseColumnConstraint</span><span class="p">),</span>
</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a> <span class="s2">&quot;WATERMARK&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WatermarkColumnConstraint</span><span class="p">,</span>
</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_disjunction</span><span class="p">(),</span>
</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a> <span class="p">),</span>
</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</span></a> <span class="s2">&quot;WITH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1098"><a href="#L-1098"><span class="linenos">1098</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_properties</span><span class="p">()</span>
</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a> <span class="p">),</span>
</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a> <span class="p">}</span>
</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a>
</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a> <span class="n">ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a> <span class="s2">&quot;ADD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_table_add</span><span class="p">(),</span>
</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a> <span class="s2">&quot;AS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(),</span>
</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a> <span class="s2">&quot;ALTER&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_table_alter</span><span class="p">(),</span>
</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a> <span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cluster</span><span class="p">(</span><span class="n">wrapped</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</span></a> <span class="s2">&quot;DELETE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">()),</span>
</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a> <span class="s2">&quot;DROP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_table_drop</span><span class="p">(),</span>
</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a> <span class="s2">&quot;RENAME&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_table_rename</span><span class="p">(),</span>
</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a> <span class="s2">&quot;SET&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_table_set</span><span class="p">(),</span>
</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a> <span class="s2">&quot;SWAP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SwapTable</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</span></a> <span class="p">),</span>
</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a> <span class="p">}</span>
</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a>
</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a> <span class="n">ALTER_ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a> <span class="s2">&quot;DISTKEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_diststyle</span><span class="p">(),</span>
</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a> <span class="s2">&quot;DISTSTYLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_diststyle</span><span class="p">(),</span>
</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_sortkey</span><span class="p">(),</span>
</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a> <span class="s2">&quot;COMPOUND&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_sortkey</span><span class="p">(</span><span class="n">compound</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a> <span class="p">}</span>
</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a>
</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a> <span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a> <span class="s2">&quot;CHECK&quot;</span><span class="p">,</span>
</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">,</span>
</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a> <span class="s2">&quot;FOREIGN KEY&quot;</span><span class="p">,</span>
</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a> <span class="s2">&quot;LIKE&quot;</span><span class="p">,</span>
</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a> <span class="s2">&quot;PERIOD&quot;</span><span class="p">,</span>
</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">,</span>
</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">,</span>
</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a> <span class="s2">&quot;WATERMARK&quot;</span><span class="p">,</span>
</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a> <span class="p">}</span>
</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a>
</span><span id="L-1134"><a href="#L-1134"><span class="linenos">1134</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1135"><a href="#L-1135"><span class="linenos">1135</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()),</span>
</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</span></a> <span class="s2">&quot;CASE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_case</span><span class="p">(),</span>
</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a> <span class="s2">&quot;CONNECT_BY_ROOT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ConnectByRoot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a> <span class="p">),</span>
</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_if</span><span class="p">(),</span>
</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</span></a> <span class="p">}</span>
</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a>
</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a> <span class="n">INVALID_FUNC_NAME_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1144"><a href="#L-1144"><span class="linenos">1144</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span>
</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a> <span class="p">}</span>
</span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a>
</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;STRUCT&quot;</span><span class="p">}</span>
</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</span></a>
</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</span></a> <span class="n">KEY_VALUE_DEFINITIONS</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">)</span>
</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a>
</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a> <span class="s2">&quot;CAST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cast</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span><span class="p">),</span>
</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a> <span class="s2">&quot;CEIL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ceil_floor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Ceil</span><span class="p">),</span>
</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a> <span class="s2">&quot;CONVERT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span><span class="p">),</span>
</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a> <span class="s2">&quot;DECODE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_decode</span><span class="p">(),</span>
</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a> <span class="s2">&quot;EXTRACT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_extract</span><span class="p">(),</span>
</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a> <span class="s2">&quot;FLOOR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ceil_floor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Floor</span><span class="p">),</span>
</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a> <span class="s2">&quot;GAP_FILL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_gap_fill</span><span class="p">(),</span>
</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_object</span><span class="p">(),</span>
</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a> <span class="s2">&quot;JSON_OBJECTAGG&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_object</span><span class="p">(</span><span class="n">agg</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-1162"><a href="#L-1162"><span class="linenos">1162</span></a> <span class="s2">&quot;JSON_TABLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_table</span><span class="p">(),</span>
</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_match_against</span><span class="p">(),</span>
</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a> <span class="s2">&quot;NORMALIZE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_normalize</span><span class="p">(),</span>
</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a> <span class="s2">&quot;OPENJSON&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_open_json</span><span class="p">(),</span>
</span><span id="L-1166"><a href="#L-1166"><span class="linenos">1166</span></a> <span class="s2">&quot;OVERLAY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_overlay</span><span class="p">(),</span>
</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a> <span class="s2">&quot;POSITION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(),</span>
</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</span></a> <span class="s2">&quot;PREDICT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_predict</span><span class="p">(),</span>
</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a> <span class="s2">&quot;SAFE_CAST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cast</span><span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-1170"><a href="#L-1170"><span class="linenos">1170</span></a> <span class="s2">&quot;STRING_AGG&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_agg</span><span class="p">(),</span>
</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a> <span class="s2">&quot;SUBSTRING&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_substring</span><span class="p">(),</span>
</span><span id="L-1172"><a href="#L-1172"><span class="linenos">1172</span></a> <span class="s2">&quot;TRIM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_trim</span><span class="p">(),</span>
</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</span></a> <span class="s2">&quot;TRY_CAST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cast</span><span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a> <span class="s2">&quot;TRY_CONVERT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_convert</span><span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a> <span class="s2">&quot;XMLELEMENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">XMLElement</span><span class="p">,</span>
</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NAME&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span>
</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">),</span>
</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</span></a> <span class="p">),</span>
</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_xml_table</span><span class="p">(),</span>
</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</span></a> <span class="p">}</span>
</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a>
</span><span id="L-1183"><a href="#L-1183"><span class="linenos">1183</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;match&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_match_recognize</span><span class="p">()),</span>
</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PREWHERE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;prewhere&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_prewhere</span><span class="p">()),</span>
</span><span id="L-1186"><a href="#L-1186"><span class="linenos">1186</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;where&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">()),</span>
</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;group&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()),</span>
</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;having&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_having</span><span class="p">()),</span>
</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;qualify&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_qualify</span><span class="p">()),</span>
</span><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_clause</span><span class="p">()),</span>
</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;order&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()),</span>
</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;limit&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">()),</span>
</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;limit&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">()),</span>
</span><span id="L-1194"><a href="#L-1194"><span class="linenos">1194</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_offset</span><span class="p">()),</span>
</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locks</span><span class="p">()),</span>
</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locks</span><span class="p">()),</span>
</span><span id="L-1197"><a href="#L-1197"><span class="linenos">1197</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sample&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">(</span><span class="n">as_modifier</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
</span><span id="L-1198"><a href="#L-1198"><span class="linenos">1198</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sample&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">(</span><span class="n">as_modifier</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a> <span class="s2">&quot;cluster&quot;</span><span class="p">,</span>
</span><span id="L-1201"><a href="#L-1201"><span class="linenos">1201</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">),</span>
</span><span id="L-1202"><a href="#L-1202"><span class="linenos">1202</span></a> <span class="p">),</span>
</span><span id="L-1203"><a href="#L-1203"><span class="linenos">1203</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</span></a> <span class="s2">&quot;distribute&quot;</span><span class="p">,</span>
</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distribute</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">),</span>
</span><span id="L-1206"><a href="#L-1206"><span class="linenos">1206</span></a> <span class="p">),</span>
</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sort&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Sort</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">)),</span>
</span><span id="L-1208"><a href="#L-1208"><span class="linenos">1208</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;connect&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_connect</span><span class="p">(</span><span class="n">skip_start_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
</span><span id="L-1209"><a href="#L-1209"><span class="linenos">1209</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;connect&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_connect</span><span class="p">()),</span>
</span><span id="L-1210"><a href="#L-1210"><span class="linenos">1210</span></a> <span class="p">}</span>
</span><span id="L-1211"><a href="#L-1211"><span class="linenos">1211</span></a>
</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;GLOBAL&quot;</span><span class="p">),</span>
</span><span id="L-1214"><a href="#L-1214"><span class="linenos">1214</span></a> <span class="s2">&quot;LOCAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">),</span>
</span><span id="L-1215"><a href="#L-1215"><span class="linenos">1215</span></a> <span class="s2">&quot;SESSION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;SESSION&quot;</span><span class="p">),</span>
</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_transaction</span><span class="p">(),</span>
</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</span></a> <span class="p">}</span>
</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</span></a>
</span><span id="L-1219"><a href="#L-1219"><span class="linenos">1219</span></a> <span class="n">SHOW_PARSERS</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">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-1220"><a href="#L-1220"><span class="linenos">1220</span></a>
</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a> <span class="n">TYPE_LITERAL_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a> <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">JSON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</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-1223"><a href="#L-1223"><span class="linenos">1223</span></a> <span class="p">}</span>
</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a>
</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a> <span class="n">TYPE_CONVERTERS</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="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</span></a>
</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</span></a> <span class="n">DDL_SELECT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">}</span>
</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a>
</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</span></a> <span class="n">PRE_VOLATILE_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">}</span>
</span><span id="L-1230"><a href="#L-1230"><span class="linenos">1230</span></a>
</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a> <span class="n">TRANSACTION_KIND</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;DEFERRED&quot;</span><span class="p">,</span> <span class="s2">&quot;IMMEDIATE&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUSIVE&quot;</span><span class="p">}</span>
</span><span id="L-1232"><a href="#L-1232"><span class="linenos">1232</span></a> <span class="n">TRANSACTION_CHARACTERISTICS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a> <span class="s2">&quot;ISOLATION&quot;</span><span class="p">:</span> <span class="p">(</span>
</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a> <span class="p">(</span><span class="s2">&quot;LEVEL&quot;</span><span class="p">,</span> <span class="s2">&quot;REPEATABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;READ&quot;</span><span class="p">),</span>
</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</span></a> <span class="p">(</span><span class="s2">&quot;LEVEL&quot;</span><span class="p">,</span> <span class="s2">&quot;READ&quot;</span><span class="p">,</span> <span class="s2">&quot;COMMITTED&quot;</span><span class="p">),</span>
</span><span id="L-1236"><a href="#L-1236"><span class="linenos">1236</span></a> <span class="p">(</span><span class="s2">&quot;LEVEL&quot;</span><span class="p">,</span> <span class="s2">&quot;READ&quot;</span><span class="p">,</span> <span class="s2">&quot;UNCOMITTED&quot;</span><span class="p">),</span>
</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</span></a> <span class="p">(</span><span class="s2">&quot;LEVEL&quot;</span><span class="p">,</span> <span class="s2">&quot;SERIALIZABLE&quot;</span><span class="p">),</span>
</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</span></a> <span class="p">),</span>
</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a> <span class="s2">&quot;READ&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;WRITE&quot;</span><span class="p">,</span> <span class="s2">&quot;ONLY&quot;</span><span class="p">),</span>
</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a> <span class="p">}</span>
</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a>
</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a> <span class="n">CONFLICT_ACTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">(</span>
</span><span id="L-1243"><a href="#L-1243"><span class="linenos">1243</span></a> <span class="p">(</span><span class="s2">&quot;ABORT&quot;</span><span class="p">,</span> <span class="s2">&quot;FAIL&quot;</span><span class="p">,</span> <span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLACE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROLLBACK&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">),</span> <span class="nb">tuple</span><span class="p">()</span>
</span><span id="L-1244"><a href="#L-1244"><span class="linenos">1244</span></a> <span class="p">)</span>
</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a> <span class="n">CONFLICT_ACTIONS</span><span class="p">[</span><span class="s2">&quot;DO&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;NOTHING&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">)</span>
</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</span></a>
</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</span></a> <span class="n">CREATE_SEQUENCE</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</span></a> <span class="s2">&quot;SCALE&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;EXTEND&quot;</span><span class="p">,</span> <span class="s2">&quot;NOEXTEND&quot;</span><span class="p">),</span>
</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a> <span class="s2">&quot;SHARD&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;EXTEND&quot;</span><span class="p">,</span> <span class="s2">&quot;NOEXTEND&quot;</span><span class="p">),</span>
</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a> <span class="s2">&quot;NO&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;CYCLE&quot;</span><span class="p">,</span> <span class="s2">&quot;CACHE&quot;</span><span class="p">,</span> <span class="s2">&quot;MAXVALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;MINVALUE&quot;</span><span class="p">),</span>
</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</span></a> <span class="o">**</span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">(</span>
</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</span></a> <span class="p">(</span>
</span><span id="L-1253"><a href="#L-1253"><span class="linenos">1253</span></a> <span class="s2">&quot;SESSION&quot;</span><span class="p">,</span>
</span><span id="L-1254"><a href="#L-1254"><span class="linenos">1254</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">,</span>
</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</span></a> <span class="s2">&quot;KEEP&quot;</span><span class="p">,</span>
</span><span id="L-1256"><a href="#L-1256"><span class="linenos">1256</span></a> <span class="s2">&quot;NOKEEP&quot;</span><span class="p">,</span>
</span><span id="L-1257"><a href="#L-1257"><span class="linenos">1257</span></a> <span class="s2">&quot;ORDER&quot;</span><span class="p">,</span>
</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</span></a> <span class="s2">&quot;NOORDER&quot;</span><span class="p">,</span>
</span><span id="L-1259"><a href="#L-1259"><span class="linenos">1259</span></a> <span class="s2">&quot;NOCACHE&quot;</span><span class="p">,</span>
</span><span id="L-1260"><a href="#L-1260"><span class="linenos">1260</span></a> <span class="s2">&quot;CYCLE&quot;</span><span class="p">,</span>
</span><span id="L-1261"><a href="#L-1261"><span class="linenos">1261</span></a> <span class="s2">&quot;NOCYCLE&quot;</span><span class="p">,</span>
</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a> <span class="s2">&quot;NOMINVALUE&quot;</span><span class="p">,</span>
</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</span></a> <span class="s2">&quot;NOMAXVALUE&quot;</span><span class="p">,</span>
</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a> <span class="s2">&quot;NOSCALE&quot;</span><span class="p">,</span>
</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a> <span class="s2">&quot;NOSHARD&quot;</span><span class="p">,</span>
</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</span></a> <span class="p">),</span>
</span><span id="L-1267"><a href="#L-1267"><span class="linenos">1267</span></a> <span class="nb">tuple</span><span class="p">(),</span>
</span><span id="L-1268"><a href="#L-1268"><span class="linenos">1268</span></a> <span class="p">),</span>
</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a> <span class="p">}</span>
</span><span id="L-1270"><a href="#L-1270"><span class="linenos">1270</span></a>
</span><span id="L-1271"><a href="#L-1271"><span class="linenos">1271</span></a> <span class="n">ISOLATED_LOADING_OPTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;FOR&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;INSERT&quot;</span><span class="p">,</span> <span class="s2">&quot;NONE&quot;</span><span class="p">)}</span>
</span><span id="L-1272"><a href="#L-1272"><span class="linenos">1272</span></a>
</span><span id="L-1273"><a href="#L-1273"><span class="linenos">1273</span></a> <span class="n">USABLES</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">(</span>
</span><span id="L-1274"><a href="#L-1274"><span class="linenos">1274</span></a> <span class="p">(</span><span class="s2">&quot;ROLE&quot;</span><span class="p">,</span> <span class="s2">&quot;WAREHOUSE&quot;</span><span class="p">,</span> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">,</span> <span class="s2">&quot;CATALOG&quot;</span><span class="p">),</span> <span class="nb">tuple</span><span class="p">()</span>
</span><span id="L-1275"><a href="#L-1275"><span class="linenos">1275</span></a> <span class="p">)</span>
</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a>
</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a> <span class="n">CAST_ACTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">((</span><span class="s2">&quot;RENAME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;FIELDS&quot;</span><span class="p">,))</span>
</span><span id="L-1278"><a href="#L-1278"><span class="linenos">1278</span></a>
</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a> <span class="n">SCHEMA_BINDING_OPTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a> <span class="s2">&quot;TYPE&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;EVOLUTION&quot;</span><span class="p">,),</span>
</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</span></a> <span class="o">**</span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">((</span><span class="s2">&quot;BINDING&quot;</span><span class="p">,</span> <span class="s2">&quot;COMPENSATION&quot;</span><span class="p">,</span> <span class="s2">&quot;EVOLUTION&quot;</span><span class="p">),</span> <span class="nb">tuple</span><span class="p">()),</span>
</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a> <span class="p">}</span>
</span><span id="L-1283"><a href="#L-1283"><span class="linenos">1283</span></a>
</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</span></a> <span class="n">PROCEDURE_OPTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-1285"><a href="#L-1285"><span class="linenos">1285</span></a>
</span><span id="L-1286"><a href="#L-1286"><span class="linenos">1286</span></a> <span class="n">EXECUTE_AS_OPTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">((</span><span class="s2">&quot;CALLER&quot;</span><span class="p">,</span> <span class="s2">&quot;SELF&quot;</span><span class="p">,</span> <span class="s2">&quot;OWNER&quot;</span><span class="p">),</span> <span class="nb">tuple</span><span class="p">())</span>
</span><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</span></a>
</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</span></a> <span class="n">KEY_CONSTRAINT_OPTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1289"><a href="#L-1289"><span class="linenos">1289</span></a> <span class="s2">&quot;NOT&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;ENFORCED&quot;</span><span class="p">,),</span>
</span><span id="L-1290"><a href="#L-1290"><span class="linenos">1290</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="p">(</span>
</span><span id="L-1291"><a href="#L-1291"><span class="linenos">1291</span></a> <span class="s2">&quot;FULL&quot;</span><span class="p">,</span>
</span><span id="L-1292"><a href="#L-1292"><span class="linenos">1292</span></a> <span class="s2">&quot;PARTIAL&quot;</span><span class="p">,</span>
</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a> <span class="s2">&quot;SIMPLE&quot;</span><span class="p">,</span>
</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a> <span class="p">),</span>
</span><span id="L-1295"><a href="#L-1295"><span class="linenos">1295</span></a> <span class="s2">&quot;INITIALLY&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;DEFERRED&quot;</span><span class="p">,</span> <span class="s2">&quot;IMMEDIATE&quot;</span><span class="p">),</span>
</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</span></a> <span class="s2">&quot;USING&quot;</span><span class="p">:</span> <span class="p">(</span>
</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a> <span class="s2">&quot;BTREE&quot;</span><span class="p">,</span>
</span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a> <span class="s2">&quot;HASH&quot;</span><span class="p">,</span>
</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</span></a> <span class="p">),</span>
</span><span id="L-1300"><a href="#L-1300"><span class="linenos">1300</span></a> <span class="o">**</span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">((</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;NORELY&quot;</span><span class="p">),</span> <span class="nb">tuple</span><span class="p">()),</span>
</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a> <span class="p">}</span>
</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a>
</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</span></a> <span class="n">INSERT_ALTERNATIVES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ABORT&quot;</span><span class="p">,</span> <span class="s2">&quot;FAIL&quot;</span><span class="p">,</span> <span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLACE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROLLBACK&quot;</span><span class="p">}</span>
</span><span id="L-1304"><a href="#L-1304"><span class="linenos">1304</span></a>
</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</span></a> <span class="n">CLONE_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;CLONE&quot;</span><span class="p">,</span> <span class="s2">&quot;COPY&quot;</span><span class="p">}</span>
</span><span id="L-1306"><a href="#L-1306"><span class="linenos">1306</span></a> <span class="n">HISTORICAL_DATA_PREFIX</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;BEFORE&quot;</span><span class="p">,</span> <span class="s2">&quot;END&quot;</span><span class="p">}</span>
</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a> <span class="n">HISTORICAL_DATA_KIND</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;OFFSET&quot;</span><span class="p">,</span> <span class="s2">&quot;STATEMENT&quot;</span><span class="p">,</span> <span class="s2">&quot;STREAM&quot;</span><span class="p">}</span>
</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</span></a>
</span><span id="L-1309"><a href="#L-1309"><span class="linenos">1309</span></a> <span class="n">OPCLASS_FOLLOW_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ASC&quot;</span><span class="p">,</span> <span class="s2">&quot;DESC&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;WITH&quot;</span><span class="p">}</span>
</span><span id="L-1310"><a href="#L-1310"><span class="linenos">1310</span></a>
</span><span id="L-1311"><a href="#L-1311"><span class="linenos">1311</span></a> <span class="n">OPTYPE_FOLLOW_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">}</span>
</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a>
</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</span></a> <span class="n">TABLE_INDEX_HINT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORCE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</span><span class="p">}</span>
</span><span id="L-1314"><a href="#L-1314"><span class="linenos">1314</span></a>
</span><span id="L-1315"><a href="#L-1315"><span class="linenos">1315</span></a> <span class="n">VIEW_ATTRIBUTES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ENCRYPTION&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMABINDING&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW_METADATA&quot;</span><span class="p">}</span>
</span><span id="L-1316"><a href="#L-1316"><span class="linenos">1316</span></a>
</span><span id="L-1317"><a href="#L-1317"><span class="linenos">1317</span></a> <span class="n">WINDOW_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">}</span>
</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a> <span class="n">WINDOW_BEFORE_PAREN_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OVER</span><span class="p">}</span>
</span><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</span></a> <span class="n">WINDOW_SIDES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;FOLLOWING&quot;</span><span class="p">,</span> <span class="s2">&quot;PRECEDING&quot;</span><span class="p">}</span>
</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a>
</span><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</span></a> <span class="n">JSON_KEY_VALUE_SEPARATOR_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">}</span>
</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</span></a>
</span><span id="L-1323"><a href="#L-1323"><span class="linenos">1323</span></a> <span class="n">FETCH_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">}</span>
</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a>
</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a> <span class="n">ADD_CONSTRAINT_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1326"><a href="#L-1326"><span class="linenos">1326</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">,</span>
</span><span id="L-1327"><a href="#L-1327"><span class="linenos">1327</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">,</span>
</span><span id="L-1328"><a href="#L-1328"><span class="linenos">1328</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
</span><span id="L-1329"><a href="#L-1329"><span class="linenos">1329</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">KEY</span><span class="p">,</span>
</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">,</span>
</span><span id="L-1331"><a href="#L-1331"><span class="linenos">1331</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</span></a> <span class="p">}</span>
</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</span></a>
</span><span id="L-1334"><a href="#L-1334"><span class="linenos">1334</span></a> <span class="n">DISTINCT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">}</span>
</span><span id="L-1335"><a href="#L-1335"><span class="linenos">1335</span></a>
</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</span></a> <span class="n">NULL_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">}</span>
</span><span id="L-1337"><a href="#L-1337"><span class="linenos">1337</span></a>
</span><span id="L-1338"><a href="#L-1338"><span class="linenos">1338</span></a> <span class="n">UNNEST_OFFSET_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="n">SET_OPERATIONS</span>
</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a>
</span><span id="L-1340"><a href="#L-1340"><span class="linenos">1340</span></a> <span class="n">SELECT_START_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">}</span>
</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</span></a>
</span><span id="L-1342"><a href="#L-1342"><span class="linenos">1342</span></a> <span class="n">COPY_INTO_VARLEN_OPTIONS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;FILE_FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;COPY_OPTIONS&quot;</span><span class="p">,</span> <span class="s2">&quot;FORMAT_OPTIONS&quot;</span><span class="p">,</span> <span class="s2">&quot;CREDENTIAL&quot;</span><span class="p">}</span>
</span><span id="L-1343"><a href="#L-1343"><span class="linenos">1343</span></a>
</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</span></a> <span class="n">IS_JSON_PREDICATE_KIND</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;SCALAR&quot;</span><span class="p">,</span> <span class="s2">&quot;ARRAY&quot;</span><span class="p">,</span> <span class="s2">&quot;OBJECT&quot;</span><span class="p">}</span>
</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</span></a>
</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a> <span class="n">ODBC_DATETIME_LITERALS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">,</span>
</span><span id="L-1348"><a href="#L-1348"><span class="linenos">1348</span></a> <span class="s2">&quot;t&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Time</span><span class="p">,</span>
</span><span id="L-1349"><a href="#L-1349"><span class="linenos">1349</span></a> <span class="s2">&quot;ts&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">,</span>
</span><span id="L-1350"><a href="#L-1350"><span class="linenos">1350</span></a> <span class="p">}</span>
</span><span id="L-1351"><a href="#L-1351"><span class="linenos">1351</span></a>
</span><span id="L-1352"><a href="#L-1352"><span class="linenos">1352</span></a> <span class="n">ON_CONDITION_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;TRUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FALSE&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">}</span>
</span><span id="L-1353"><a href="#L-1353"><span class="linenos">1353</span></a>
</span><span id="L-1354"><a href="#L-1354"><span class="linenos">1354</span></a> <span class="n">PRIVILEGE_FOLLOW_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">}</span>
</span><span id="L-1355"><a href="#L-1355"><span class="linenos">1355</span></a>
</span><span id="L-1356"><a href="#L-1356"><span class="linenos">1356</span></a> <span class="c1"># The style options for the DESCRIBE statement</span>
</span><span id="L-1357"><a href="#L-1357"><span class="linenos">1357</span></a> <span class="n">DESCRIBE_STYLES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ANALYZE&quot;</span><span class="p">,</span> <span class="s2">&quot;EXTENDED&quot;</span><span class="p">,</span> <span class="s2">&quot;FORMATTED&quot;</span><span class="p">,</span> <span class="s2">&quot;HISTORY&quot;</span><span class="p">}</span>
</span><span id="L-1358"><a href="#L-1358"><span class="linenos">1358</span></a>
</span><span id="L-1359"><a href="#L-1359"><span class="linenos">1359</span></a> <span class="c1"># The style options for the ANALYZE statement</span>
</span><span id="L-1360"><a href="#L-1360"><span class="linenos">1360</span></a> <span class="n">ANALYZE_STYLES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1361"><a href="#L-1361"><span class="linenos">1361</span></a> <span class="s2">&quot;BUFFER_USAGE_LIMIT&quot;</span><span class="p">,</span>
</span><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</span></a> <span class="s2">&quot;FULL&quot;</span><span class="p">,</span>
</span><span id="L-1363"><a href="#L-1363"><span class="linenos">1363</span></a> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span>
</span><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</span></a> <span class="s2">&quot;NO_WRITE_TO_BINLOG&quot;</span><span class="p">,</span>
</span><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</span></a> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">,</span>
</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</span></a> <span class="s2">&quot;SKIP_LOCKED&quot;</span><span class="p">,</span>
</span><span id="L-1367"><a href="#L-1367"><span class="linenos">1367</span></a> <span class="s2">&quot;VERBOSE&quot;</span><span class="p">,</span>
</span><span id="L-1368"><a href="#L-1368"><span class="linenos">1368</span></a> <span class="p">}</span>
</span><span id="L-1369"><a href="#L-1369"><span class="linenos">1369</span></a>
</span><span id="L-1370"><a href="#L-1370"><span class="linenos">1370</span></a> <span class="n">ANALYZE_EXPRESSION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-1371"><a href="#L-1371"><span class="linenos">1371</span></a> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_columns</span><span class="p">(),</span>
</span><span id="L-1372"><a href="#L-1372"><span class="linenos">1372</span></a> <span class="s2">&quot;COMPUTE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_statistics</span><span class="p">(),</span>
</span><span id="L-1373"><a href="#L-1373"><span class="linenos">1373</span></a> <span class="s2">&quot;DELETE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_delete</span><span class="p">(),</span>
</span><span id="L-1374"><a href="#L-1374"><span class="linenos">1374</span></a> <span class="s2">&quot;DROP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_histogram</span><span class="p">(),</span>
</span><span id="L-1375"><a href="#L-1375"><span class="linenos">1375</span></a> <span class="s2">&quot;ESTIMATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_statistics</span><span class="p">(),</span>
</span><span id="L-1376"><a href="#L-1376"><span class="linenos">1376</span></a> <span class="s2">&quot;LIST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_list</span><span class="p">(),</span>
</span><span id="L-1377"><a href="#L-1377"><span class="linenos">1377</span></a> <span class="s2">&quot;PREDICATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_columns</span><span class="p">(),</span>
</span><span id="L-1378"><a href="#L-1378"><span class="linenos">1378</span></a> <span class="s2">&quot;UPDATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_histogram</span><span class="p">(),</span>
</span><span id="L-1379"><a href="#L-1379"><span class="linenos">1379</span></a> <span class="s2">&quot;VALIDATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_validate</span><span class="p">(),</span>
</span><span id="L-1380"><a href="#L-1380"><span class="linenos">1380</span></a> <span class="p">}</span>
</span><span id="L-1381"><a href="#L-1381"><span class="linenos">1381</span></a>
</span><span id="L-1382"><a href="#L-1382"><span class="linenos">1382</span></a> <span class="n">PARTITION_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;PARTITION&quot;</span><span class="p">,</span> <span class="s2">&quot;SUBPARTITION&quot;</span><span class="p">}</span>
</span><span id="L-1383"><a href="#L-1383"><span class="linenos">1383</span></a>
</span><span id="L-1384"><a href="#L-1384"><span class="linenos">1384</span></a> <span class="n">AMBIGUOUS_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">)</span>
</span><span id="L-1385"><a href="#L-1385"><span class="linenos">1385</span></a>
</span><span id="L-1386"><a href="#L-1386"><span class="linenos">1386</span></a> <span class="n">OPERATION_MODIFIERS</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-1387"><a href="#L-1387"><span class="linenos">1387</span></a>
</span><span id="L-1388"><a href="#L-1388"><span class="linenos">1388</span></a> <span class="n">RECURSIVE_CTE_SEARCH_KIND</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;BREADTH&quot;</span><span class="p">,</span> <span class="s2">&quot;DEPTH&quot;</span><span class="p">,</span> <span class="s2">&quot;CYCLE&quot;</span><span class="p">}</span>
</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</span></a>
</span><span id="L-1390"><a href="#L-1390"><span class="linenos">1390</span></a> <span class="n">MODIFIABLES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableFromRows</span><span class="p">)</span>
</span><span id="L-1391"><a href="#L-1391"><span class="linenos">1391</span></a>
</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a>
</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-1395"><a href="#L-1395"><span class="linenos">1395</span></a> <span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-1396"><a href="#L-1396"><span class="linenos">1396</span></a>
</span><span id="L-1397"><a href="#L-1397"><span class="linenos">1397</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</span></a>
</span><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</span></a> <span class="c1"># Whether ADD is present for each column added by ALTER TABLE</span>
</span><span id="L-1400"><a href="#L-1400"><span class="linenos">1400</span></a> <span class="n">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-1401"><a href="#L-1401"><span class="linenos">1401</span></a>
</span><span id="L-1402"><a href="#L-1402"><span class="linenos">1402</span></a> <span class="c1"># Whether the table sample clause expects CSV syntax</span>
</span><span id="L-1403"><a href="#L-1403"><span class="linenos">1403</span></a> <span class="n">TABLESAMPLE_CSV</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</span></a>
</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</span></a> <span class="c1"># The default method used for table sampling</span>
</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a> <span class="n">DEFAULT_SAMPLING_METHOD</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-1407"><a href="#L-1407"><span class="linenos">1407</span></a>
</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</span></a> <span class="c1"># Whether the SET command needs a delimiter (e.g. &quot;=&quot;) for assignments</span>
</span><span id="L-1409"><a href="#L-1409"><span class="linenos">1409</span></a> <span class="n">SET_REQUIRES_ASSIGNMENT_DELIMITER</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-1410"><a href="#L-1410"><span class="linenos">1410</span></a>
</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a> <span class="c1"># Whether the TRIM function expects the characters to trim as its first argument</span>
</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</span></a> <span class="n">TRIM_PATTERN_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-1413"><a href="#L-1413"><span class="linenos">1413</span></a>
</span><span id="L-1414"><a href="#L-1414"><span class="linenos">1414</span></a> <span class="c1"># Whether string aliases are supported `SELECT COUNT(*) &#39;count&#39;`</span>
</span><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</span></a> <span class="n">STRING_ALIASES</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-1416"><a href="#L-1416"><span class="linenos">1416</span></a>
</span><span id="L-1417"><a href="#L-1417"><span class="linenos">1417</span></a> <span class="c1"># Whether query modifiers such as LIMIT are attached to the UNION node (vs its right operand)</span>
</span><span id="L-1418"><a href="#L-1418"><span class="linenos">1418</span></a> <span class="n">MODIFIERS_ATTACHED_TO_SET_OP</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-1419"><a href="#L-1419"><span class="linenos">1419</span></a> <span class="n">SET_OP_MODIFIERS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;order&quot;</span><span class="p">,</span> <span class="s2">&quot;limit&quot;</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">}</span>
</span><span id="L-1420"><a href="#L-1420"><span class="linenos">1420</span></a>
</span><span id="L-1421"><a href="#L-1421"><span class="linenos">1421</span></a> <span class="c1"># Whether to parse IF statements that aren&#39;t followed by a left parenthesis as commands</span>
</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</span></a> <span class="n">NO_PAREN_IF_COMMANDS</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-1423"><a href="#L-1423"><span class="linenos">1423</span></a>
</span><span id="L-1424"><a href="#L-1424"><span class="linenos">1424</span></a> <span class="c1"># Whether the -&gt; and -&gt;&gt; operators expect documents of type JSON (e.g. Postgres)</span>
</span><span id="L-1425"><a href="#L-1425"><span class="linenos">1425</span></a> <span class="n">JSON_ARROWS_REQUIRE_JSON_TYPE</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-1426"><a href="#L-1426"><span class="linenos">1426</span></a>
</span><span id="L-1427"><a href="#L-1427"><span class="linenos">1427</span></a> <span class="c1"># Whether the `:` operator is used to extract a value from a VARIANT column</span>
</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</span></a> <span class="n">COLON_IS_VARIANT_EXTRACT</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</span></a>
</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</span></a> <span class="c1"># Whether or not a VALUES keyword needs to be followed by &#39;(&#39; to form a VALUES clause.</span>
</span><span id="L-1431"><a href="#L-1431"><span class="linenos">1431</span></a> <span class="c1"># If this is True and &#39;(&#39; is not found, the keyword will be treated as an identifier</span>
</span><span id="L-1432"><a href="#L-1432"><span class="linenos">1432</span></a> <span class="n">VALUES_FOLLOWED_BY_PAREN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-1433"><a href="#L-1433"><span class="linenos">1433</span></a>
</span><span id="L-1434"><a href="#L-1434"><span class="linenos">1434</span></a> <span class="c1"># Whether implicit unnesting is supported, e.g. SELECT 1 FROM y.z AS z, z.a (Redshift)</span>
</span><span id="L-1435"><a href="#L-1435"><span class="linenos">1435</span></a> <span class="n">SUPPORTS_IMPLICIT_UNNEST</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-1436"><a href="#L-1436"><span class="linenos">1436</span></a>
</span><span id="L-1437"><a href="#L-1437"><span class="linenos">1437</span></a> <span class="c1"># Whether or not interval spans are supported, INTERVAL 1 YEAR TO MONTHS</span>
</span><span id="L-1438"><a href="#L-1438"><span class="linenos">1438</span></a> <span class="n">INTERVAL_SPANS</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-1439"><a href="#L-1439"><span class="linenos">1439</span></a>
</span><span id="L-1440"><a href="#L-1440"><span class="linenos">1440</span></a> <span class="c1"># Whether a PARTITION clause can follow a table reference</span>
</span><span id="L-1441"><a href="#L-1441"><span class="linenos">1441</span></a> <span class="n">SUPPORTS_PARTITION_SELECTION</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-1442"><a href="#L-1442"><span class="linenos">1442</span></a>
</span><span id="L-1443"><a href="#L-1443"><span class="linenos">1443</span></a> <span class="c1"># Whether the `name AS expr` schema/column constraint requires parentheses around `expr`</span>
</span><span id="L-1444"><a href="#L-1444"><span class="linenos">1444</span></a> <span class="n">WRAPPED_TRANSFORM_COLUMN_CONSTRAINT</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-1445"><a href="#L-1445"><span class="linenos">1445</span></a>
</span><span id="L-1446"><a href="#L-1446"><span class="linenos">1446</span></a> <span class="c1"># Whether the &#39;AS&#39; keyword is optional in the CTE definition syntax</span>
</span><span id="L-1447"><a href="#L-1447"><span class="linenos">1447</span></a> <span class="n">OPTIONAL_ALIAS_TOKEN_CTE</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-1448"><a href="#L-1448"><span class="linenos">1448</span></a>
</span><span id="L-1449"><a href="#L-1449"><span class="linenos">1449</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-1450"><a href="#L-1450"><span class="linenos">1450</span></a> <span class="s2">&quot;error_level&quot;</span><span class="p">,</span>
</span><span id="L-1451"><a href="#L-1451"><span class="linenos">1451</span></a> <span class="s2">&quot;error_message_context&quot;</span><span class="p">,</span>
</span><span id="L-1452"><a href="#L-1452"><span class="linenos">1452</span></a> <span class="s2">&quot;max_errors&quot;</span><span class="p">,</span>
</span><span id="L-1453"><a href="#L-1453"><span class="linenos">1453</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">,</span>
</span><span id="L-1454"><a href="#L-1454"><span class="linenos">1454</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
</span><span id="L-1455"><a href="#L-1455"><span class="linenos">1455</span></a> <span class="s2">&quot;errors&quot;</span><span class="p">,</span>
</span><span id="L-1456"><a href="#L-1456"><span class="linenos">1456</span></a> <span class="s2">&quot;_tokens&quot;</span><span class="p">,</span>
</span><span id="L-1457"><a href="#L-1457"><span class="linenos">1457</span></a> <span class="s2">&quot;_index&quot;</span><span class="p">,</span>
</span><span id="L-1458"><a href="#L-1458"><span class="linenos">1458</span></a> <span class="s2">&quot;_curr&quot;</span><span class="p">,</span>
</span><span id="L-1459"><a href="#L-1459"><span class="linenos">1459</span></a> <span class="s2">&quot;_next&quot;</span><span class="p">,</span>
</span><span id="L-1460"><a href="#L-1460"><span class="linenos">1460</span></a> <span class="s2">&quot;_prev&quot;</span><span class="p">,</span>
</span><span id="L-1461"><a href="#L-1461"><span class="linenos">1461</span></a> <span class="s2">&quot;_prev_comments&quot;</span><span class="p">,</span>
</span><span id="L-1462"><a href="#L-1462"><span class="linenos">1462</span></a> <span class="p">)</span>
</span><span id="L-1463"><a href="#L-1463"><span class="linenos">1463</span></a>
</span><span id="L-1464"><a href="#L-1464"><span class="linenos">1464</span></a> <span class="c1"># Autofilled</span>
</span><span id="L-1465"><a href="#L-1465"><span class="linenos">1465</span></a> <span class="n">SHOW_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-1466"><a href="#L-1466"><span class="linenos">1466</span></a> <span class="n">SET_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-1467"><a href="#L-1467"><span class="linenos">1467</span></a>
</span><span id="L-1468"><a href="#L-1468"><span class="linenos">1468</span></a> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span>
</span><span id="L-1469"><a href="#L-1469"><span class="linenos">1469</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-1470"><a href="#L-1470"><span class="linenos">1470</span></a> <span class="n">error_level</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">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-1471"><a href="#L-1471"><span class="linenos">1471</span></a> <span class="n">error_message_context</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">100</span><span class="p">,</span>
</span><span id="L-1472"><a href="#L-1472"><span class="linenos">1472</span></a> <span class="n">max_errors</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
</span><span id="L-1473"><a href="#L-1473"><span class="linenos">1473</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-1474"><a href="#L-1474"><span class="linenos">1474</span></a> <span class="p">):</span>
</span><span id="L-1475"><a href="#L-1475"><span class="linenos">1475</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects</span><span class="w"> </span><span class="kn">import</span> <span class="n">Dialect</span>
</span><span id="L-1476"><a href="#L-1476"><span class="linenos">1476</span></a>
</span><span id="L-1477"><a href="#L-1477"><span class="linenos">1477</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">=</span> <span class="n">error_level</span> <span class="ow">or</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span>
</span><span id="L-1478"><a href="#L-1478"><span class="linenos">1478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span> <span class="o">=</span> <span class="n">error_message_context</span>
</span><span id="L-1479"><a href="#L-1479"><span class="linenos">1479</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span> <span class="o">=</span> <span class="n">max_errors</span>
</span><span id="L-1480"><a href="#L-1480"><span class="linenos">1480</span></a> <span class="bp">self</span><span class="o">.</span><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-1481"><a href="#L-1481"><span class="linenos">1481</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
</span><span id="L-1482"><a href="#L-1482"><span class="linenos">1482</span></a>
</span><span id="L-1483"><a href="#L-1483"><span class="linenos">1483</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="L-1484"><a href="#L-1484"><span class="linenos">1484</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-1485"><a href="#L-1485"><span class="linenos">1485</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-1486"><a href="#L-1486"><span class="linenos">1486</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-1487"><a href="#L-1487"><span class="linenos">1487</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="L-1488"><a href="#L-1488"><span class="linenos">1488</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1489"><a href="#L-1489"><span class="linenos">1489</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1490"><a href="#L-1490"><span class="linenos">1490</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1491"><a href="#L-1491"><span class="linenos">1491</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1492"><a href="#L-1492"><span class="linenos">1492</span></a>
</span><span id="L-1493"><a href="#L-1493"><span class="linenos">1493</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">parse</span><span class="p">(</span>
</span><span id="L-1494"><a href="#L-1494"><span class="linenos">1494</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">raw_tokens</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">Token</span><span class="p">],</span> <span class="n">sql</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-1495"><a href="#L-1495"><span class="linenos">1495</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-1496"><a href="#L-1496"><span class="linenos">1496</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1497"><a href="#L-1497"><span class="linenos">1497</span></a><span class="sd"> Parses a list of tokens and returns a list of syntax trees, one tree</span>
</span><span id="L-1498"><a href="#L-1498"><span class="linenos">1498</span></a><span class="sd"> per parsed SQL statement.</span>
</span><span id="L-1499"><a href="#L-1499"><span class="linenos">1499</span></a>
</span><span id="L-1500"><a href="#L-1500"><span class="linenos">1500</span></a><span class="sd"> Args:</span>
</span><span id="L-1501"><a href="#L-1501"><span class="linenos">1501</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
</span><span id="L-1502"><a href="#L-1502"><span class="linenos">1502</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</span>
</span><span id="L-1503"><a href="#L-1503"><span class="linenos">1503</span></a>
</span><span id="L-1504"><a href="#L-1504"><span class="linenos">1504</span></a><span class="sd"> Returns:</span>
</span><span id="L-1505"><a href="#L-1505"><span class="linenos">1505</span></a><span class="sd"> The list of the produced syntax trees.</span>
</span><span id="L-1506"><a href="#L-1506"><span class="linenos">1506</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1507"><a href="#L-1507"><span class="linenos">1507</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span>
</span><span id="L-1508"><a href="#L-1508"><span class="linenos">1508</span></a> <span class="n">parse_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="o">=</span><span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="o">=</span><span class="n">sql</span>
</span><span id="L-1509"><a href="#L-1509"><span class="linenos">1509</span></a> <span class="p">)</span>
</span><span id="L-1510"><a href="#L-1510"><span class="linenos">1510</span></a>
</span><span id="L-1511"><a href="#L-1511"><span class="linenos">1511</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">parse_into</span><span class="p">(</span>
</span><span id="L-1512"><a href="#L-1512"><span class="linenos">1512</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-1513"><a href="#L-1513"><span class="linenos">1513</span></a> <span class="n">expression_types</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span>
</span><span id="L-1514"><a href="#L-1514"><span class="linenos">1514</span></a> <span class="n">raw_tokens</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">Token</span><span class="p">],</span>
</span><span id="L-1515"><a href="#L-1515"><span class="linenos">1515</span></a> <span class="n">sql</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 class="p">,</span>
</span><span id="L-1516"><a href="#L-1516"><span class="linenos">1516</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-1517"><a href="#L-1517"><span class="linenos">1517</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1518"><a href="#L-1518"><span class="linenos">1518</span></a><span class="sd"> Parses a list of tokens into a given Expression type. If a collection of Expression</span>
</span><span id="L-1519"><a href="#L-1519"><span class="linenos">1519</span></a><span class="sd"> types is given instead, this method will try to parse the token list into each one</span>
</span><span id="L-1520"><a href="#L-1520"><span class="linenos">1520</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</span>
</span><span id="L-1521"><a href="#L-1521"><span class="linenos">1521</span></a>
</span><span id="L-1522"><a href="#L-1522"><span class="linenos">1522</span></a><span class="sd"> Args:</span>
</span><span id="L-1523"><a href="#L-1523"><span class="linenos">1523</span></a><span class="sd"> expression_types: The expression type(s) to try and parse the token list into.</span>
</span><span id="L-1524"><a href="#L-1524"><span class="linenos">1524</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
</span><span id="L-1525"><a href="#L-1525"><span class="linenos">1525</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</span>
</span><span id="L-1526"><a href="#L-1526"><span class="linenos">1526</span></a>
</span><span id="L-1527"><a href="#L-1527"><span class="linenos">1527</span></a><span class="sd"> Returns:</span>
</span><span id="L-1528"><a href="#L-1528"><span class="linenos">1528</span></a><span class="sd"> The target Expression.</span>
</span><span id="L-1529"><a href="#L-1529"><span class="linenos">1529</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1530"><a href="#L-1530"><span class="linenos">1530</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-1531"><a href="#L-1531"><span class="linenos">1531</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
</span><span id="L-1532"><a href="#L-1532"><span class="linenos">1532</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression_type</span><span class="p">)</span>
</span><span id="L-1533"><a href="#L-1533"><span class="linenos">1533</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">parser</span><span class="p">:</span>
</span><span id="L-1534"><a href="#L-1534"><span class="linenos">1534</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser registered for </span><span class="si">{</span><span class="n">expression_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-1535"><a href="#L-1535"><span class="linenos">1535</span></a>
</span><span id="L-1536"><a href="#L-1536"><span class="linenos">1536</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-1537"><a href="#L-1537"><span class="linenos">1537</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span><span class="n">parser</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
</span><span id="L-1538"><a href="#L-1538"><span class="linenos">1538</span></a> <span class="k">except</span> <span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="L-1539"><a href="#L-1539"><span class="linenos">1539</span></a> <span class="n">e</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;into_expression&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression_type</span>
</span><span id="L-1540"><a href="#L-1540"><span class="linenos">1540</span></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-1541"><a href="#L-1541"><span class="linenos">1541</span></a>
</span><span id="L-1542"><a href="#L-1542"><span class="linenos">1542</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
</span><span id="L-1543"><a href="#L-1543"><span class="linenos">1543</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse &#39;</span><span class="si">{</span><span class="n">sql</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">raw_tokens</span><span class="si">}</span><span class="s2">&#39; into </span><span class="si">{</span><span class="n">expression_types</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-1544"><a href="#L-1544"><span class="linenos">1544</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="n">errors</span><span class="p">),</span>
</span><span id="L-1545"><a href="#L-1545"><span class="linenos">1545</span></a> <span class="p">)</span> <span class="kn">from</span><span class="w"> </span><span class="nn">errors</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span><span id="L-1546"><a href="#L-1546"><span class="linenos">1546</span></a>
</span><span id="L-1547"><a href="#L-1547"><span class="linenos">1547</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse</span><span class="p">(</span>
</span><span id="L-1548"><a href="#L-1548"><span class="linenos">1548</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-1549"><a href="#L-1549"><span class="linenos">1549</span></a> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Parser</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-1550"><a href="#L-1550"><span class="linenos">1550</span></a> <span class="n">raw_tokens</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">Token</span><span class="p">],</span>
</span><span id="L-1551"><a href="#L-1551"><span class="linenos">1551</span></a> <span class="n">sql</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 class="p">,</span>
</span><span id="L-1552"><a href="#L-1552"><span class="linenos">1552</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-1553"><a href="#L-1553"><span class="linenos">1553</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
</span><span id="L-1554"><a href="#L-1554"><span class="linenos">1554</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-1555"><a href="#L-1555"><span class="linenos">1555</span></a>
</span><span id="L-1556"><a href="#L-1556"><span class="linenos">1556</span></a> <span class="n">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_tokens</span><span class="p">)</span>
</span><span id="L-1557"><a href="#L-1557"><span class="linenos">1557</span></a> <span class="n">chunks</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">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[[]]</span>
</span><span id="L-1558"><a href="#L-1558"><span class="linenos">1558</span></a>
</span><span id="L-1559"><a href="#L-1559"><span class="linenos">1559</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">token</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">raw_tokens</span><span class="p">):</span>
</span><span id="L-1560"><a href="#L-1560"><span class="linenos">1560</span></a> <span class="k">if</span> <span class="n">token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">:</span>
</span><span id="L-1561"><a href="#L-1561"><span class="linenos">1561</span></a> <span class="k">if</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
</span><span id="L-1562"><a href="#L-1562"><span class="linenos">1562</span></a> <span class="n">chunks</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">token</span><span class="p">])</span>
</span><span id="L-1563"><a href="#L-1563"><span class="linenos">1563</span></a>
</span><span id="L-1564"><a href="#L-1564"><span class="linenos">1564</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">total</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-1565"><a href="#L-1565"><span class="linenos">1565</span></a> <span class="n">chunks</span><span class="o">.</span><span class="n">append</span><span class="p">([])</span>
</span><span id="L-1566"><a href="#L-1566"><span class="linenos">1566</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1567"><a href="#L-1567"><span class="linenos">1567</span></a> <span class="n">chunks</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
</span><span id="L-1568"><a href="#L-1568"><span class="linenos">1568</span></a>
</span><span id="L-1569"><a href="#L-1569"><span class="linenos">1569</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-1570"><a href="#L-1570"><span class="linenos">1570</span></a>
</span><span id="L-1571"><a href="#L-1571"><span class="linenos">1571</span></a> <span class="k">for</span> <span class="n">tokens</span> <span class="ow">in</span> <span class="n">chunks</span><span class="p">:</span>
</span><span id="L-1572"><a href="#L-1572"><span class="linenos">1572</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
</span><span id="L-1573"><a href="#L-1573"><span class="linenos">1573</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="n">tokens</span>
</span><span id="L-1574"><a href="#L-1574"><span class="linenos">1574</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-1575"><a href="#L-1575"><span class="linenos">1575</span></a>
</span><span id="L-1576"><a href="#L-1576"><span class="linenos">1576</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_method</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
</span><span id="L-1577"><a href="#L-1577"><span class="linenos">1577</span></a>
</span><span id="L-1578"><a href="#L-1578"><span class="linenos">1578</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">):</span>
</span><span id="L-1579"><a href="#L-1579"><span class="linenos">1579</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Invalid expression / Unexpected token&quot;</span><span class="p">)</span>
</span><span id="L-1580"><a href="#L-1580"><span class="linenos">1580</span></a>
</span><span id="L-1581"><a href="#L-1581"><span class="linenos">1581</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_errors</span><span class="p">()</span>
</span><span id="L-1582"><a href="#L-1582"><span class="linenos">1582</span></a>
</span><span id="L-1583"><a href="#L-1583"><span class="linenos">1583</span></a> <span class="k">return</span> <span class="n">expressions</span>
</span><span id="L-1584"><a href="#L-1584"><span class="linenos">1584</span></a>
</span><span id="L-1585"><a href="#L-1585"><span class="linenos">1585</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">check_errors</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-1586"><a href="#L-1586"><span class="linenos">1586</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Logs or raises any found errors, depending on the chosen error level setting.&quot;&quot;&quot;</span>
</span><span id="L-1587"><a href="#L-1587"><span class="linenos">1587</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
</span><span id="L-1588"><a href="#L-1588"><span class="linenos">1588</span></a> <span class="k">for</span> <span class="n">error</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
</span><span id="L-1589"><a href="#L-1589"><span class="linenos">1589</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">error</span><span class="p">))</span>
</span><span id="L-1590"><a href="#L-1590"><span class="linenos">1590</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
</span><span id="L-1591"><a href="#L-1591"><span class="linenos">1591</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
</span><span id="L-1592"><a href="#L-1592"><span class="linenos">1592</span></a> <span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span><span class="p">),</span>
</span><span id="L-1593"><a href="#L-1593"><span class="linenos">1593</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">),</span>
</span><span id="L-1594"><a href="#L-1594"><span class="linenos">1594</span></a> <span class="p">)</span>
</span><span id="L-1595"><a href="#L-1595"><span class="linenos">1595</span></a>
</span><span id="L-1596"><a href="#L-1596"><span class="linenos">1596</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">raise_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">token</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">Token</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-1597"><a href="#L-1597"><span class="linenos">1597</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1598"><a href="#L-1598"><span class="linenos">1598</span></a><span class="sd"> Appends an error in the list of recorded errors or raises it, depending on the chosen</span>
</span><span id="L-1599"><a href="#L-1599"><span class="linenos">1599</span></a><span class="sd"> error level setting.</span>
</span><span id="L-1600"><a href="#L-1600"><span class="linenos">1600</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1601"><a href="#L-1601"><span class="linenos">1601</span></a> <span class="n">token</span> <span class="o">=</span> <span class="n">token</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="ow">or</span> <span class="n">Token</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="L-1602"><a href="#L-1602"><span class="linenos">1602</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">start</span>
</span><span id="L-1603"><a href="#L-1603"><span class="linenos">1603</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">end</span> <span class="o">+</span> <span class="mi">1</span>
</span><span id="L-1604"><a href="#L-1604"><span class="linenos">1604</span></a> <span class="n">start_context</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="nb">max</span><span class="p">(</span><span class="n">start</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="p">:</span> <span class="n">start</span><span class="p">]</span>
</span><span id="L-1605"><a href="#L-1605"><span class="linenos">1605</span></a> <span class="n">highlight</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">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span>
</span><span id="L-1606"><a href="#L-1606"><span class="linenos">1606</span></a> <span class="n">end_context</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">end</span> <span class="p">:</span> <span class="n">end</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">]</span>
</span><span id="L-1607"><a href="#L-1607"><span class="linenos">1607</span></a>
</span><span id="L-1608"><a href="#L-1608"><span class="linenos">1608</span></a> <span class="n">error</span> <span class="o">=</span> <span class="n">ParseError</span><span class="o">.</span><span class="n">new</span><span class="p">(</span>
</span><span id="L-1609"><a href="#L-1609"><span class="linenos">1609</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">. Line </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="si">}</span><span class="s2">, Col: </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span id="L-1610"><a href="#L-1610"><span class="linenos">1610</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">start_context</span><span class="si">}</span><span class="se">\033</span><span class="s2">[4m</span><span class="si">{</span><span class="n">highlight</span><span class="si">}</span><span class="se">\033</span><span class="s2">[0m</span><span class="si">{</span><span class="n">end_context</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-1611"><a href="#L-1611"><span class="linenos">1611</span></a> <span class="n">description</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
</span><span id="L-1612"><a href="#L-1612"><span class="linenos">1612</span></a> <span class="n">line</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="p">,</span>
</span><span id="L-1613"><a href="#L-1613"><span class="linenos">1613</span></a> <span class="n">col</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="p">,</span>
</span><span id="L-1614"><a href="#L-1614"><span class="linenos">1614</span></a> <span class="n">start_context</span><span class="o">=</span><span class="n">start_context</span><span class="p">,</span>
</span><span id="L-1615"><a href="#L-1615"><span class="linenos">1615</span></a> <span class="n">highlight</span><span class="o">=</span><span class="n">highlight</span><span class="p">,</span>
</span><span id="L-1616"><a href="#L-1616"><span class="linenos">1616</span></a> <span class="n">end_context</span><span class="o">=</span><span class="n">end_context</span><span class="p">,</span>
</span><span id="L-1617"><a href="#L-1617"><span class="linenos">1617</span></a> <span class="p">)</span>
</span><span id="L-1618"><a href="#L-1618"><span class="linenos">1618</span></a>
</span><span id="L-1619"><a href="#L-1619"><span class="linenos">1619</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
</span><span id="L-1620"><a href="#L-1620"><span class="linenos">1620</span></a> <span class="k">raise</span> <span class="n">error</span>
</span><span id="L-1621"><a href="#L-1621"><span class="linenos">1621</span></a>
</span><span id="L-1622"><a href="#L-1622"><span class="linenos">1622</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
</span><span id="L-1623"><a href="#L-1623"><span class="linenos">1623</span></a>
</span><span id="L-1624"><a href="#L-1624"><span class="linenos">1624</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">expression</span><span class="p">(</span>
</span><span id="L-1625"><a href="#L-1625"><span class="linenos">1625</span></a> <span class="bp">self</span><span class="p">,</span> <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">comments</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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
</span><span id="L-1626"><a href="#L-1626"><span class="linenos">1626</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="L-1627"><a href="#L-1627"><span class="linenos">1627</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1628"><a href="#L-1628"><span class="linenos">1628</span></a><span class="sd"> Creates a new, validated Expression.</span>
</span><span id="L-1629"><a href="#L-1629"><span class="linenos">1629</span></a>
</span><span id="L-1630"><a href="#L-1630"><span class="linenos">1630</span></a><span class="sd"> Args:</span>
</span><span id="L-1631"><a href="#L-1631"><span class="linenos">1631</span></a><span class="sd"> exp_class: The expression class to instantiate.</span>
</span><span id="L-1632"><a href="#L-1632"><span class="linenos">1632</span></a><span class="sd"> comments: An optional list of comments to attach to the expression.</span>
</span><span id="L-1633"><a href="#L-1633"><span class="linenos">1633</span></a><span class="sd"> kwargs: The arguments to set for the expression along with their respective values.</span>
</span><span id="L-1634"><a href="#L-1634"><span class="linenos">1634</span></a>
</span><span id="L-1635"><a href="#L-1635"><span class="linenos">1635</span></a><span class="sd"> Returns:</span>
</span><span id="L-1636"><a href="#L-1636"><span class="linenos">1636</span></a><span class="sd"> The target expression.</span>
</span><span id="L-1637"><a href="#L-1637"><span class="linenos">1637</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1638"><a href="#L-1638"><span class="linenos">1638</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">exp_class</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-1639"><a href="#L-1639"><span class="linenos">1639</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
</span><span id="L-1640"><a href="#L-1640"><span class="linenos">1640</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
</span><span id="L-1641"><a href="#L-1641"><span class="linenos">1641</span></a>
</span><span id="L-1642"><a href="#L-1642"><span class="linenos">1642</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_add_comments</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">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 class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-1643"><a href="#L-1643"><span class="linenos">1643</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
</span><span id="L-1644"><a href="#L-1644"><span class="linenos">1644</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">)</span>
</span><span id="L-1645"><a href="#L-1645"><span class="linenos">1645</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1646"><a href="#L-1646"><span class="linenos">1646</span></a>
</span><span id="L-1647"><a href="#L-1647"><span class="linenos">1647</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">validate_expression</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">args</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">List</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="L-1648"><a href="#L-1648"><span class="linenos">1648</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1649"><a href="#L-1649"><span class="linenos">1649</span></a><span class="sd"> Validates an Expression, making sure that all its mandatory arguments are set.</span>
</span><span id="L-1650"><a href="#L-1650"><span class="linenos">1650</span></a>
</span><span id="L-1651"><a href="#L-1651"><span class="linenos">1651</span></a><span class="sd"> Args:</span>
</span><span id="L-1652"><a href="#L-1652"><span class="linenos">1652</span></a><span class="sd"> expression: The expression to validate.</span>
</span><span id="L-1653"><a href="#L-1653"><span class="linenos">1653</span></a><span class="sd"> args: An optional list of items that was used to instantiate the expression, if it&#39;s a Func.</span>
</span><span id="L-1654"><a href="#L-1654"><span class="linenos">1654</span></a>
</span><span id="L-1655"><a href="#L-1655"><span class="linenos">1655</span></a><span class="sd"> Returns:</span>
</span><span id="L-1656"><a href="#L-1656"><span class="linenos">1656</span></a><span class="sd"> The validated expression.</span>
</span><span id="L-1657"><a href="#L-1657"><span class="linenos">1657</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1658"><a href="#L-1658"><span class="linenos">1658</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">!=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
</span><span id="L-1659"><a href="#L-1659"><span class="linenos">1659</span></a> <span class="k">for</span> <span class="n">error_message</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">error_messages</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
</span><span id="L-1660"><a href="#L-1660"><span class="linenos">1660</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="n">error_message</span><span class="p">)</span>
</span><span id="L-1661"><a href="#L-1661"><span class="linenos">1661</span></a>
</span><span id="L-1662"><a href="#L-1662"><span class="linenos">1662</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="L-1663"><a href="#L-1663"><span class="linenos">1663</span></a>
</span><span id="L-1664"><a href="#L-1664"><span class="linenos">1664</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_find_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">Token</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-1665"><a href="#L-1665"><span class="linenos">1665</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">start</span><span class="o">.</span><span class="n">start</span> <span class="p">:</span> <span class="n">end</span><span class="o">.</span><span class="n">end</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
</span><span id="L-1666"><a href="#L-1666"><span class="linenos">1666</span></a>
</span><span id="L-1667"><a href="#L-1667"><span class="linenos">1667</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_is_connected</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="L-1668"><a href="#L-1668"><span class="linenos">1668</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">end</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">start</span>
</span><span id="L-1669"><a href="#L-1669"><span class="linenos">1669</span></a>
</span><span id="L-1670"><a href="#L-1670"><span class="linenos">1670</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_advance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">times</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-1671"><a href="#L-1671"><span class="linenos">1671</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">+=</span> <span class="n">times</span>
</span><span id="L-1672"><a href="#L-1672"><span class="linenos">1672</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="p">)</span>
</span><span id="L-1673"><a href="#L-1673"><span class="linenos">1673</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-1674"><a href="#L-1674"><span class="linenos">1674</span></a>
</span><span id="L-1675"><a href="#L-1675"><span class="linenos">1675</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-1676"><a href="#L-1676"><span class="linenos">1676</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
</span><span id="L-1677"><a href="#L-1677"><span class="linenos">1677</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">comments</span>
</span><span id="L-1678"><a href="#L-1678"><span class="linenos">1678</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1679"><a href="#L-1679"><span class="linenos">1679</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1680"><a href="#L-1680"><span class="linenos">1680</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1681"><a href="#L-1681"><span class="linenos">1681</span></a>
</span><span id="L-1682"><a href="#L-1682"><span class="linenos">1682</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-1683"><a href="#L-1683"><span class="linenos">1683</span></a> <span class="k">if</span> <span class="n">index</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="p">:</span>
</span><span id="L-1684"><a href="#L-1684"><span class="linenos">1684</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="p">)</span>
</span><span id="L-1685"><a href="#L-1685"><span class="linenos">1685</span></a>
</span><span id="L-1686"><a href="#L-1686"><span class="linenos">1686</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_warn_unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-1687"><a href="#L-1687"><span class="linenos">1687</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-1688"><a href="#L-1688"><span class="linenos">1688</span></a> <span class="k">return</span>
</span><span id="L-1689"><a href="#L-1689"><span class="linenos">1689</span></a>
</span><span id="L-1690"><a href="#L-1690"><span class="linenos">1690</span></a> <span class="c1"># We use _find_sql because self.sql may comprise multiple chunks, and we&#39;re only</span>
</span><span id="L-1691"><a href="#L-1691"><span class="linenos">1691</span></a> <span class="c1"># interested in emitting a warning for the one being currently processed.</span>
</span><span id="L-1692"><a href="#L-1692"><span class="linenos">1692</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])[:</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">]</span>
</span><span id="L-1693"><a href="#L-1693"><span class="linenos">1693</span></a>
</span><span id="L-1694"><a href="#L-1694"><span class="linenos">1694</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
</span><span id="L-1695"><a href="#L-1695"><span class="linenos">1695</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39; contains unsupported syntax. Falling back to parsing as a &#39;Command&#39;.&quot;</span>
</span><span id="L-1696"><a href="#L-1696"><span class="linenos">1696</span></a> <span class="p">)</span>
</span><span id="L-1697"><a href="#L-1697"><span class="linenos">1697</span></a>
</span><span id="L-1698"><a href="#L-1698"><span class="linenos">1698</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_command</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="L-1699"><a href="#L-1699"><span class="linenos">1699</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_warn_unsupported</span><span class="p">()</span>
</span><span id="L-1700"><a href="#L-1700"><span class="linenos">1700</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1701"><a href="#L-1701"><span class="linenos">1701</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">,</span>
</span><span id="L-1702"><a href="#L-1702"><span class="linenos">1702</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
</span><span id="L-1703"><a href="#L-1703"><span class="linenos">1703</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span>
</span><span id="L-1704"><a href="#L-1704"><span class="linenos">1704</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="L-1705"><a href="#L-1705"><span class="linenos">1705</span></a> <span class="p">)</span>
</span><span id="L-1706"><a href="#L-1706"><span class="linenos">1706</span></a>
</span><span id="L-1707"><a href="#L-1707"><span class="linenos">1707</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_try_parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[],</span> <span class="n">T</span><span class="p">],</span> <span class="n">retreat</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">Optional</span><span class="p">[</span><span class="n">T</span><span class="p">]:</span>
</span><span id="L-1708"><a href="#L-1708"><span class="linenos">1708</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-1709"><a href="#L-1709"><span class="linenos">1709</span></a><span class="sd"> Attemps to backtrack if a parse function that contains a try/catch internally raises an error.</span>
</span><span id="L-1710"><a href="#L-1710"><span class="linenos">1710</span></a><span class="sd"> This behavior can be different depending on the uset-set ErrorLevel, so _try_parse aims to</span>
</span><span id="L-1711"><a href="#L-1711"><span class="linenos">1711</span></a><span class="sd"> solve this by setting &amp; resetting the parser state accordingly</span>
</span><span id="L-1712"><a href="#L-1712"><span class="linenos">1712</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-1713"><a href="#L-1713"><span class="linenos">1713</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-1714"><a href="#L-1714"><span class="linenos">1714</span></a> <span class="n">error_level</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span>
</span><span id="L-1715"><a href="#L-1715"><span class="linenos">1715</span></a>
</span><span id="L-1716"><a href="#L-1716"><span class="linenos">1716</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span>
</span><span id="L-1717"><a href="#L-1717"><span class="linenos">1717</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-1718"><a href="#L-1718"><span class="linenos">1718</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="L-1719"><a href="#L-1719"><span class="linenos">1719</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
</span><span id="L-1720"><a href="#L-1720"><span class="linenos">1720</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1721"><a href="#L-1721"><span class="linenos">1721</span></a> <span class="k">finally</span><span class="p">:</span>
</span><span id="L-1722"><a href="#L-1722"><span class="linenos">1722</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">retreat</span><span class="p">:</span>
</span><span id="L-1723"><a href="#L-1723"><span class="linenos">1723</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-1724"><a href="#L-1724"><span class="linenos">1724</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">=</span> <span class="n">error_level</span>
</span><span id="L-1725"><a href="#L-1725"><span class="linenos">1725</span></a>
</span><span id="L-1726"><a href="#L-1726"><span class="linenos">1726</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-1727"><a href="#L-1727"><span class="linenos">1727</span></a>
</span><span id="L-1728"><a href="#L-1728"><span class="linenos">1728</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">allow_exists</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="L-1729"><a href="#L-1729"><span class="linenos">1729</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-1730"><a href="#L-1730"><span class="linenos">1730</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span> <span class="k">if</span> <span class="n">allow_exists</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-1731"><a href="#L-1731"><span class="linenos">1731</span></a>
</span><span id="L-1732"><a href="#L-1732"><span class="linenos">1732</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
</span><span id="L-1733"><a href="#L-1733"><span class="linenos">1733</span></a>
</span><span id="L-1734"><a href="#L-1734"><span class="linenos">1734</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">)</span>
</span><span id="L-1735"><a href="#L-1735"><span class="linenos">1735</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-1736"><a href="#L-1736"><span class="linenos">1736</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
</span><span id="L-1737"><a href="#L-1737"><span class="linenos">1737</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="L-1738"><a href="#L-1738"><span class="linenos">1738</span></a>
</span><span id="L-1739"><a href="#L-1739"><span class="linenos">1739</span></a> <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">):</span>
</span><span id="L-1740"><a href="#L-1740"><span class="linenos">1740</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">token_type</span><span class="p">)</span>
</span><span id="L-1741"><a href="#L-1741"><span class="linenos">1741</span></a> <span class="k">elif</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">:</span>
</span><span id="L-1742"><a href="#L-1742"><span class="linenos">1742</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">alias_tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">COMMENT_TABLE_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="L-1743"><a href="#L-1743"><span class="linenos">1743</span></a> <span class="k">elif</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">:</span>
</span><span id="L-1744"><a href="#L-1744"><span class="linenos">1744</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-1745"><a href="#L-1745"><span class="linenos">1745</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1746"><a href="#L-1746"><span class="linenos">1746</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-1747"><a href="#L-1747"><span class="linenos">1747</span></a>
</span><span id="L-1748"><a href="#L-1748"><span class="linenos">1748</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">)</span>
</span><span id="L-1749"><a href="#L-1749"><span class="linenos">1749</span></a>
</span><span id="L-1750"><a href="#L-1750"><span class="linenos">1750</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1751"><a href="#L-1751"><span class="linenos">1751</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comment</span><span class="p">,</span>
</span><span id="L-1752"><a href="#L-1752"><span class="linenos">1752</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-1753"><a href="#L-1753"><span class="linenos">1753</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
</span><span id="L-1754"><a href="#L-1754"><span class="linenos">1754</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="L-1755"><a href="#L-1755"><span class="linenos">1755</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
</span><span id="L-1756"><a href="#L-1756"><span class="linenos">1756</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
</span><span id="L-1757"><a href="#L-1757"><span class="linenos">1757</span></a> <span class="p">)</span>
</span><span id="L-1758"><a href="#L-1758"><span class="linenos">1758</span></a>
</span><span id="L-1759"><a href="#L-1759"><span class="linenos">1759</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_to_table</span><span class="p">(</span>
</span><span id="L-1760"><a href="#L-1760"><span class="linenos">1760</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-1761"><a href="#L-1761"><span class="linenos">1761</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span>
</span><span id="L-1762"><a href="#L-1762"><span class="linenos">1762</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-1763"><a href="#L-1763"><span class="linenos">1763</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">)</span>
</span><span id="L-1764"><a href="#L-1764"><span class="linenos">1764</span></a>
</span><span id="L-1765"><a href="#L-1765"><span class="linenos">1765</span></a> <span class="c1"># https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#mergetree-table-ttl</span>
</span><span id="L-1766"><a href="#L-1766"><span class="linenos">1766</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_ttl</span><span class="p">(</span><span class="bp">self</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-1767"><a href="#L-1767"><span class="linenos">1767</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_ttl_action</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-1768"><a href="#L-1768"><span class="linenos">1768</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-1769"><a href="#L-1769"><span class="linenos">1769</span></a>
</span><span id="L-1770"><a href="#L-1770"><span class="linenos">1770</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DELETE&quot;</span><span class="p">):</span>
</span><span id="L-1771"><a href="#L-1771"><span class="linenos">1771</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</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">delete</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-1772"><a href="#L-1772"><span class="linenos">1772</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RECOMPRESS&quot;</span><span class="p">):</span>
</span><span id="L-1773"><a href="#L-1773"><span class="linenos">1773</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1774"><a href="#L-1774"><span class="linenos">1774</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</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">recompress</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-1775"><a href="#L-1775"><span class="linenos">1775</span></a> <span class="p">)</span>
</span><span id="L-1776"><a href="#L-1776"><span class="linenos">1776</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;DISK&quot;</span><span class="p">):</span>
</span><span id="L-1777"><a href="#L-1777"><span class="linenos">1777</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1778"><a href="#L-1778"><span class="linenos">1778</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</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">to_disk</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-1779"><a href="#L-1779"><span class="linenos">1779</span></a> <span class="p">)</span>
</span><span id="L-1780"><a href="#L-1780"><span class="linenos">1780</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;VOLUME&quot;</span><span class="p">):</span>
</span><span id="L-1781"><a href="#L-1781"><span class="linenos">1781</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1782"><a href="#L-1782"><span class="linenos">1782</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</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">to_volume</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-1783"><a href="#L-1783"><span class="linenos">1783</span></a> <span class="p">)</span>
</span><span id="L-1784"><a href="#L-1784"><span class="linenos">1784</span></a>
</span><span id="L-1785"><a href="#L-1785"><span class="linenos">1785</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-1786"><a href="#L-1786"><span class="linenos">1786</span></a>
</span><span id="L-1787"><a href="#L-1787"><span class="linenos">1787</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_ttl_action</span><span class="p">)</span>
</span><span id="L-1788"><a href="#L-1788"><span class="linenos">1788</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">()</span>
</span><span id="L-1789"><a href="#L-1789"><span class="linenos">1789</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
</span><span id="L-1790"><a href="#L-1790"><span class="linenos">1790</span></a>
</span><span id="L-1791"><a href="#L-1791"><span class="linenos">1791</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1792"><a href="#L-1792"><span class="linenos">1792</span></a> <span class="k">if</span> <span class="n">group</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">):</span>
</span><span id="L-1793"><a href="#L-1793"><span class="linenos">1793</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item</span><span class="p">)</span>
</span><span id="L-1794"><a href="#L-1794"><span class="linenos">1794</span></a>
</span><span id="L-1795"><a href="#L-1795"><span class="linenos">1795</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1796"><a href="#L-1796"><span class="linenos">1796</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">,</span>
</span><span id="L-1797"><a href="#L-1797"><span class="linenos">1797</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-1798"><a href="#L-1798"><span class="linenos">1798</span></a> <span class="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
</span><span id="L-1799"><a href="#L-1799"><span class="linenos">1799</span></a> <span class="n">group</span><span class="o">=</span><span class="n">group</span><span class="p">,</span>
</span><span id="L-1800"><a href="#L-1800"><span class="linenos">1800</span></a> <span class="n">aggregates</span><span class="o">=</span><span class="n">aggregates</span><span class="p">,</span>
</span><span id="L-1801"><a href="#L-1801"><span class="linenos">1801</span></a> <span class="p">)</span>
</span><span id="L-1802"><a href="#L-1802"><span class="linenos">1802</span></a>
</span><span id="L-1803"><a href="#L-1803"><span class="linenos">1803</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_statement</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-1804"><a href="#L-1804"><span class="linenos">1804</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-1805"><a href="#L-1805"><span class="linenos">1805</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-1806"><a href="#L-1806"><span class="linenos">1806</span></a>
</span><span id="L-1807"><a href="#L-1807"><span class="linenos">1807</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">):</span>
</span><span id="L-1808"><a href="#L-1808"><span class="linenos">1808</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="L-1809"><a href="#L-1809"><span class="linenos">1809</span></a> <span class="n">stmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-1810"><a href="#L-1810"><span class="linenos">1810</span></a> <span class="n">stmt</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">,</span> <span class="n">prepend</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-1811"><a href="#L-1811"><span class="linenos">1811</span></a> <span class="k">return</span> <span class="n">stmt</span>
</span><span id="L-1812"><a href="#L-1812"><span class="linenos">1812</span></a>
</span><span id="L-1813"><a href="#L-1813"><span class="linenos">1813</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer</span><span class="o">.</span><span class="n">COMMANDS</span><span class="p">):</span>
</span><span id="L-1814"><a href="#L-1814"><span class="linenos">1814</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">()</span>
</span><span id="L-1815"><a href="#L-1815"><span class="linenos">1815</span></a>
</span><span id="L-1816"><a href="#L-1816"><span class="linenos">1816</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
</span><span id="L-1817"><a href="#L-1817"><span class="linenos">1817</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
</span><span id="L-1818"><a href="#L-1818"><span class="linenos">1818</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-1819"><a href="#L-1819"><span class="linenos">1819</span></a>
</span><span id="L-1820"><a href="#L-1820"><span class="linenos">1820</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_drop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</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">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="L-1821"><a href="#L-1821"><span class="linenos">1821</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-1822"><a href="#L-1822"><span class="linenos">1822</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">)</span>
</span><span id="L-1823"><a href="#L-1823"><span class="linenos">1823</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">)</span>
</span><span id="L-1824"><a href="#L-1824"><span class="linenos">1824</span></a>
</span><span id="L-1825"><a href="#L-1825"><span class="linenos">1825</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-1826"><a href="#L-1826"><span class="linenos">1826</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
</span><span id="L-1827"><a href="#L-1827"><span class="linenos">1827</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="L-1828"><a href="#L-1828"><span class="linenos">1828</span></a>
</span><span id="L-1829"><a href="#L-1829"><span class="linenos">1829</span></a> <span class="n">concurrently</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONCURRENTLY&quot;</span><span class="p">)</span>
</span><span id="L-1830"><a href="#L-1830"><span class="linenos">1830</span></a> <span class="n">if_exists</span> <span class="o">=</span> <span class="n">exists</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
</span><span id="L-1831"><a href="#L-1831"><span class="linenos">1831</span></a>
</span><span id="L-1832"><a href="#L-1832"><span class="linenos">1832</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;COLUMN&quot;</span><span class="p">:</span>
</span><span id="L-1833"><a href="#L-1833"><span class="linenos">1833</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-1834"><a href="#L-1834"><span class="linenos">1834</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1835"><a href="#L-1835"><span class="linenos">1835</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span>
</span><span id="L-1836"><a href="#L-1836"><span class="linenos">1836</span></a> <span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span>
</span><span id="L-1837"><a href="#L-1837"><span class="linenos">1837</span></a> <span class="p">)</span>
</span><span id="L-1838"><a href="#L-1838"><span class="linenos">1838</span></a>
</span><span id="L-1839"><a href="#L-1839"><span class="linenos">1839</span></a> <span class="n">cluster</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_property</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-1840"><a href="#L-1840"><span class="linenos">1840</span></a>
</span><span id="L-1841"><a href="#L-1841"><span class="linenos">1841</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-1842"><a href="#L-1842"><span class="linenos">1842</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">)</span>
</span><span id="L-1843"><a href="#L-1843"><span class="linenos">1843</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1844"><a href="#L-1844"><span class="linenos">1844</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1845"><a href="#L-1845"><span class="linenos">1845</span></a>
</span><span id="L-1846"><a href="#L-1846"><span class="linenos">1846</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-1847"><a href="#L-1847"><span class="linenos">1847</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
</span><span id="L-1848"><a href="#L-1848"><span class="linenos">1848</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">if_exists</span><span class="p">,</span>
</span><span id="L-1849"><a href="#L-1849"><span class="linenos">1849</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-1850"><a href="#L-1850"><span class="linenos">1850</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-1851"><a href="#L-1851"><span class="linenos">1851</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">CREATABLE_KIND_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">kind</span><span class="p">)</span> <span class="ow">or</span> <span class="n">kind</span><span class="p">,</span>
</span><span id="L-1852"><a href="#L-1852"><span class="linenos">1852</span></a> <span class="n">temporary</span><span class="o">=</span><span class="n">temporary</span><span class="p">,</span>
</span><span id="L-1853"><a href="#L-1853"><span class="linenos">1853</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
</span><span id="L-1854"><a href="#L-1854"><span class="linenos">1854</span></a> <span class="n">cascade</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">),</span>
</span><span id="L-1855"><a href="#L-1855"><span class="linenos">1855</span></a> <span class="n">constraints</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONSTRAINTS&quot;</span><span class="p">),</span>
</span><span id="L-1856"><a href="#L-1856"><span class="linenos">1856</span></a> <span class="n">purge</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PURGE&quot;</span><span class="p">),</span>
</span><span id="L-1857"><a href="#L-1857"><span class="linenos">1857</span></a> <span class="n">cluster</span><span class="o">=</span><span class="n">cluster</span><span class="p">,</span>
</span><span id="L-1858"><a href="#L-1858"><span class="linenos">1858</span></a> <span class="n">concurrently</span><span class="o">=</span><span class="n">concurrently</span><span class="p">,</span>
</span><span id="L-1859"><a href="#L-1859"><span class="linenos">1859</span></a> <span class="p">)</span>
</span><span id="L-1860"><a href="#L-1860"><span class="linenos">1860</span></a>
</span><span id="L-1861"><a href="#L-1861"><span class="linenos">1861</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">not_</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">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]:</span>
</span><span id="L-1862"><a href="#L-1862"><span class="linenos">1862</span></a> <span class="k">return</span> <span class="p">(</span>
</span><span id="L-1863"><a href="#L-1863"><span class="linenos">1863</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">)</span>
</span><span id="L-1864"><a href="#L-1864"><span class="linenos">1864</span></a> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">not_</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">))</span>
</span><span id="L-1865"><a href="#L-1865"><span class="linenos">1865</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">)</span>
</span><span id="L-1866"><a href="#L-1866"><span class="linenos">1866</span></a> <span class="p">)</span>
</span><span id="L-1867"><a href="#L-1867"><span class="linenos">1867</span></a>
</span><span id="L-1868"><a href="#L-1868"><span class="linenos">1868</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_create</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="L-1869"><a href="#L-1869"><span class="linenos">1869</span></a> <span class="c1"># Note: this can&#39;t be None because we&#39;ve matched a statement parser</span>
</span><span id="L-1870"><a href="#L-1870"><span class="linenos">1870</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-1871"><a href="#L-1871"><span class="linenos">1871</span></a>
</span><span id="L-1872"><a href="#L-1872"><span class="linenos">1872</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-1873"><a href="#L-1873"><span class="linenos">1873</span></a> <span class="n">start</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span>
</span><span id="L-1874"><a href="#L-1874"><span class="linenos">1874</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">)</span>
</span><span id="L-1875"><a href="#L-1875"><span class="linenos">1875</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALTER</span><span class="p">)</span>
</span><span id="L-1876"><a href="#L-1876"><span class="linenos">1876</span></a> <span class="p">)</span>
</span><span id="L-1877"><a href="#L-1877"><span class="linenos">1877</span></a> <span class="n">refresh</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFRESH</span><span class="p">)</span>
</span><span id="L-1878"><a href="#L-1878"><span class="linenos">1878</span></a>
</span><span id="L-1879"><a href="#L-1879"><span class="linenos">1879</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">)</span>
</span><span id="L-1880"><a href="#L-1880"><span class="linenos">1880</span></a>
</span><span id="L-1881"><a href="#L-1881"><span class="linenos">1881</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CLUSTERED&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNSTORE&quot;</span><span class="p">):</span>
</span><span id="L-1882"><a href="#L-1882"><span class="linenos">1882</span></a> <span class="n">clustered</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-1883"><a href="#L-1883"><span class="linenos">1883</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NONCLUSTERED&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNSTORE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
</span><span id="L-1884"><a href="#L-1884"><span class="linenos">1884</span></a> <span class="s2">&quot;COLUMNSTORE&quot;</span>
</span><span id="L-1885"><a href="#L-1885"><span class="linenos">1885</span></a> <span class="p">):</span>
</span><span id="L-1886"><a href="#L-1886"><span class="linenos">1886</span></a> <span class="n">clustered</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-1887"><a href="#L-1887"><span class="linenos">1887</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1888"><a href="#L-1888"><span class="linenos">1888</span></a> <span class="n">clustered</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1889"><a href="#L-1889"><span class="linenos">1889</span></a>
</span><span id="L-1890"><a href="#L-1890"><span class="linenos">1890</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-1891"><a href="#L-1891"><span class="linenos">1891</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-1892"><a href="#L-1892"><span class="linenos">1892</span></a>
</span><span id="L-1893"><a href="#L-1893"><span class="linenos">1893</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1894"><a href="#L-1894"><span class="linenos">1894</span></a> <span class="n">create_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-1895"><a href="#L-1895"><span class="linenos">1895</span></a>
</span><span id="L-1896"><a href="#L-1896"><span class="linenos">1896</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">create_token</span><span class="p">:</span>
</span><span id="L-1897"><a href="#L-1897"><span class="linenos">1897</span></a> <span class="c1"># exp.Properties.Location.POST_CREATE</span>
</span><span id="L-1898"><a href="#L-1898"><span class="linenos">1898</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
</span><span id="L-1899"><a href="#L-1899"><span class="linenos">1899</span></a> <span class="n">create_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-1900"><a href="#L-1900"><span class="linenos">1900</span></a>
</span><span id="L-1901"><a href="#L-1901"><span class="linenos">1901</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">properties</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">create_token</span><span class="p">:</span>
</span><span id="L-1902"><a href="#L-1902"><span class="linenos">1902</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="L-1903"><a href="#L-1903"><span class="linenos">1903</span></a>
</span><span id="L-1904"><a href="#L-1904"><span class="linenos">1904</span></a> <span class="n">concurrently</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONCURRENTLY&quot;</span><span class="p">)</span>
</span><span id="L-1905"><a href="#L-1905"><span class="linenos">1905</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-1906"><a href="#L-1906"><span class="linenos">1906</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1907"><a href="#L-1907"><span class="linenos">1907</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1908"><a href="#L-1908"><span class="linenos">1908</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1909"><a href="#L-1909"><span class="linenos">1909</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1910"><a href="#L-1910"><span class="linenos">1910</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1911"><a href="#L-1911"><span class="linenos">1911</span></a> <span class="n">end</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1912"><a href="#L-1912"><span class="linenos">1912</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1913"><a href="#L-1913"><span class="linenos">1913</span></a>
</span><span id="L-1914"><a href="#L-1914"><span class="linenos">1914</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">extend_props</span><span class="p">(</span><span class="n">temp_props</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">Properties</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-1915"><a href="#L-1915"><span class="linenos">1915</span></a> <span class="k">nonlocal</span> <span class="n">properties</span>
</span><span id="L-1916"><a href="#L-1916"><span class="linenos">1916</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_props</span><span class="p">:</span>
</span><span id="L-1917"><a href="#L-1917"><span class="linenos">1917</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_props</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-1918"><a href="#L-1918"><span class="linenos">1918</span></a> <span class="k">elif</span> <span class="n">temp_props</span><span class="p">:</span>
</span><span id="L-1919"><a href="#L-1919"><span class="linenos">1919</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_props</span>
</span><span id="L-1920"><a href="#L-1920"><span class="linenos">1920</span></a>
</span><span id="L-1921"><a href="#L-1921"><span class="linenos">1921</span></a> <span class="k">if</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">):</span>
</span><span id="L-1922"><a href="#L-1922"><span class="linenos">1922</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span><span class="p">)</span>
</span><span id="L-1923"><a href="#L-1923"><span class="linenos">1923</span></a>
</span><span id="L-1924"><a href="#L-1924"><span class="linenos">1924</span></a> <span class="c1"># exp.Properties.Location.POST_SCHEMA (&quot;schema&quot; here is the UDF&#39;s type signature)</span>
</span><span id="L-1925"><a href="#L-1925"><span class="linenos">1925</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="L-1926"><a href="#L-1926"><span class="linenos">1926</span></a>
</span><span id="L-1927"><a href="#L-1927"><span class="linenos">1927</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_heredoc</span><span class="p">()</span>
</span><span id="L-1928"><a href="#L-1928"><span class="linenos">1928</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="L-1929"><a href="#L-1929"><span class="linenos">1929</span></a>
</span><span id="L-1930"><a href="#L-1930"><span class="linenos">1930</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="L-1931"><a href="#L-1931"><span class="linenos">1931</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">):</span>
</span><span id="L-1932"><a href="#L-1932"><span class="linenos">1932</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-1933"><a href="#L-1933"><span class="linenos">1933</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1934"><a href="#L-1934"><span class="linenos">1934</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">)</span>
</span><span id="L-1935"><a href="#L-1935"><span class="linenos">1935</span></a> <span class="n">return_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURN&quot;</span><span class="p">)</span>
</span><span id="L-1936"><a href="#L-1936"><span class="linenos">1936</span></a>
</span><span id="L-1937"><a href="#L-1937"><span class="linenos">1937</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-1938"><a href="#L-1938"><span class="linenos">1938</span></a> <span class="c1"># Takes care of BigQuery&#39;s JavaScript UDF definitions that end in an OPTIONS property</span>
</span><span id="L-1939"><a href="#L-1939"><span class="linenos">1939</span></a> <span class="c1"># # https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#create_function_statement</span>
</span><span id="L-1940"><a href="#L-1940"><span class="linenos">1940</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-1941"><a href="#L-1941"><span class="linenos">1941</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="L-1942"><a href="#L-1942"><span class="linenos">1942</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1943"><a href="#L-1943"><span class="linenos">1943</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_user_defined_function_expression</span><span class="p">()</span>
</span><span id="L-1944"><a href="#L-1944"><span class="linenos">1944</span></a>
</span><span id="L-1945"><a href="#L-1945"><span class="linenos">1945</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;END&quot;</span><span class="p">)</span>
</span><span id="L-1946"><a href="#L-1946"><span class="linenos">1946</span></a>
</span><span id="L-1947"><a href="#L-1947"><span class="linenos">1947</span></a> <span class="k">if</span> <span class="n">return_</span><span class="p">:</span>
</span><span id="L-1948"><a href="#L-1948"><span class="linenos">1948</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-1949"><a href="#L-1949"><span class="linenos">1949</span></a> <span class="k">elif</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">:</span>
</span><span id="L-1950"><a href="#L-1950"><span class="linenos">1950</span></a> <span class="c1"># Postgres allows anonymous indexes, eg. CREATE INDEX IF NOT EXISTS ON t(c)</span>
</span><span id="L-1951"><a href="#L-1951"><span class="linenos">1951</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
</span><span id="L-1952"><a href="#L-1952"><span class="linenos">1952</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-1953"><a href="#L-1953"><span class="linenos">1953</span></a> <span class="n">anonymous</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-1954"><a href="#L-1954"><span class="linenos">1954</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1955"><a href="#L-1955"><span class="linenos">1955</span></a> <span class="n">index</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-1956"><a href="#L-1956"><span class="linenos">1956</span></a> <span class="n">anonymous</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-1957"><a href="#L-1957"><span class="linenos">1957</span></a>
</span><span id="L-1958"><a href="#L-1958"><span class="linenos">1958</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="n">index</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">)</span>
</span><span id="L-1959"><a href="#L-1959"><span class="linenos">1959</span></a> <span class="k">elif</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">DB_CREATABLES</span><span class="p">:</span>
</span><span id="L-1960"><a href="#L-1960"><span class="linenos">1960</span></a> <span class="n">table_parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span>
</span><span id="L-1961"><a href="#L-1961"><span class="linenos">1961</span></a> <span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span>
</span><span id="L-1962"><a href="#L-1962"><span class="linenos">1962</span></a> <span class="p">)</span>
</span><span id="L-1963"><a href="#L-1963"><span class="linenos">1963</span></a>
</span><span id="L-1964"><a href="#L-1964"><span class="linenos">1964</span></a> <span class="c1"># exp.Properties.Location.POST_NAME</span>
</span><span id="L-1965"><a href="#L-1965"><span class="linenos">1965</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="L-1966"><a href="#L-1966"><span class="linenos">1966</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">(</span><span class="n">before</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="L-1967"><a href="#L-1967"><span class="linenos">1967</span></a>
</span><span id="L-1968"><a href="#L-1968"><span class="linenos">1968</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">table_parts</span><span class="p">)</span>
</span><span id="L-1969"><a href="#L-1969"><span class="linenos">1969</span></a>
</span><span id="L-1970"><a href="#L-1970"><span class="linenos">1970</span></a> <span class="c1"># exp.Properties.Location.POST_SCHEMA and POST_WITH</span>
</span><span id="L-1971"><a href="#L-1971"><span class="linenos">1971</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="L-1972"><a href="#L-1972"><span class="linenos">1972</span></a>
</span><span id="L-1973"><a href="#L-1973"><span class="linenos">1973</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="L-1974"><a href="#L-1974"><span class="linenos">1974</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">DDL_SELECT_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-1975"><a href="#L-1975"><span class="linenos">1975</span></a> <span class="c1"># exp.Properties.Location.POST_ALIAS</span>
</span><span id="L-1976"><a href="#L-1976"><span class="linenos">1976</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="L-1977"><a href="#L-1977"><span class="linenos">1977</span></a>
</span><span id="L-1978"><a href="#L-1978"><span class="linenos">1978</span></a> <span class="k">if</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEQUENCE</span><span class="p">:</span>
</span><span id="L-1979"><a href="#L-1979"><span class="linenos">1979</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="L-1980"><a href="#L-1980"><span class="linenos">1980</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="L-1981"><a href="#L-1981"><span class="linenos">1981</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1982"><a href="#L-1982"><span class="linenos">1982</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ddl_select</span><span class="p">()</span>
</span><span id="L-1983"><a href="#L-1983"><span class="linenos">1983</span></a>
</span><span id="L-1984"><a href="#L-1984"><span class="linenos">1984</span></a> <span class="k">if</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">:</span>
</span><span id="L-1985"><a href="#L-1985"><span class="linenos">1985</span></a> <span class="c1"># exp.Properties.Location.POST_EXPRESSION</span>
</span><span id="L-1986"><a href="#L-1986"><span class="linenos">1986</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="L-1987"><a href="#L-1987"><span class="linenos">1987</span></a>
</span><span id="L-1988"><a href="#L-1988"><span class="linenos">1988</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-1989"><a href="#L-1989"><span class="linenos">1989</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-1990"><a href="#L-1990"><span class="linenos">1990</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index</span><span class="p">()</span>
</span><span id="L-1991"><a href="#L-1991"><span class="linenos">1991</span></a>
</span><span id="L-1992"><a href="#L-1992"><span class="linenos">1992</span></a> <span class="c1"># exp.Properties.Location.POST_INDEX</span>
</span><span id="L-1993"><a href="#L-1993"><span class="linenos">1993</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="L-1994"><a href="#L-1994"><span class="linenos">1994</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index</span><span class="p">:</span>
</span><span id="L-1995"><a href="#L-1995"><span class="linenos">1995</span></a> <span class="k">break</span>
</span><span id="L-1996"><a href="#L-1996"><span class="linenos">1996</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-1997"><a href="#L-1997"><span class="linenos">1997</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="L-1998"><a href="#L-1998"><span class="linenos">1998</span></a> <span class="n">indexes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-1999"><a href="#L-1999"><span class="linenos">1999</span></a> <span class="k">elif</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">:</span>
</span><span id="L-2000"><a href="#L-2000"><span class="linenos">2000</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">,</span> <span class="s2">&quot;BINDING&quot;</span><span class="p">):</span>
</span><span id="L-2001"><a href="#L-2001"><span class="linenos">2001</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-2002"><a href="#L-2002"><span class="linenos">2002</span></a> <span class="k">elif</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SINK</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOURCE</span><span class="p">):</span>
</span><span id="L-2003"><a href="#L-2003"><span class="linenos">2003</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="L-2004"><a href="#L-2004"><span class="linenos">2004</span></a>
</span><span id="L-2005"><a href="#L-2005"><span class="linenos">2005</span></a> <span class="n">shallow</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SHALLOW&quot;</span><span class="p">)</span>
</span><span id="L-2006"><a href="#L-2006"><span class="linenos">2006</span></a>
</span><span id="L-2007"><a href="#L-2007"><span class="linenos">2007</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CLONE_KEYWORDS</span><span class="p">):</span>
</span><span id="L-2008"><a href="#L-2008"><span class="linenos">2008</span></a> <span class="n">copy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;copy&quot;</span>
</span><span id="L-2009"><a href="#L-2009"><span class="linenos">2009</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2010"><a href="#L-2010"><span class="linenos">2010</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Clone</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">shallow</span><span class="o">=</span><span class="n">shallow</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span>
</span><span id="L-2011"><a href="#L-2011"><span class="linenos">2011</span></a> <span class="p">)</span>
</span><span id="L-2012"><a href="#L-2012"><span class="linenos">2012</span></a>
</span><span id="L-2013"><a href="#L-2013"><span class="linenos">2013</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-2014"><a href="#L-2014"><span class="linenos">2014</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="L-2015"><a href="#L-2015"><span class="linenos">2015</span></a>
</span><span id="L-2016"><a href="#L-2016"><span class="linenos">2016</span></a> <span class="n">create_kind_text</span> <span class="o">=</span> <span class="n">create_token</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-2017"><a href="#L-2017"><span class="linenos">2017</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2018"><a href="#L-2018"><span class="linenos">2018</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
</span><span id="L-2019"><a href="#L-2019"><span class="linenos">2019</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-2020"><a href="#L-2020"><span class="linenos">2020</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">CREATABLE_KIND_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">create_kind_text</span><span class="p">)</span> <span class="ow">or</span> <span class="n">create_kind_text</span><span class="p">,</span>
</span><span id="L-2021"><a href="#L-2021"><span class="linenos">2021</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
</span><span id="L-2022"><a href="#L-2022"><span class="linenos">2022</span></a> <span class="n">refresh</span><span class="o">=</span><span class="n">refresh</span><span class="p">,</span>
</span><span id="L-2023"><a href="#L-2023"><span class="linenos">2023</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
</span><span id="L-2024"><a href="#L-2024"><span class="linenos">2024</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="L-2025"><a href="#L-2025"><span class="linenos">2025</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
</span><span id="L-2026"><a href="#L-2026"><span class="linenos">2026</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties</span><span class="p">,</span>
</span><span id="L-2027"><a href="#L-2027"><span class="linenos">2027</span></a> <span class="n">indexes</span><span class="o">=</span><span class="n">indexes</span><span class="p">,</span>
</span><span id="L-2028"><a href="#L-2028"><span class="linenos">2028</span></a> <span class="n">no_schema_binding</span><span class="o">=</span><span class="n">no_schema_binding</span><span class="p">,</span>
</span><span id="L-2029"><a href="#L-2029"><span class="linenos">2029</span></a> <span class="n">begin</span><span class="o">=</span><span class="n">begin</span><span class="p">,</span>
</span><span id="L-2030"><a href="#L-2030"><span class="linenos">2030</span></a> <span class="n">end</span><span class="o">=</span><span class="n">end</span><span class="p">,</span>
</span><span id="L-2031"><a href="#L-2031"><span class="linenos">2031</span></a> <span class="n">clone</span><span class="o">=</span><span class="n">clone</span><span class="p">,</span>
</span><span id="L-2032"><a href="#L-2032"><span class="linenos">2032</span></a> <span class="n">concurrently</span><span class="o">=</span><span class="n">concurrently</span><span class="p">,</span>
</span><span id="L-2033"><a href="#L-2033"><span class="linenos">2033</span></a> <span class="n">clustered</span><span class="o">=</span><span class="n">clustered</span><span class="p">,</span>
</span><span id="L-2034"><a href="#L-2034"><span class="linenos">2034</span></a> <span class="p">)</span>
</span><span id="L-2035"><a href="#L-2035"><span class="linenos">2035</span></a>
</span><span id="L-2036"><a href="#L-2036"><span class="linenos">2036</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_sequence_properties</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">SequenceProperties</span><span class="p">]:</span>
</span><span id="L-2037"><a href="#L-2037"><span class="linenos">2037</span></a> <span class="n">seq</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">SequenceProperties</span><span class="p">()</span>
</span><span id="L-2038"><a href="#L-2038"><span class="linenos">2038</span></a>
</span><span id="L-2039"><a href="#L-2039"><span class="linenos">2039</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-2040"><a href="#L-2040"><span class="linenos">2040</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-2041"><a href="#L-2041"><span class="linenos">2041</span></a>
</span><span id="L-2042"><a href="#L-2042"><span class="linenos">2042</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-2043"><a href="#L-2043"><span class="linenos">2043</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="L-2044"><a href="#L-2044"><span class="linenos">2044</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">):</span>
</span><span id="L-2045"><a href="#L-2045"><span class="linenos">2045</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span>
</span><span id="L-2046"><a href="#L-2046"><span class="linenos">2046</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;=&quot;</span><span class="p">)</span>
</span><span id="L-2047"><a href="#L-2047"><span class="linenos">2047</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
</span><span id="L-2048"><a href="#L-2048"><span class="linenos">2048</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</span><span class="p">):</span>
</span><span id="L-2049"><a href="#L-2049"><span class="linenos">2049</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
</span><span id="L-2050"><a href="#L-2050"><span class="linenos">2050</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAXVALUE&quot;</span><span class="p">):</span>
</span><span id="L-2051"><a href="#L-2051"><span class="linenos">2051</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
</span><span id="L-2052"><a href="#L-2052"><span class="linenos">2052</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">):</span>
</span><span id="L-2053"><a href="#L-2053"><span class="linenos">2053</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;=&quot;</span><span class="p">)</span>
</span><span id="L-2054"><a href="#L-2054"><span class="linenos">2054</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
</span><span id="L-2055"><a href="#L-2055"><span class="linenos">2055</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CACHE&quot;</span><span class="p">):</span>
</span><span id="L-2056"><a href="#L-2056"><span class="linenos">2056</span></a> <span class="c1"># T-SQL allows empty CACHE which is initialized dynamically</span>
</span><span id="L-2057"><a href="#L-2057"><span class="linenos">2057</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cache&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span> <span class="ow">or</span> <span class="kc">True</span><span class="p">)</span>
</span><span id="L-2058"><a href="#L-2058"><span class="linenos">2058</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OWNED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="L-2059"><a href="#L-2059"><span class="linenos">2059</span></a> <span class="c1"># &quot;OWNED BY NONE&quot; is the default</span>
</span><span id="L-2060"><a href="#L-2060"><span class="linenos">2060</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;owned&quot;</span><span class="p">,</span> <span class="kc">None</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NONE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">())</span>
</span><span id="L-2061"><a href="#L-2061"><span class="linenos">2061</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2062"><a href="#L-2062"><span class="linenos">2062</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATE_SEQUENCE</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-2063"><a href="#L-2063"><span class="linenos">2063</span></a> <span class="k">if</span> <span class="n">opt</span><span class="p">:</span>
</span><span id="L-2064"><a href="#L-2064"><span class="linenos">2064</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">opt</span><span class="p">)</span>
</span><span id="L-2065"><a href="#L-2065"><span class="linenos">2065</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2066"><a href="#L-2066"><span class="linenos">2066</span></a> <span class="k">break</span>
</span><span id="L-2067"><a href="#L-2067"><span class="linenos">2067</span></a>
</span><span id="L-2068"><a href="#L-2068"><span class="linenos">2068</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">options</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="L-2069"><a href="#L-2069"><span class="linenos">2069</span></a> <span class="k">return</span> <span class="kc">None</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">==</span> <span class="n">index</span> <span class="k">else</span> <span class="n">seq</span>
</span><span id="L-2070"><a href="#L-2070"><span class="linenos">2070</span></a>
</span><span id="L-2071"><a href="#L-2071"><span class="linenos">2071</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_property_before</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-2072"><a href="#L-2072"><span class="linenos">2072</span></a> <span class="c1"># only used for teradata currently</span>
</span><span id="L-2073"><a href="#L-2073"><span class="linenos">2073</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="L-2074"><a href="#L-2074"><span class="linenos">2074</span></a>
</span><span id="L-2075"><a href="#L-2075"><span class="linenos">2075</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-2076"><a href="#L-2076"><span class="linenos">2076</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">),</span>
</span><span id="L-2077"><a href="#L-2077"><span class="linenos">2077</span></a> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DUAL&quot;</span><span class="p">),</span>
</span><span id="L-2078"><a href="#L-2078"><span class="linenos">2078</span></a> <span class="s2">&quot;before&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BEFORE&quot;</span><span class="p">),</span>
</span><span id="L-2079"><a href="#L-2079"><span class="linenos">2079</span></a> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFAULT&quot;</span><span class="p">),</span>
</span><span id="L-2080"><a href="#L-2080"><span class="linenos">2080</span></a> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span>
</span><span id="L-2081"><a href="#L-2081"><span class="linenos">2081</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;NOT LOCAL&quot;</span><span class="p">),</span>
</span><span id="L-2082"><a href="#L-2082"><span class="linenos">2082</span></a> <span class="s2">&quot;after&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AFTER&quot;</span><span class="p">),</span>
</span><span id="L-2083"><a href="#L-2083"><span class="linenos">2083</span></a> <span class="s2">&quot;minimum&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MIN&quot;</span><span class="p">,</span> <span class="s2">&quot;MINIMUM&quot;</span><span class="p">)),</span>
</span><span id="L-2084"><a href="#L-2084"><span class="linenos">2084</span></a> <span class="s2">&quot;maximum&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MAXIMUM&quot;</span><span class="p">)),</span>
</span><span id="L-2085"><a href="#L-2085"><span class="linenos">2085</span></a> <span class="p">}</span>
</span><span id="L-2086"><a href="#L-2086"><span class="linenos">2086</span></a>
</span><span id="L-2087"><a href="#L-2087"><span class="linenos">2087</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">):</span>
</span><span id="L-2088"><a href="#L-2088"><span class="linenos">2088</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()]</span>
</span><span id="L-2089"><a href="#L-2089"><span class="linenos">2089</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-2090"><a href="#L-2090"><span class="linenos">2090</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">v</span><span class="p">})</span>
</span><span id="L-2091"><a href="#L-2091"><span class="linenos">2091</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
</span><span id="L-2092"><a href="#L-2092"><span class="linenos">2092</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot parse property &#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
</span><span id="L-2093"><a href="#L-2093"><span class="linenos">2093</span></a>
</span><span id="L-2094"><a href="#L-2094"><span class="linenos">2094</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2095"><a href="#L-2095"><span class="linenos">2095</span></a>
</span><span id="L-2096"><a href="#L-2096"><span class="linenos">2096</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_wrapped_properties</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-2097"><a href="#L-2097"><span class="linenos">2097</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">)</span>
</span><span id="L-2098"><a href="#L-2098"><span class="linenos">2098</span></a>
</span><span id="L-2099"><a href="#L-2099"><span class="linenos">2099</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-2100"><a href="#L-2100"><span class="linenos">2100</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">):</span>
</span><span id="L-2101"><a href="#L-2101"><span class="linenos">2101</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-2102"><a href="#L-2102"><span class="linenos">2102</span></a>
</span><span id="L-2103"><a href="#L-2103"><span class="linenos">2103</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">):</span>
</span><span id="L-2104"><a href="#L-2104"><span class="linenos">2104</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2105"><a href="#L-2105"><span class="linenos">2105</span></a>
</span><span id="L-2106"><a href="#L-2106"><span class="linenos">2106</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COMPOUND&quot;</span><span class="p">,</span> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">):</span>
</span><span id="L-2107"><a href="#L-2107"><span class="linenos">2107</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sortkey</span><span class="p">(</span><span class="n">compound</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2108"><a href="#L-2108"><span class="linenos">2108</span></a>
</span><span id="L-2109"><a href="#L-2109"><span class="linenos">2109</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SQL&quot;</span><span class="p">,</span> <span class="s2">&quot;SECURITY&quot;</span><span class="p">):</span>
</span><span id="L-2110"><a href="#L-2110"><span class="linenos">2110</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">,</span> <span class="n">definer</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFINER&quot;</span><span class="p">))</span>
</span><span id="L-2111"><a href="#L-2111"><span class="linenos">2111</span></a>
</span><span id="L-2112"><a href="#L-2112"><span class="linenos">2112</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-2113"><a href="#L-2113"><span class="linenos">2113</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-2114"><a href="#L-2114"><span class="linenos">2114</span></a>
</span><span id="L-2115"><a href="#L-2115"><span class="linenos">2115</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">):</span>
</span><span id="L-2116"><a href="#L-2116"><span class="linenos">2116</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-2117"><a href="#L-2117"><span class="linenos">2117</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sequence_properties</span><span class="p">()</span>
</span><span id="L-2118"><a href="#L-2118"><span class="linenos">2118</span></a>
</span><span id="L-2119"><a href="#L-2119"><span class="linenos">2119</span></a> <span class="c1"># Transform the key to exp.Dot if it&#39;s dotted identifiers wrapped in exp.Column or to exp.Var otherwise</span>
</span><span id="L-2120"><a href="#L-2120"><span class="linenos">2120</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
</span><span id="L-2121"><a href="#L-2121"><span class="linenos">2121</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">to_dot</span><span class="p">()</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="L-2122"><a href="#L-2122"><span class="linenos">2122</span></a>
</span><span id="L-2123"><a href="#L-2123"><span class="linenos">2123</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2124"><a href="#L-2124"><span class="linenos">2124</span></a>
</span><span id="L-2125"><a href="#L-2125"><span class="linenos">2125</span></a> <span class="c1"># Transform the value to exp.Var if it was parsed as exp.Column(exp.Identifier())</span>
</span><span id="L-2126"><a href="#L-2126"><span class="linenos">2126</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
</span><span id="L-2127"><a href="#L-2127"><span class="linenos">2127</span></a> <span class="n">value</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">value</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="L-2128"><a href="#L-2128"><span class="linenos">2128</span></a>
</span><span id="L-2129"><a href="#L-2129"><span class="linenos">2129</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
</span><span id="L-2130"><a href="#L-2130"><span class="linenos">2130</span></a>
</span><span id="L-2131"><a href="#L-2131"><span class="linenos">2131</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_stored</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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">FileFormatProperty</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">StorageHandlerProperty</span><span class="p">]:</span>
</span><span id="L-2132"><a href="#L-2132"><span class="linenos">2132</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="L-2133"><a href="#L-2133"><span class="linenos">2133</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StorageHandlerProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">())</span>
</span><span id="L-2134"><a href="#L-2134"><span class="linenos">2134</span></a>
</span><span id="L-2135"><a href="#L-2135"><span class="linenos">2135</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="L-2136"><a href="#L-2136"><span class="linenos">2136</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INPUTFORMAT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-2137"><a href="#L-2137"><span class="linenos">2137</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUTPUTFORMAT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-2138"><a href="#L-2138"><span class="linenos">2138</span></a>
</span><span id="L-2139"><a href="#L-2139"><span class="linenos">2139</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2140"><a href="#L-2140"><span class="linenos">2140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">,</span>
</span><span id="L-2141"><a href="#L-2141"><span class="linenos">2141</span></a> <span class="n">this</span><span class="o">=</span><span class="p">(</span>
</span><span id="L-2142"><a href="#L-2142"><span class="linenos">2142</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2143"><a href="#L-2143"><span class="linenos">2143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">,</span>
</span><span id="L-2144"><a href="#L-2144"><span class="linenos">2144</span></a> <span class="n">input_format</span><span class="o">=</span><span class="n">input_format</span><span class="p">,</span>
</span><span id="L-2145"><a href="#L-2145"><span class="linenos">2145</span></a> <span class="n">output_format</span><span class="o">=</span><span class="n">output_format</span><span class="p">,</span>
</span><span id="L-2146"><a href="#L-2146"><span class="linenos">2146</span></a> <span class="p">)</span>
</span><span id="L-2147"><a href="#L-2147"><span class="linenos">2147</span></a> <span class="k">if</span> <span class="n">input_format</span> <span class="ow">or</span> <span class="n">output_format</span>
</span><span id="L-2148"><a href="#L-2148"><span class="linenos">2148</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-2149"><a href="#L-2149"><span class="linenos">2149</span></a> <span class="p">),</span>
</span><span id="L-2150"><a href="#L-2150"><span class="linenos">2150</span></a> <span class="p">)</span>
</span><span id="L-2151"><a href="#L-2151"><span class="linenos">2151</span></a>
</span><span id="L-2152"><a href="#L-2152"><span class="linenos">2152</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unquoted_field</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-2153"><a href="#L-2153"><span class="linenos">2153</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
</span><span id="L-2154"><a href="#L-2154"><span class="linenos">2154</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</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="ow">and</span> <span class="ow">not</span> <span class="n">field</span><span class="o">.</span><span class="n">quoted</span><span class="p">:</span>
</span><span id="L-2155"><a href="#L-2155"><span class="linenos">2155</span></a> <span class="n">field</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">field</span><span class="p">)</span>
</span><span id="L-2156"><a href="#L-2156"><span class="linenos">2156</span></a>
</span><span id="L-2157"><a href="#L-2157"><span class="linenos">2157</span></a> <span class="k">return</span> <span class="n">field</span>
</span><span id="L-2158"><a href="#L-2158"><span class="linenos">2158</span></a>
</span><span id="L-2159"><a href="#L-2159"><span class="linenos">2159</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_property_assignment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <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="o">**</span><span class="n">kwargs</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="n">E</span><span class="p">:</span>
</span><span id="L-2160"><a href="#L-2160"><span class="linenos">2160</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-2161"><a href="#L-2161"><span class="linenos">2161</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="L-2162"><a href="#L-2162"><span class="linenos">2162</span></a>
</span><span id="L-2163"><a href="#L-2163"><span class="linenos">2163</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp_class</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unquoted_field</span><span class="p">(),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-2164"><a href="#L-2164"><span class="linenos">2164</span></a>
</span><span id="L-2165"><a href="#L-2165"><span class="linenos">2165</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">before</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="p">]</span> <span class="o">=</span> <span class="kc">None</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">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">]:</span>
</span><span id="L-2166"><a href="#L-2166"><span class="linenos">2166</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-2167"><a href="#L-2167"><span class="linenos">2167</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-2168"><a href="#L-2168"><span class="linenos">2168</span></a> <span class="k">if</span> <span class="n">before</span><span class="p">:</span>
</span><span id="L-2169"><a href="#L-2169"><span class="linenos">2169</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_before</span><span class="p">()</span>
</span><span id="L-2170"><a href="#L-2170"><span class="linenos">2170</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2171"><a href="#L-2171"><span class="linenos">2171</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">()</span>
</span><span id="L-2172"><a href="#L-2172"><span class="linenos">2172</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">prop</span><span class="p">:</span>
</span><span id="L-2173"><a href="#L-2173"><span class="linenos">2173</span></a> <span class="k">break</span>
</span><span id="L-2174"><a href="#L-2174"><span class="linenos">2174</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">prop</span><span class="p">):</span>
</span><span id="L-2175"><a href="#L-2175"><span class="linenos">2175</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
</span><span id="L-2176"><a href="#L-2176"><span class="linenos">2176</span></a>
</span><span id="L-2177"><a href="#L-2177"><span class="linenos">2177</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
</span><span id="L-2178"><a href="#L-2178"><span class="linenos">2178</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">properties</span><span class="p">)</span>
</span><span id="L-2179"><a href="#L-2179"><span class="linenos">2179</span></a>
</span><span id="L-2180"><a href="#L-2180"><span class="linenos">2180</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2181"><a href="#L-2181"><span class="linenos">2181</span></a>
</span><span id="L-2182"><a href="#L-2182"><span class="linenos">2182</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_fallback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">:</span>
</span><span id="L-2183"><a href="#L-2183"><span class="linenos">2183</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2184"><a href="#L-2184"><span class="linenos">2184</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">protection</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PROTECTION&quot;</span><span class="p">)</span>
</span><span id="L-2185"><a href="#L-2185"><span class="linenos">2185</span></a> <span class="p">)</span>
</span><span id="L-2186"><a href="#L-2186"><span class="linenos">2186</span></a>
</span><span id="L-2187"><a href="#L-2187"><span class="linenos">2187</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_security</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">SecurityProperty</span><span class="p">]:</span>
</span><span id="L-2188"><a href="#L-2188"><span class="linenos">2188</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;DEFINER&quot;</span><span class="p">,</span> <span class="s2">&quot;INVOKER&quot;</span><span class="p">)):</span>
</span><span id="L-2189"><a href="#L-2189"><span class="linenos">2189</span></a> <span class="n">security_specifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-2190"><a href="#L-2190"><span class="linenos">2190</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SecurityProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">security_specifier</span><span class="p">)</span>
</span><span id="L-2191"><a href="#L-2191"><span class="linenos">2191</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2192"><a href="#L-2192"><span class="linenos">2192</span></a>
</span><span id="L-2193"><a href="#L-2193"><span class="linenos">2193</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_settings_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">:</span>
</span><span id="L-2194"><a href="#L-2194"><span class="linenos">2194</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2195"><a href="#L-2195"><span class="linenos">2195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span>
</span><span id="L-2196"><a href="#L-2196"><span class="linenos">2196</span></a> <span class="p">)</span>
</span><span id="L-2197"><a href="#L-2197"><span class="linenos">2197</span></a>
</span><span id="L-2198"><a href="#L-2198"><span class="linenos">2198</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_volatile_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span>
</span><span id="L-2199"><a href="#L-2199"><span class="linenos">2199</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
</span><span id="L-2200"><a href="#L-2200"><span class="linenos">2200</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">2</span><span class="p">]</span>
</span><span id="L-2201"><a href="#L-2201"><span class="linenos">2201</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2202"><a href="#L-2202"><span class="linenos">2202</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2203"><a href="#L-2203"><span class="linenos">2203</span></a>
</span><span id="L-2204"><a href="#L-2204"><span class="linenos">2204</span></a> <span class="k">if</span> <span class="n">pre_volatile_token</span> <span class="ow">and</span> <span class="n">pre_volatile_token</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRE_VOLATILE_TOKENS</span><span class="p">:</span>
</span><span id="L-2205"><a href="#L-2205"><span class="linenos">2205</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">()</span>
</span><span id="L-2206"><a href="#L-2206"><span class="linenos">2206</span></a>
</span><span id="L-2207"><a href="#L-2207"><span class="linenos">2207</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;VOLATILE&quot;</span><span class="p">))</span>
</span><span id="L-2208"><a href="#L-2208"><span class="linenos">2208</span></a>
</span><span id="L-2209"><a href="#L-2209"><span class="linenos">2209</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_retention_period</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">:</span>
</span><span id="L-2210"><a href="#L-2210"><span class="linenos">2210</span></a> <span class="c1"># Parse TSQL&#39;s HISTORY_RETENTION_PERIOD: {INFINITE | &lt;number&gt; DAY | DAYS | MONTH ...}</span>
</span><span id="L-2211"><a href="#L-2211"><span class="linenos">2211</span></a> <span class="n">number</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="L-2212"><a href="#L-2212"><span class="linenos">2212</span></a> <span class="n">number_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">number</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">number</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-2213"><a href="#L-2213"><span class="linenos">2213</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2214"><a href="#L-2214"><span class="linenos">2214</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">number_str</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-2215"><a href="#L-2215"><span class="linenos">2215</span></a>
</span><span id="L-2216"><a href="#L-2216"><span class="linenos">2216</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_system_versioning_property</span><span class="p">(</span>
</span><span id="L-2217"><a href="#L-2217"><span class="linenos">2217</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">with_</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-2218"><a href="#L-2218"><span class="linenos">2218</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithSystemVersioningProperty</span><span class="p">:</span>
</span><span id="L-2219"><a href="#L-2219"><span class="linenos">2219</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-2220"><a href="#L-2220"><span class="linenos">2220</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2221"><a href="#L-2221"><span class="linenos">2221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithSystemVersioningProperty</span><span class="p">,</span>
</span><span id="L-2222"><a href="#L-2222"><span class="linenos">2222</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
</span><span id="L-2223"><a href="#L-2223"><span class="linenos">2223</span></a> <span class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="L-2224"><a href="#L-2224"><span class="linenos">2224</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="n">with_</span><span class="p">,</span>
</span><span id="L-2225"><a href="#L-2225"><span class="linenos">2225</span></a> <span class="p">},</span>
</span><span id="L-2226"><a href="#L-2226"><span class="linenos">2226</span></a> <span class="p">)</span>
</span><span id="L-2227"><a href="#L-2227"><span class="linenos">2227</span></a>
</span><span id="L-2228"><a href="#L-2228"><span class="linenos">2228</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OFF&quot;</span><span class="p">):</span>
</span><span id="L-2229"><a href="#L-2229"><span class="linenos">2229</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="L-2230"><a href="#L-2230"><span class="linenos">2230</span></a> <span class="k">return</span> <span class="n">prop</span>
</span><span id="L-2231"><a href="#L-2231"><span class="linenos">2231</span></a>
</span><span id="L-2232"><a href="#L-2232"><span class="linenos">2232</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
</span><span id="L-2233"><a href="#L-2233"><span class="linenos">2233</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-2234"><a href="#L-2234"><span class="linenos">2234</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
</span><span id="L-2235"><a href="#L-2235"><span class="linenos">2235</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HISTORY_TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="L-2236"><a href="#L-2236"><span class="linenos">2236</span></a> <span class="n">prop</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="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
</span><span id="L-2237"><a href="#L-2237"><span class="linenos">2237</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DATA_CONSISTENCY_CHECK&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="L-2238"><a href="#L-2238"><span class="linenos">2238</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;data_consistency&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-2239"><a href="#L-2239"><span class="linenos">2239</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HISTORY_RETENTION_PERIOD&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="L-2240"><a href="#L-2240"><span class="linenos">2240</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;retention_period&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_retention_period</span><span class="p">())</span>
</span><span id="L-2241"><a href="#L-2241"><span class="linenos">2241</span></a>
</span><span id="L-2242"><a href="#L-2242"><span class="linenos">2242</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="L-2243"><a href="#L-2243"><span class="linenos">2243</span></a>
</span><span id="L-2244"><a href="#L-2244"><span class="linenos">2244</span></a> <span class="k">return</span> <span class="n">prop</span>
</span><span id="L-2245"><a href="#L-2245"><span class="linenos">2245</span></a>
</span><span id="L-2246"><a href="#L-2246"><span class="linenos">2246</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_data_deletion_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataDeletionProperty</span><span class="p">:</span>
</span><span id="L-2247"><a href="#L-2247"><span class="linenos">2247</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-2248"><a href="#L-2248"><span class="linenos">2248</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OFF&quot;</span><span class="p">)</span>
</span><span id="L-2249"><a href="#L-2249"><span class="linenos">2249</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataDeletionProperty</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">)</span>
</span><span id="L-2250"><a href="#L-2250"><span class="linenos">2250</span></a>
</span><span id="L-2251"><a href="#L-2251"><span class="linenos">2251</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-2252"><a href="#L-2252"><span class="linenos">2252</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
</span><span id="L-2253"><a href="#L-2253"><span class="linenos">2253</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FILTER_COLUMN&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="L-2254"><a href="#L-2254"><span class="linenos">2254</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;filter_column&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">())</span>
</span><span id="L-2255"><a href="#L-2255"><span class="linenos">2255</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETENTION_PERIOD&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="L-2256"><a href="#L-2256"><span class="linenos">2256</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;retention_period&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_retention_period</span><span class="p">())</span>
</span><span id="L-2257"><a href="#L-2257"><span class="linenos">2257</span></a>
</span><span id="L-2258"><a href="#L-2258"><span class="linenos">2258</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="L-2259"><a href="#L-2259"><span class="linenos">2259</span></a>
</span><span id="L-2260"><a href="#L-2260"><span class="linenos">2260</span></a> <span class="k">return</span> <span class="n">prop</span>
</span><span id="L-2261"><a href="#L-2261"><span class="linenos">2261</span></a>
</span><span id="L-2262"><a href="#L-2262"><span class="linenos">2262</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_distributed_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DistributedByProperty</span><span class="p">:</span>
</span><span id="L-2263"><a href="#L-2263"><span class="linenos">2263</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;HASH&quot;</span>
</span><span id="L-2264"><a href="#L-2264"><span class="linenos">2264</span></a> <span class="n">expressions</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">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="o">=</span> <span class="kc">None</span>
</span><span id="L-2265"><a href="#L-2265"><span class="linenos">2265</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;HASH&quot;</span><span class="p">):</span>
</span><span id="L-2266"><a href="#L-2266"><span class="linenos">2266</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span>
</span><span id="L-2267"><a href="#L-2267"><span class="linenos">2267</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;RANDOM&quot;</span><span class="p">):</span>
</span><span id="L-2268"><a href="#L-2268"><span class="linenos">2268</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;RANDOM&quot;</span>
</span><span id="L-2269"><a href="#L-2269"><span class="linenos">2269</span></a>
</span><span id="L-2270"><a href="#L-2270"><span class="linenos">2270</span></a> <span class="c1"># If the BUCKETS keyword is not present, the number of buckets is AUTO</span>
</span><span id="L-2271"><a href="#L-2271"><span class="linenos">2271</span></a> <span class="n">buckets</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 class="o">=</span> <span class="kc">None</span>
</span><span id="L-2272"><a href="#L-2272"><span class="linenos">2272</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKETS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AUTO&quot;</span><span class="p">):</span>
</span><span id="L-2273"><a href="#L-2273"><span class="linenos">2273</span></a> <span class="n">buckets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="L-2274"><a href="#L-2274"><span class="linenos">2274</span></a>
</span><span id="L-2275"><a href="#L-2275"><span class="linenos">2275</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2276"><a href="#L-2276"><span class="linenos">2276</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistributedByProperty</span><span class="p">,</span>
</span><span id="L-2277"><a href="#L-2277"><span class="linenos">2277</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-2278"><a href="#L-2278"><span class="linenos">2278</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="L-2279"><a href="#L-2279"><span class="linenos">2279</span></a> <span class="n">buckets</span><span class="o">=</span><span class="n">buckets</span><span class="p">,</span>
</span><span id="L-2280"><a href="#L-2280"><span class="linenos">2280</span></a> <span class="n">order</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(),</span>
</span><span id="L-2281"><a href="#L-2281"><span class="linenos">2281</span></a> <span class="p">)</span>
</span><span id="L-2282"><a href="#L-2282"><span class="linenos">2282</span></a>
</span><span id="L-2283"><a href="#L-2283"><span class="linenos">2283</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_composite_key_property</span><span class="p">(</span><span class="bp">self</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">E</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="L-2284"><a href="#L-2284"><span class="linenos">2284</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
</span><span id="L-2285"><a href="#L-2285"><span class="linenos">2285</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
</span><span id="L-2286"><a href="#L-2286"><span class="linenos">2286</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">expr_type</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-2287"><a href="#L-2287"><span class="linenos">2287</span></a>
</span><span id="L-2288"><a href="#L-2288"><span class="linenos">2288</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_with_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">|</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><span id="L-2289"><a href="#L-2289"><span class="linenos">2289</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;SYSTEM_VERSIONING&quot;</span><span class="p">):</span>
</span><span id="L-2290"><a href="#L-2290"><span class="linenos">2290</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_system_versioning_property</span><span class="p">(</span><span class="n">with_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2291"><a href="#L-2291"><span class="linenos">2291</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-2292"><a href="#L-2292"><span class="linenos">2292</span></a> <span class="k">return</span> <span class="n">prop</span>
</span><span id="L-2293"><a href="#L-2293"><span class="linenos">2293</span></a>
</span><span id="L-2294"><a href="#L-2294"><span class="linenos">2294</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-2295"><a href="#L-2295"><span class="linenos">2295</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_properties</span><span class="p">()</span>
</span><span id="L-2296"><a href="#L-2296"><span class="linenos">2296</span></a>
</span><span id="L-2297"><a href="#L-2297"><span class="linenos">2297</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;JOURNAL&quot;</span><span class="p">):</span>
</span><span id="L-2298"><a href="#L-2298"><span class="linenos">2298</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withjournaltable</span><span class="p">()</span>
</span><span id="L-2299"><a href="#L-2299"><span class="linenos">2299</span></a>
</span><span id="L-2300"><a href="#L-2300"><span class="linenos">2300</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">VIEW_ATTRIBUTES</span><span class="p">):</span>
</span><span id="L-2301"><a href="#L-2301"><span class="linenos">2301</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ViewAttributeProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-2302"><a href="#L-2302"><span class="linenos">2302</span></a>
</span><span id="L-2303"><a href="#L-2303"><span class="linenos">2303</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DATA&quot;</span><span class="p">):</span>
</span><span id="L-2304"><a href="#L-2304"><span class="linenos">2304</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withdata</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-2305"><a href="#L-2305"><span class="linenos">2305</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">):</span>
</span><span id="L-2306"><a href="#L-2306"><span class="linenos">2306</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withdata</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2307"><a href="#L-2307"><span class="linenos">2307</span></a>
</span><span id="L-2308"><a href="#L-2308"><span class="linenos">2308</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SERDE_PROPERTIES</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-2309"><a href="#L-2309"><span class="linenos">2309</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_serde_properties</span><span class="p">(</span><span class="n">with_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2310"><a href="#L-2310"><span class="linenos">2310</span></a>
</span><span id="L-2311"><a href="#L-2311"><span class="linenos">2311</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">):</span>
</span><span id="L-2312"><a href="#L-2312"><span class="linenos">2312</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2313"><a href="#L-2313"><span class="linenos">2313</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithSchemaBindingProperty</span><span class="p">,</span>
</span><span id="L-2314"><a href="#L-2314"><span class="linenos">2314</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SCHEMA_BINDING_OPTIONS</span><span class="p">),</span>
</span><span id="L-2315"><a href="#L-2315"><span class="linenos">2315</span></a> <span class="p">)</span>
</span><span id="L-2316"><a href="#L-2316"><span class="linenos">2316</span></a>
</span><span id="L-2317"><a href="#L-2317"><span class="linenos">2317</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROCEDURE_OPTIONS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-2318"><a href="#L-2318"><span class="linenos">2318</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2319"><a href="#L-2319"><span class="linenos">2319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithProcedureOptions</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_procedure_option</span><span class="p">)</span>
</span><span id="L-2320"><a href="#L-2320"><span class="linenos">2320</span></a> <span class="p">)</span>
</span><span id="L-2321"><a href="#L-2321"><span class="linenos">2321</span></a>
</span><span id="L-2322"><a href="#L-2322"><span class="linenos">2322</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
</span><span id="L-2323"><a href="#L-2323"><span class="linenos">2323</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2324"><a href="#L-2324"><span class="linenos">2324</span></a>
</span><span id="L-2325"><a href="#L-2325"><span class="linenos">2325</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withisolatedloading</span><span class="p">()</span>
</span><span id="L-2326"><a href="#L-2326"><span class="linenos">2326</span></a>
</span><span id="L-2327"><a href="#L-2327"><span class="linenos">2327</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_procedure_option</span><span class="p">(</span><span class="bp">self</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="o">|</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-2328"><a href="#L-2328"><span class="linenos">2328</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;EXECUTE&quot;</span><span class="p">,</span> <span class="s2">&quot;AS&quot;</span><span class="p">):</span>
</span><span id="L-2329"><a href="#L-2329"><span class="linenos">2329</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2330"><a href="#L-2330"><span class="linenos">2330</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">,</span>
</span><span id="L-2331"><a href="#L-2331"><span class="linenos">2331</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">EXECUTE_AS_OPTIONS</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-2332"><a href="#L-2332"><span class="linenos">2332</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="L-2333"><a href="#L-2333"><span class="linenos">2333</span></a> <span class="p">)</span>
</span><span id="L-2334"><a href="#L-2334"><span class="linenos">2334</span></a>
</span><span id="L-2335"><a href="#L-2335"><span class="linenos">2335</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROCEDURE_OPTIONS</span><span class="p">)</span>
</span><span id="L-2336"><a href="#L-2336"><span class="linenos">2336</span></a>
</span><span id="L-2337"><a href="#L-2337"><span class="linenos">2337</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-view.html</span>
</span><span id="L-2338"><a href="#L-2338"><span class="linenos">2338</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_definer</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">]:</span>
</span><span id="L-2339"><a href="#L-2339"><span class="linenos">2339</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-2340"><a href="#L-2340"><span class="linenos">2340</span></a>
</span><span id="L-2341"><a href="#L-2341"><span class="linenos">2341</span></a> <span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-2342"><a href="#L-2342"><span class="linenos">2342</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">)</span>
</span><span id="L-2343"><a href="#L-2343"><span class="linenos">2343</span></a> <span class="n">host</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-2344"><a href="#L-2344"><span class="linenos">2344</span></a>
</span><span id="L-2345"><a href="#L-2345"><span class="linenos">2345</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">user</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">host</span><span class="p">:</span>
</span><span id="L-2346"><a href="#L-2346"><span class="linenos">2346</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2347"><a href="#L-2347"><span class="linenos">2347</span></a>
</span><span id="L-2348"><a href="#L-2348"><span class="linenos">2348</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">user</span><span class="si">}</span><span class="s2">@</span><span class="si">{</span><span class="n">host</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-2349"><a href="#L-2349"><span class="linenos">2349</span></a>
</span><span id="L-2350"><a href="#L-2350"><span class="linenos">2350</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_withjournaltable</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">:</span>
</span><span id="L-2351"><a href="#L-2351"><span class="linenos">2351</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="L-2352"><a href="#L-2352"><span class="linenos">2352</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-2353"><a href="#L-2353"><span class="linenos">2353</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
</span><span id="L-2354"><a href="#L-2354"><span class="linenos">2354</span></a>
</span><span id="L-2355"><a href="#L-2355"><span class="linenos">2355</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span>
</span><span id="L-2356"><a href="#L-2356"><span class="linenos">2356</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">)</span>
</span><span id="L-2357"><a href="#L-2357"><span class="linenos">2357</span></a>
</span><span id="L-2358"><a href="#L-2358"><span class="linenos">2358</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_journal</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="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">:</span>
</span><span id="L-2359"><a href="#L-2359"><span class="linenos">2359</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-2360"><a href="#L-2360"><span class="linenos">2360</span></a>
</span><span id="L-2361"><a href="#L-2361"><span class="linenos">2361</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_checksum</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">:</span>
</span><span id="L-2362"><a href="#L-2362"><span class="linenos">2362</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-2363"><a href="#L-2363"><span class="linenos">2363</span></a>
</span><span id="L-2364"><a href="#L-2364"><span class="linenos">2364</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2365"><a href="#L-2365"><span class="linenos">2365</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
</span><span id="L-2366"><a href="#L-2366"><span class="linenos">2366</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-2367"><a href="#L-2367"><span class="linenos">2367</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OFF&quot;</span><span class="p">):</span>
</span><span id="L-2368"><a href="#L-2368"><span class="linenos">2368</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-2369"><a href="#L-2369"><span class="linenos">2369</span></a>
</span><span id="L-2370"><a href="#L-2370"><span class="linenos">2370</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">))</span>
</span><span id="L-2371"><a href="#L-2371"><span class="linenos">2371</span></a>
</span><span id="L-2372"><a href="#L-2372"><span class="linenos">2372</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_cluster</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wrapped</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">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span>
</span><span id="L-2373"><a href="#L-2373"><span class="linenos">2373</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2374"><a href="#L-2374"><span class="linenos">2374</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">,</span>
</span><span id="L-2375"><a href="#L-2375"><span class="linenos">2375</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">(</span>
</span><span id="L-2376"><a href="#L-2376"><span class="linenos">2376</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">)</span>
</span><span id="L-2377"><a href="#L-2377"><span class="linenos">2377</span></a> <span class="k">if</span> <span class="n">wrapped</span>
</span><span id="L-2378"><a href="#L-2378"><span class="linenos">2378</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">)</span>
</span><span id="L-2379"><a href="#L-2379"><span class="linenos">2379</span></a> <span class="p">),</span>
</span><span id="L-2380"><a href="#L-2380"><span class="linenos">2380</span></a> <span class="p">)</span>
</span><span id="L-2381"><a href="#L-2381"><span class="linenos">2381</span></a>
</span><span id="L-2382"><a href="#L-2382"><span class="linenos">2382</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_clustered_by</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">:</span>
</span><span id="L-2383"><a href="#L-2383"><span class="linenos">2383</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span>
</span><span id="L-2384"><a href="#L-2384"><span class="linenos">2384</span></a>
</span><span id="L-2385"><a href="#L-2385"><span class="linenos">2385</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="L-2386"><a href="#L-2386"><span class="linenos">2386</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="L-2387"><a href="#L-2387"><span class="linenos">2387</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-2388"><a href="#L-2388"><span class="linenos">2388</span></a>
</span><span id="L-2389"><a href="#L-2389"><span class="linenos">2389</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SORTED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="L-2390"><a href="#L-2390"><span class="linenos">2390</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="L-2391"><a href="#L-2391"><span class="linenos">2391</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">)</span>
</span><span id="L-2392"><a href="#L-2392"><span class="linenos">2392</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-2393"><a href="#L-2393"><span class="linenos">2393</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2394"><a href="#L-2394"><span class="linenos">2394</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2395"><a href="#L-2395"><span class="linenos">2395</span></a>
</span><span id="L-2396"><a href="#L-2396"><span class="linenos">2396</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span>
</span><span id="L-2397"><a href="#L-2397"><span class="linenos">2397</span></a> <span class="n">buckets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="L-2398"><a href="#L-2398"><span class="linenos">2398</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKETS&quot;</span><span class="p">)</span>
</span><span id="L-2399"><a href="#L-2399"><span class="linenos">2399</span></a>
</span><span id="L-2400"><a href="#L-2400"><span class="linenos">2400</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2401"><a href="#L-2401"><span class="linenos">2401</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">,</span>
</span><span id="L-2402"><a href="#L-2402"><span class="linenos">2402</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-2403"><a href="#L-2403"><span class="linenos">2403</span></a> <span class="n">sorted_by</span><span class="o">=</span><span class="n">sorted_by</span><span class="p">,</span>
</span><span id="L-2404"><a href="#L-2404"><span class="linenos">2404</span></a> <span class="n">buckets</span><span class="o">=</span><span class="n">buckets</span><span class="p">,</span>
</span><span id="L-2405"><a href="#L-2405"><span class="linenos">2405</span></a> <span class="p">)</span>
</span><span id="L-2406"><a href="#L-2406"><span class="linenos">2406</span></a>
</span><span id="L-2407"><a href="#L-2407"><span class="linenos">2407</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_copy_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">]:</span>
</span><span id="L-2408"><a href="#L-2408"><span class="linenos">2408</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;GRANTS&quot;</span><span class="p">):</span>
</span><span id="L-2409"><a href="#L-2409"><span class="linenos">2409</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-2410"><a href="#L-2410"><span class="linenos">2410</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2411"><a href="#L-2411"><span class="linenos">2411</span></a>
</span><span id="L-2412"><a href="#L-2412"><span class="linenos">2412</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">)</span>
</span><span id="L-2413"><a href="#L-2413"><span class="linenos">2413</span></a>
</span><span id="L-2414"><a href="#L-2414"><span class="linenos">2414</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_freespace</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">:</span>
</span><span id="L-2415"><a href="#L-2415"><span class="linenos">2415</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-2416"><a href="#L-2416"><span class="linenos">2416</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2417"><a href="#L-2417"><span class="linenos">2417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">(),</span> <span class="n">percent</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">)</span>
</span><span id="L-2418"><a href="#L-2418"><span class="linenos">2418</span></a> <span class="p">)</span>
</span><span id="L-2419"><a href="#L-2419"><span class="linenos">2419</span></a>
</span><span id="L-2420"><a href="#L-2420"><span class="linenos">2420</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_mergeblockratio</span><span class="p">(</span>
</span><span id="L-2421"><a href="#L-2421"><span class="linenos">2421</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">no</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="n">default</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-2422"><a href="#L-2422"><span class="linenos">2422</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span>
</span><span id="L-2423"><a href="#L-2423"><span class="linenos">2423</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">):</span>
</span><span id="L-2424"><a href="#L-2424"><span class="linenos">2424</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2425"><a href="#L-2425"><span class="linenos">2425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
</span><span id="L-2426"><a href="#L-2426"><span class="linenos">2426</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">(),</span>
</span><span id="L-2427"><a href="#L-2427"><span class="linenos">2427</span></a> <span class="n">percent</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">),</span>
</span><span id="L-2428"><a href="#L-2428"><span class="linenos">2428</span></a> <span class="p">)</span>
</span><span id="L-2429"><a href="#L-2429"><span class="linenos">2429</span></a>
</span><span id="L-2430"><a href="#L-2430"><span class="linenos">2430</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
</span><span id="L-2431"><a href="#L-2431"><span class="linenos">2431</span></a>
</span><span id="L-2432"><a href="#L-2432"><span class="linenos">2432</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_datablocksize</span><span class="p">(</span>
</span><span id="L-2433"><a href="#L-2433"><span class="linenos">2433</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-2434"><a href="#L-2434"><span class="linenos">2434</span></a> <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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-2435"><a href="#L-2435"><span class="linenos">2435</span></a> <span class="n">minimum</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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-2436"><a href="#L-2436"><span class="linenos">2436</span></a> <span class="n">maximum</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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-2437"><a href="#L-2437"><span class="linenos">2437</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">:</span>
</span><span id="L-2438"><a href="#L-2438"><span class="linenos">2438</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-2439"><a href="#L-2439"><span class="linenos">2439</span></a> <span class="n">size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="L-2440"><a href="#L-2440"><span class="linenos">2440</span></a>
</span><span id="L-2441"><a href="#L-2441"><span class="linenos">2441</span></a> <span class="n">units</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2442"><a href="#L-2442"><span class="linenos">2442</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;BYTES&quot;</span><span class="p">,</span> <span class="s2">&quot;KBYTES&quot;</span><span class="p">,</span> <span class="s2">&quot;KILOBYTES&quot;</span><span class="p">)):</span>
</span><span id="L-2443"><a href="#L-2443"><span class="linenos">2443</span></a> <span class="n">units</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-2444"><a href="#L-2444"><span class="linenos">2444</span></a>
</span><span id="L-2445"><a href="#L-2445"><span class="linenos">2445</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2446"><a href="#L-2446"><span class="linenos">2446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">,</span>
</span><span id="L-2447"><a href="#L-2447"><span class="linenos">2447</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
</span><span id="L-2448"><a href="#L-2448"><span class="linenos">2448</span></a> <span class="n">units</span><span class="o">=</span><span class="n">units</span><span class="p">,</span>
</span><span id="L-2449"><a href="#L-2449"><span class="linenos">2449</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
</span><span id="L-2450"><a href="#L-2450"><span class="linenos">2450</span></a> <span class="n">minimum</span><span class="o">=</span><span class="n">minimum</span><span class="p">,</span>
</span><span id="L-2451"><a href="#L-2451"><span class="linenos">2451</span></a> <span class="n">maximum</span><span class="o">=</span><span class="n">maximum</span><span class="p">,</span>
</span><span id="L-2452"><a href="#L-2452"><span class="linenos">2452</span></a> <span class="p">)</span>
</span><span id="L-2453"><a href="#L-2453"><span class="linenos">2453</span></a>
</span><span id="L-2454"><a href="#L-2454"><span class="linenos">2454</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_blockcompression</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">:</span>
</span><span id="L-2455"><a href="#L-2455"><span class="linenos">2455</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-2456"><a href="#L-2456"><span class="linenos">2456</span></a> <span class="n">always</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
</span><span id="L-2457"><a href="#L-2457"><span class="linenos">2457</span></a> <span class="n">manual</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MANUAL&quot;</span><span class="p">)</span>
</span><span id="L-2458"><a href="#L-2458"><span class="linenos">2458</span></a> <span class="n">never</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NEVER&quot;</span><span class="p">)</span>
</span><span id="L-2459"><a href="#L-2459"><span class="linenos">2459</span></a> <span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFAULT&quot;</span><span class="p">)</span>
</span><span id="L-2460"><a href="#L-2460"><span class="linenos">2460</span></a>
</span><span id="L-2461"><a href="#L-2461"><span class="linenos">2461</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2462"><a href="#L-2462"><span class="linenos">2462</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AUTOTEMP&quot;</span><span class="p">):</span>
</span><span id="L-2463"><a href="#L-2463"><span class="linenos">2463</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
</span><span id="L-2464"><a href="#L-2464"><span class="linenos">2464</span></a>
</span><span id="L-2465"><a href="#L-2465"><span class="linenos">2465</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2466"><a href="#L-2466"><span class="linenos">2466</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">,</span>
</span><span id="L-2467"><a href="#L-2467"><span class="linenos">2467</span></a> <span class="n">always</span><span class="o">=</span><span class="n">always</span><span class="p">,</span>
</span><span id="L-2468"><a href="#L-2468"><span class="linenos">2468</span></a> <span class="n">manual</span><span class="o">=</span><span class="n">manual</span><span class="p">,</span>
</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a> <span class="n">never</span><span class="o">=</span><span class="n">never</span><span class="p">,</span>
</span><span id="L-2470"><a href="#L-2470"><span class="linenos">2470</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
</span><span id="L-2471"><a href="#L-2471"><span class="linenos">2471</span></a> <span class="n">autotemp</span><span class="o">=</span><span class="n">autotemp</span><span class="p">,</span>
</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</span></a> <span class="p">)</span>
</span><span id="L-2473"><a href="#L-2473"><span class="linenos">2473</span></a>
</span><span id="L-2474"><a href="#L-2474"><span class="linenos">2474</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_withisolatedloading</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">]:</span>
</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-2476"><a href="#L-2476"><span class="linenos">2476</span></a> <span class="n">no</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">)</span>
</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONCURRENT&quot;</span><span class="p">)</span>
</span><span id="L-2478"><a href="#L-2478"><span class="linenos">2478</span></a>
</span><span id="L-2479"><a href="#L-2479"><span class="linenos">2479</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ISOLATED&quot;</span><span class="p">,</span> <span class="s2">&quot;LOADING&quot;</span><span class="p">):</span>
</span><span id="L-2480"><a href="#L-2480"><span class="linenos">2480</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-2481"><a href="#L-2481"><span class="linenos">2481</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2482"><a href="#L-2482"><span class="linenos">2482</span></a>
</span><span id="L-2483"><a href="#L-2483"><span class="linenos">2483</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ISOLATED_LOADING_OPTIONS</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-2484"><a href="#L-2484"><span class="linenos">2484</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2485"><a href="#L-2485"><span class="linenos">2485</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">concurrent</span><span class="o">=</span><span class="n">concurrent</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="n">target</span>
</span><span id="L-2486"><a href="#L-2486"><span class="linenos">2486</span></a> <span class="p">)</span>
</span><span id="L-2487"><a href="#L-2487"><span class="linenos">2487</span></a>
</span><span id="L-2488"><a href="#L-2488"><span class="linenos">2488</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_locking</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">:</span>
</span><span id="L-2489"><a href="#L-2489"><span class="linenos">2489</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">):</span>
</span><span id="L-2490"><a href="#L-2490"><span class="linenos">2490</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;TABLE&quot;</span>
</span><span id="L-2491"><a href="#L-2491"><span class="linenos">2491</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">):</span>
</span><span id="L-2492"><a href="#L-2492"><span class="linenos">2492</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;VIEW&quot;</span>
</span><span id="L-2493"><a href="#L-2493"><span class="linenos">2493</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">):</span>
</span><span id="L-2494"><a href="#L-2494"><span class="linenos">2494</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ROW&quot;</span>
</span><span id="L-2495"><a href="#L-2495"><span class="linenos">2495</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DATABASE&quot;</span><span class="p">):</span>
</span><span id="L-2496"><a href="#L-2496"><span class="linenos">2496</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;DATABASE&quot;</span>
</span><span id="L-2497"><a href="#L-2497"><span class="linenos">2497</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2499"><a href="#L-2499"><span class="linenos">2499</span></a>
</span><span id="L-2500"><a href="#L-2500"><span class="linenos">2500</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;DATABASE&quot;</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-2501"><a href="#L-2501"><span class="linenos">2501</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
</span><span id="L-2502"><a href="#L-2502"><span class="linenos">2502</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2503"><a href="#L-2503"><span class="linenos">2503</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2504"><a href="#L-2504"><span class="linenos">2504</span></a>
</span><span id="L-2505"><a href="#L-2505"><span class="linenos">2505</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
</span><span id="L-2506"><a href="#L-2506"><span class="linenos">2506</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;FOR&quot;</span>
</span><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
</span><span id="L-2508"><a href="#L-2508"><span class="linenos">2508</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;IN&quot;</span>
</span><span id="L-2509"><a href="#L-2509"><span class="linenos">2509</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2510"><a href="#L-2510"><span class="linenos">2510</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2511"><a href="#L-2511"><span class="linenos">2511</span></a>
</span><span id="L-2512"><a href="#L-2512"><span class="linenos">2512</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ACCESS&quot;</span><span class="p">):</span>
</span><span id="L-2513"><a href="#L-2513"><span class="linenos">2513</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;ACCESS&quot;</span>
</span><span id="L-2514"><a href="#L-2514"><span class="linenos">2514</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;EXCL&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUSIVE&quot;</span><span class="p">)):</span>
</span><span id="L-2515"><a href="#L-2515"><span class="linenos">2515</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;EXCLUSIVE&quot;</span>
</span><span id="L-2516"><a href="#L-2516"><span class="linenos">2516</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SHARE&quot;</span><span class="p">):</span>
</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;SHARE&quot;</span>
</span><span id="L-2518"><a href="#L-2518"><span class="linenos">2518</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;READ&quot;</span><span class="p">):</span>
</span><span id="L-2519"><a href="#L-2519"><span class="linenos">2519</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;READ&quot;</span>
</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WRITE&quot;</span><span class="p">):</span>
</span><span id="L-2521"><a href="#L-2521"><span class="linenos">2521</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;WRITE&quot;</span>
</span><span id="L-2522"><a href="#L-2522"><span class="linenos">2522</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHECKSUM&quot;</span><span class="p">):</span>
</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;CHECKSUM&quot;</span>
</span><span id="L-2524"><a href="#L-2524"><span class="linenos">2524</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2525"><a href="#L-2525"><span class="linenos">2525</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</span></a>
</span><span id="L-2527"><a href="#L-2527"><span class="linenos">2527</span></a> <span class="n">override</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OVERRIDE&quot;</span><span class="p">)</span>
</span><span id="L-2528"><a href="#L-2528"><span class="linenos">2528</span></a>
</span><span id="L-2529"><a href="#L-2529"><span class="linenos">2529</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2530"><a href="#L-2530"><span class="linenos">2530</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">,</span>
</span><span id="L-2531"><a href="#L-2531"><span class="linenos">2531</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-2532"><a href="#L-2532"><span class="linenos">2532</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="L-2533"><a href="#L-2533"><span class="linenos">2533</span></a> <span class="n">for_or_in</span><span class="o">=</span><span class="n">for_or_in</span><span class="p">,</span>
</span><span id="L-2534"><a href="#L-2534"><span class="linenos">2534</span></a> <span class="n">lock_type</span><span class="o">=</span><span class="n">lock_type</span><span class="p">,</span>
</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</span></a> <span class="n">override</span><span class="o">=</span><span class="n">override</span><span class="p">,</span>
</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</span></a> <span class="p">)</span>
</span><span id="L-2537"><a href="#L-2537"><span class="linenos">2537</span></a>
</span><span id="L-2538"><a href="#L-2538"><span class="linenos">2538</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partition_by</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-2539"><a href="#L-2539"><span class="linenos">2539</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">):</span>
</span><span id="L-2540"><a href="#L-2540"><span class="linenos">2540</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span>
</span><span id="L-2541"><a href="#L-2541"><span class="linenos">2541</span></a> <span class="k">return</span> <span class="p">[]</span>
</span><span id="L-2542"><a href="#L-2542"><span class="linenos">2542</span></a>
</span><span id="L-2543"><a href="#L-2543"><span class="linenos">2543</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partition_bound_spec</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionBoundSpec</span><span class="p">:</span>
</span><span id="L-2544"><a href="#L-2544"><span class="linenos">2544</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partition_bound_expr</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-2545"><a href="#L-2545"><span class="linenos">2545</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</span><span class="p">):</span>
</span><span id="L-2546"><a href="#L-2546"><span class="linenos">2546</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</span><span class="p">)</span>
</span><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAXVALUE&quot;</span><span class="p">):</span>
</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAXVALUE&quot;</span><span class="p">)</span>
</span><span id="L-2549"><a href="#L-2549"><span class="linenos">2549</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-2550"><a href="#L-2550"><span class="linenos">2550</span></a>
</span><span id="L-2551"><a href="#L-2551"><span class="linenos">2551</span></a> <span class="n">this</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="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="o">=</span> <span class="kc">None</span>
</span><span id="L-2552"><a href="#L-2552"><span class="linenos">2552</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2553"><a href="#L-2553"><span class="linenos">2553</span></a> <span class="n">from_expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2554"><a href="#L-2554"><span class="linenos">2554</span></a> <span class="n">to_expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2555"><a href="#L-2555"><span class="linenos">2555</span></a>
</span><span id="L-2556"><a href="#L-2556"><span class="linenos">2556</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
</span><span id="L-2557"><a href="#L-2557"><span class="linenos">2557</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
</span><span id="L-2559"><a href="#L-2559"><span class="linenos">2559</span></a> <span class="n">from_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="n">_parse_partition_bound_expr</span><span class="p">)</span>
</span><span id="L-2560"><a href="#L-2560"><span class="linenos">2560</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
</span><span id="L-2561"><a href="#L-2561"><span class="linenos">2561</span></a> <span class="n">to_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="n">_parse_partition_bound_expr</span><span class="p">)</span>
</span><span id="L-2562"><a href="#L-2562"><span class="linenos">2562</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;MODULUS&quot;</span><span class="p">):</span>
</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="L-2564"><a href="#L-2564"><span class="linenos">2564</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">,</span> <span class="s2">&quot;REMAINDER&quot;</span><span class="p">)</span>
</span><span id="L-2565"><a href="#L-2565"><span class="linenos">2565</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="L-2566"><a href="#L-2566"><span class="linenos">2566</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-2567"><a href="#L-2567"><span class="linenos">2567</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2568"><a href="#L-2568"><span class="linenos">2568</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Failed to parse partition bound spec.&quot;</span><span class="p">)</span>
</span><span id="L-2569"><a href="#L-2569"><span class="linenos">2569</span></a>
</span><span id="L-2570"><a href="#L-2570"><span class="linenos">2570</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2571"><a href="#L-2571"><span class="linenos">2571</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionBoundSpec</span><span class="p">,</span>
</span><span id="L-2572"><a href="#L-2572"><span class="linenos">2572</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-2573"><a href="#L-2573"><span class="linenos">2573</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="L-2574"><a href="#L-2574"><span class="linenos">2574</span></a> <span class="n">from_expressions</span><span class="o">=</span><span class="n">from_expressions</span><span class="p">,</span>
</span><span id="L-2575"><a href="#L-2575"><span class="linenos">2575</span></a> <span class="n">to_expressions</span><span class="o">=</span><span class="n">to_expressions</span><span class="p">,</span>
</span><span id="L-2576"><a href="#L-2576"><span class="linenos">2576</span></a> <span class="p">)</span>
</span><span id="L-2577"><a href="#L-2577"><span class="linenos">2577</span></a>
</span><span id="L-2578"><a href="#L-2578"><span class="linenos">2578</span></a> <span class="c1"># https://www.postgresql.org/docs/current/sql-createtable.html</span>
</span><span id="L-2579"><a href="#L-2579"><span class="linenos">2579</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partitioned_of</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">PartitionedOfProperty</span><span class="p">]:</span>
</span><span id="L-2580"><a href="#L-2580"><span class="linenos">2580</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OF&quot;</span><span class="p">):</span>
</span><span id="L-2581"><a href="#L-2581"><span class="linenos">2581</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-2582"><a href="#L-2582"><span class="linenos">2582</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2583"><a href="#L-2583"><span class="linenos">2583</span></a>
</span><span id="L-2584"><a href="#L-2584"><span class="linenos">2584</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2585"><a href="#L-2585"><span class="linenos">2585</span></a>
</span><span id="L-2586"><a href="#L-2586"><span class="linenos">2586</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="L-2587"><a href="#L-2587"><span class="linenos">2587</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionBoundSpec</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="s2">&quot;DEFAULT&quot;</span><span class="p">)</span>
</span><span id="L-2588"><a href="#L-2588"><span class="linenos">2588</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUES&quot;</span><span class="p">):</span>
</span><span id="L-2589"><a href="#L-2589"><span class="linenos">2589</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_bound_spec</span><span class="p">()</span>
</span><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2591"><a href="#L-2591"><span class="linenos">2591</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting either DEFAULT or FOR VALUES clause.&quot;</span><span class="p">)</span>
</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a>
</span><span id="L-2593"><a href="#L-2593"><span class="linenos">2593</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedOfProperty</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">expression</span><span class="p">)</span>
</span><span id="L-2594"><a href="#L-2594"><span class="linenos">2594</span></a>
</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partitioned_by</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span>
</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">,</span>
</span><span id="L-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()),</span>
</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</span></a> <span class="p">)</span>
</span><span id="L-2601"><a href="#L-2601"><span class="linenos">2601</span></a>
</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_withdata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">:</span>
</span><span id="L-2603"><a href="#L-2603"><span class="linenos">2603</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
</span><span id="L-2604"><a href="#L-2604"><span class="linenos">2604</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
</span><span id="L-2606"><a href="#L-2606"><span class="linenos">2606</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-2607"><a href="#L-2607"><span class="linenos">2607</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2608"><a href="#L-2608"><span class="linenos">2608</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a>
</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">statistics</span><span class="o">=</span><span class="n">statistics</span><span class="p">)</span>
</span><span id="L-2611"><a href="#L-2611"><span class="linenos">2611</span></a>
</span><span id="L-2612"><a href="#L-2612"><span class="linenos">2612</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_contains_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">]:</span>
</span><span id="L-2613"><a href="#L-2613"><span class="linenos">2613</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SQL&quot;</span><span class="p">):</span>
</span><span id="L-2614"><a href="#L-2614"><span class="linenos">2614</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;CONTAINS SQL&quot;</span><span class="p">)</span>
</span><span id="L-2615"><a href="#L-2615"><span class="linenos">2615</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2616"><a href="#L-2616"><span class="linenos">2616</span></a>
</span><span id="L-2617"><a href="#L-2617"><span class="linenos">2617</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_modifies_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">]:</span>
</span><span id="L-2618"><a href="#L-2618"><span class="linenos">2618</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SQL&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">):</span>
</span><span id="L-2619"><a href="#L-2619"><span class="linenos">2619</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;MODIFIES SQL DATA&quot;</span><span class="p">)</span>
</span><span id="L-2620"><a href="#L-2620"><span class="linenos">2620</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2621"><a href="#L-2621"><span class="linenos">2621</span></a>
</span><span id="L-2622"><a href="#L-2622"><span class="linenos">2622</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_no_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-2623"><a href="#L-2623"><span class="linenos">2623</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PRIMARY&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">):</span>
</span><span id="L-2624"><a href="#L-2624"><span class="linenos">2624</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">()</span>
</span><span id="L-2625"><a href="#L-2625"><span class="linenos">2625</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SQL&quot;</span><span class="p">):</span>
</span><span id="L-2626"><a href="#L-2626"><span class="linenos">2626</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;NO SQL&quot;</span><span class="p">)</span>
</span><span id="L-2627"><a href="#L-2627"><span class="linenos">2627</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</span></a>
</span><span id="L-2629"><a href="#L-2629"><span class="linenos">2629</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_on_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-2630"><a href="#L-2630"><span class="linenos">2630</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COMMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;PRESERVE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
</span><span id="L-2631"><a href="#L-2631"><span class="linenos">2631</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">()</span>
</span><span id="L-2632"><a href="#L-2632"><span class="linenos">2632</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COMMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;DELETE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
</span><span id="L-2633"><a href="#L-2633"><span class="linenos">2633</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">(</span><span class="n">delete</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2634"><a href="#L-2634"><span class="linenos">2634</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()))</span>
</span><span id="L-2635"><a href="#L-2635"><span class="linenos">2635</span></a>
</span><span id="L-2636"><a href="#L-2636"><span class="linenos">2636</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_reads_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">]:</span>
</span><span id="L-2637"><a href="#L-2637"><span class="linenos">2637</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SQL&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">):</span>
</span><span id="L-2638"><a href="#L-2638"><span class="linenos">2638</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;READS SQL DATA&quot;</span><span class="p">)</span>
</span><span id="L-2639"><a href="#L-2639"><span class="linenos">2639</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2640"><a href="#L-2640"><span class="linenos">2640</span></a>
</span><span id="L-2641"><a href="#L-2641"><span class="linenos">2641</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_distkey</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span>
</span><span id="L-2642"><a href="#L-2642"><span class="linenos">2642</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">))</span>
</span><span id="L-2643"><a href="#L-2643"><span class="linenos">2643</span></a>
</span><span id="L-2644"><a href="#L-2644"><span class="linenos">2644</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_create_like</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">]:</span>
</span><span id="L-2645"><a href="#L-2645"><span class="linenos">2645</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2646"><a href="#L-2646"><span class="linenos">2646</span></a>
</span><span id="L-2647"><a href="#L-2647"><span class="linenos">2647</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-2648"><a href="#L-2648"><span class="linenos">2648</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;INCLUDING&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUDING&quot;</span><span class="p">)):</span>
</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a>
</span><span id="L-2651"><a href="#L-2651"><span class="linenos">2651</span></a> <span class="n">id_var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-2652"><a href="#L-2652"><span class="linenos">2652</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">id_var</span><span class="p">:</span>
</span><span id="L-2653"><a href="#L-2653"><span class="linenos">2653</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2654"><a href="#L-2654"><span class="linenos">2654</span></a>
</span><span id="L-2655"><a href="#L-2655"><span class="linenos">2655</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="L-2656"><a href="#L-2656"><span class="linenos">2656</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Property</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">value</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">id_var</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-2657"><a href="#L-2657"><span class="linenos">2657</span></a> <span class="p">)</span>
</span><span id="L-2658"><a href="#L-2658"><span class="linenos">2658</span></a>
</span><span id="L-2659"><a href="#L-2659"><span class="linenos">2659</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
</span><span id="L-2660"><a href="#L-2660"><span class="linenos">2660</span></a>
</span><span id="L-2661"><a href="#L-2661"><span class="linenos">2661</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_sortkey</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">compound</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">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span>
</span><span id="L-2662"><a href="#L-2662"><span class="linenos">2662</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2663"><a href="#L-2663"><span class="linenos">2663</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</span>
</span><span id="L-2664"><a href="#L-2664"><span class="linenos">2664</span></a> <span class="p">)</span>
</span><span id="L-2665"><a href="#L-2665"><span class="linenos">2665</span></a>
</span><span id="L-2666"><a href="#L-2666"><span class="linenos">2666</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_character_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</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">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span>
</span><span id="L-2667"><a href="#L-2667"><span class="linenos">2667</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-2668"><a href="#L-2668"><span class="linenos">2668</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2669"><a href="#L-2669"><span class="linenos">2669</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">(),</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span>
</span><span id="L-2670"><a href="#L-2670"><span class="linenos">2670</span></a> <span class="p">)</span>
</span><span id="L-2671"><a href="#L-2671"><span class="linenos">2671</span></a>
</span><span id="L-2672"><a href="#L-2672"><span class="linenos">2672</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_remote_with_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">RemoteWithConnectionModelProperty</span><span class="p">:</span>
</span><span id="L-2673"><a href="#L-2673"><span class="linenos">2673</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;CONNECTION&quot;</span><span class="p">)</span>
</span><span id="L-2674"><a href="#L-2674"><span class="linenos">2674</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RemoteWithConnectionModelProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
</span><span id="L-2676"><a href="#L-2676"><span class="linenos">2676</span></a> <span class="p">)</span>
</span><span id="L-2677"><a href="#L-2677"><span class="linenos">2677</span></a>
</span><span id="L-2678"><a href="#L-2678"><span class="linenos">2678</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_returns</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span>
</span><span id="L-2679"><a href="#L-2679"><span class="linenos">2679</span></a> <span class="n">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="p">]</span>
</span><span id="L-2680"><a href="#L-2680"><span class="linenos">2680</span></a> <span class="n">null</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2681"><a href="#L-2681"><span class="linenos">2681</span></a> <span class="n">is_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</span></a>
</span><span id="L-2683"><a href="#L-2683"><span class="linenos">2683</span></a> <span class="k">if</span> <span class="n">is_table</span><span class="p">:</span>
</span><span id="L-2684"><a href="#L-2684"><span class="linenos">2684</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
</span><span id="L-2685"><a href="#L-2685"><span class="linenos">2685</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2686"><a href="#L-2686"><span class="linenos">2686</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span>
</span><span id="L-2687"><a href="#L-2687"><span class="linenos">2687</span></a> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
</span><span id="L-2688"><a href="#L-2688"><span class="linenos">2688</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">),</span>
</span><span id="L-2689"><a href="#L-2689"><span class="linenos">2689</span></a> <span class="p">)</span>
</span><span id="L-2690"><a href="#L-2690"><span class="linenos">2690</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
</span><span id="L-2691"><a href="#L-2691"><span class="linenos">2691</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting &gt;&quot;</span><span class="p">)</span>
</span><span id="L-2692"><a href="#L-2692"><span class="linenos">2692</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2693"><a href="#L-2693"><span class="linenos">2693</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</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="s2">&quot;TABLE&quot;</span><span class="p">))</span>
</span><span id="L-2694"><a href="#L-2694"><span class="linenos">2694</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;INPUT&quot;</span><span class="p">):</span>
</span><span id="L-2695"><a href="#L-2695"><span class="linenos">2695</span></a> <span class="n">null</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-2696"><a href="#L-2696"><span class="linenos">2696</span></a> <span class="n">value</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2697"><a href="#L-2697"><span class="linenos">2697</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2698"><a href="#L-2698"><span class="linenos">2698</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</span></a>
</span><span id="L-2700"><a href="#L-2700"><span class="linenos">2700</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="n">is_table</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="n">null</span><span class="p">)</span>
</span><span id="L-2701"><a href="#L-2701"><span class="linenos">2701</span></a>
</span><span id="L-2702"><a href="#L-2702"><span class="linenos">2702</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_describe</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Describe</span><span class="p">:</span>
</span><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-2704"><a href="#L-2704"><span class="linenos">2704</span></a> <span class="n">style</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">DESCRIBE_STYLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-2705"><a href="#L-2705"><span class="linenos">2705</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
</span><span id="L-2706"><a href="#L-2706"><span class="linenos">2706</span></a> <span class="n">style</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2707"><a href="#L-2707"><span class="linenos">2707</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-2708"><a href="#L-2708"><span class="linenos">2708</span></a>
</span><span id="L-2709"><a href="#L-2709"><span class="linenos">2709</span></a> <span class="nb">format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</span></a>
</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-2712"><a href="#L-2712"><span class="linenos">2712</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="L-2713"><a href="#L-2713"><span class="linenos">2713</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2714"><a href="#L-2714"><span class="linenos">2714</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2715"><a href="#L-2715"><span class="linenos">2715</span></a>
</span><span id="L-2716"><a href="#L-2716"><span class="linenos">2716</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
</span><span id="L-2717"><a href="#L-2717"><span class="linenos">2717</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-2718"><a href="#L-2718"><span class="linenos">2718</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">()</span>
</span><span id="L-2719"><a href="#L-2719"><span class="linenos">2719</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Describe</span><span class="p">,</span>
</span><span id="L-2721"><a href="#L-2721"><span class="linenos">2721</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</span></a> <span class="n">style</span><span class="o">=</span><span class="n">style</span><span class="p">,</span>
</span><span id="L-2723"><a href="#L-2723"><span class="linenos">2723</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-2725"><a href="#L-2725"><span class="linenos">2725</span></a> <span class="n">partition</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</span></a> <span class="nb">format</span><span class="o">=</span><span class="nb">format</span><span class="p">,</span>
</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <span class="p">)</span>
</span><span id="L-2728"><a href="#L-2728"><span class="linenos">2728</span></a>
</span><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_multitable_inserts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comments</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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MultitableInserts</span><span class="p">:</span>
</span><span id="L-2730"><a href="#L-2730"><span class="linenos">2730</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-2731"><a href="#L-2731"><span class="linenos">2731</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-2732"><a href="#L-2732"><span class="linenos">2732</span></a>
</span><span id="L-2733"><a href="#L-2733"><span class="linenos">2733</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">parse_conditional_insert</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">exp</span><span class="o">.</span><span class="n">ConditionalInsert</span><span class="p">]:</span>
</span><span id="L-2734"><a href="#L-2734"><span class="linenos">2734</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
</span><span id="L-2735"><a href="#L-2735"><span class="linenos">2735</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_disjunction</span><span class="p">()</span>
</span><span id="L-2736"><a href="#L-2736"><span class="linenos">2736</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
</span><span id="L-2737"><a href="#L-2737"><span class="linenos">2737</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2738"><a href="#L-2738"><span class="linenos">2738</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2739"><a href="#L-2739"><span class="linenos">2739</span></a>
</span><span id="L-2740"><a href="#L-2740"><span class="linenos">2740</span></a> <span class="n">else_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">)</span>
</span><span id="L-2741"><a href="#L-2741"><span class="linenos">2741</span></a>
</span><span id="L-2742"><a href="#L-2742"><span class="linenos">2742</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
</span><span id="L-2743"><a href="#L-2743"><span class="linenos">2743</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2744"><a href="#L-2744"><span class="linenos">2744</span></a>
</span><span id="L-2745"><a href="#L-2745"><span class="linenos">2745</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2746"><a href="#L-2746"><span class="linenos">2746</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ConditionalInsert</span><span class="p">,</span>
</span><span id="L-2747"><a href="#L-2747"><span class="linenos">2747</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2748"><a href="#L-2748"><span class="linenos">2748</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
</span><span id="L-2749"><a href="#L-2749"><span class="linenos">2749</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-2750"><a href="#L-2750"><span class="linenos">2750</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">(),</span>
</span><span id="L-2751"><a href="#L-2751"><span class="linenos">2751</span></a> <span class="p">),</span>
</span><span id="L-2752"><a href="#L-2752"><span class="linenos">2752</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="L-2753"><a href="#L-2753"><span class="linenos">2753</span></a> <span class="n">else_</span><span class="o">=</span><span class="n">else_</span><span class="p">,</span>
</span><span id="L-2754"><a href="#L-2754"><span class="linenos">2754</span></a> <span class="p">)</span>
</span><span id="L-2755"><a href="#L-2755"><span class="linenos">2755</span></a>
</span><span id="L-2756"><a href="#L-2756"><span class="linenos">2756</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">parse_conditional_insert</span><span class="p">()</span>
</span><span id="L-2757"><a href="#L-2757"><span class="linenos">2757</span></a> <span class="k">while</span> <span class="n">expression</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-2758"><a href="#L-2758"><span class="linenos">2758</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-2759"><a href="#L-2759"><span class="linenos">2759</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">parse_conditional_insert</span><span class="p">()</span>
</span><span id="L-2760"><a href="#L-2760"><span class="linenos">2760</span></a>
</span><span id="L-2761"><a href="#L-2761"><span class="linenos">2761</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2762"><a href="#L-2762"><span class="linenos">2762</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MultitableInserts</span><span class="p">,</span>
</span><span id="L-2763"><a href="#L-2763"><span class="linenos">2763</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="L-2764"><a href="#L-2764"><span class="linenos">2764</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="L-2765"><a href="#L-2765"><span class="linenos">2765</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-2766"><a href="#L-2766"><span class="linenos">2766</span></a> <span class="n">source</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
</span><span id="L-2767"><a href="#L-2767"><span class="linenos">2767</span></a> <span class="p">)</span>
</span><span id="L-2768"><a href="#L-2768"><span class="linenos">2768</span></a>
</span><span id="L-2769"><a href="#L-2769"><span class="linenos">2769</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_insert</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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">Insert</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">MultitableInserts</span><span class="p">]:</span>
</span><span id="L-2770"><a href="#L-2770"><span class="linenos">2770</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-2771"><a href="#L-2771"><span class="linenos">2771</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint</span><span class="p">()</span>
</span><span id="L-2772"><a href="#L-2772"><span class="linenos">2772</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">)</span>
</span><span id="L-2773"><a href="#L-2773"><span class="linenos">2773</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">)</span>
</span><span id="L-2774"><a href="#L-2774"><span class="linenos">2774</span></a> <span class="n">local</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span>
</span><span id="L-2775"><a href="#L-2775"><span class="linenos">2775</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2776"><a href="#L-2776"><span class="linenos">2776</span></a> <span class="n">is_function</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2777"><a href="#L-2777"><span class="linenos">2777</span></a>
</span><span id="L-2778"><a href="#L-2778"><span class="linenos">2778</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DIRECTORY&quot;</span><span class="p">):</span>
</span><span id="L-2779"><a href="#L-2779"><span class="linenos">2779</span></a> <span class="n">this</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 class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2780"><a href="#L-2780"><span class="linenos">2780</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">,</span>
</span><span id="L-2781"><a href="#L-2781"><span class="linenos">2781</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">(),</span>
</span><span id="L-2782"><a href="#L-2782"><span class="linenos">2782</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
</span><span id="L-2783"><a href="#L-2783"><span class="linenos">2783</span></a> <span class="n">row_format</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_row_format</span><span class="p">(</span><span class="n">match_row</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-2784"><a href="#L-2784"><span class="linenos">2784</span></a> <span class="p">)</span>
</span><span id="L-2785"><a href="#L-2785"><span class="linenos">2785</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2786"><a href="#L-2786"><span class="linenos">2786</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">)):</span>
</span><span id="L-2787"><a href="#L-2787"><span class="linenos">2787</span></a> <span class="n">comments</span> <span class="o">+=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">)</span>
</span><span id="L-2788"><a href="#L-2788"><span class="linenos">2788</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_multitable_inserts</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
</span><span id="L-2789"><a href="#L-2789"><span class="linenos">2789</span></a>
</span><span id="L-2790"><a href="#L-2790"><span class="linenos">2790</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">):</span>
</span><span id="L-2791"><a href="#L-2791"><span class="linenos">2791</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">INSERT_ALTERNATIVES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-2792"><a href="#L-2792"><span class="linenos">2792</span></a>
</span><span id="L-2793"><a href="#L-2793"><span class="linenos">2793</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span>
</span><span id="L-2794"><a href="#L-2794"><span class="linenos">2794</span></a> <span class="n">comments</span> <span class="o">+=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">)</span>
</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="L-2796"><a href="#L-2796"><span class="linenos">2796</span></a> <span class="n">is_function</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">)</span>
</span><span id="L-2797"><a href="#L-2797"><span class="linenos">2797</span></a>
</span><span id="L-2798"><a href="#L-2798"><span class="linenos">2798</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-2799"><a href="#L-2799"><span class="linenos">2799</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_partition</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-2800"><a href="#L-2800"><span class="linenos">2800</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_function</span>
</span><span id="L-2801"><a href="#L-2801"><span class="linenos">2801</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
</span><span id="L-2802"><a href="#L-2802"><span class="linenos">2802</span></a> <span class="p">)</span>
</span><span id="L-2803"><a href="#L-2803"><span class="linenos">2803</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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-2804"><a href="#L-2804"><span class="linenos">2804</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
</span><span id="L-2805"><a href="#L-2805"><span class="linenos">2805</span></a>
</span><span id="L-2806"><a href="#L-2806"><span class="linenos">2806</span></a> <span class="n">returning</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">()</span>
</span><span id="L-2807"><a href="#L-2807"><span class="linenos">2807</span></a>
</span><span id="L-2808"><a href="#L-2808"><span class="linenos">2808</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2809"><a href="#L-2809"><span class="linenos">2809</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
</span><span id="L-2810"><a href="#L-2810"><span class="linenos">2810</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="L-2811"><a href="#L-2811"><span class="linenos">2811</span></a> <span class="n">hint</span><span class="o">=</span><span class="n">hint</span><span class="p">,</span>
</span><span id="L-2812"><a href="#L-2812"><span class="linenos">2812</span></a> <span class="n">is_function</span><span class="o">=</span><span class="n">is_function</span><span class="p">,</span>
</span><span id="L-2813"><a href="#L-2813"><span class="linenos">2813</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-2814"><a href="#L-2814"><span class="linenos">2814</span></a> <span class="n">stored</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STORED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_stored</span><span class="p">(),</span>
</span><span id="L-2815"><a href="#L-2815"><span class="linenos">2815</span></a> <span class="n">by_name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">),</span>
</span><span id="L-2816"><a href="#L-2816"><span class="linenos">2816</span></a> <span class="n">exists</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(),</span>
</span><span id="L-2817"><a href="#L-2817"><span class="linenos">2817</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span>
</span><span id="L-2818"><a href="#L-2818"><span class="linenos">2818</span></a> <span class="n">partition</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partitioned_by</span><span class="p">(),</span>
</span><span id="L-2819"><a href="#L-2819"><span class="linenos">2819</span></a> <span class="n">settings</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SETTINGS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_settings_property</span><span class="p">(),</span>
</span><span id="L-2820"><a href="#L-2820"><span class="linenos">2820</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ddl_select</span><span class="p">(),</span>
</span><span id="L-2821"><a href="#L-2821"><span class="linenos">2821</span></a> <span class="n">conflict</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_conflict</span><span class="p">(),</span>
</span><span id="L-2822"><a href="#L-2822"><span class="linenos">2822</span></a> <span class="n">returning</span><span class="o">=</span><span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
</span><span id="L-2823"><a href="#L-2823"><span class="linenos">2823</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
</span><span id="L-2824"><a href="#L-2824"><span class="linenos">2824</span></a> <span class="n">alternative</span><span class="o">=</span><span class="n">alternative</span><span class="p">,</span>
</span><span id="L-2825"><a href="#L-2825"><span class="linenos">2825</span></a> <span class="n">ignore</span><span class="o">=</span><span class="n">ignore</span><span class="p">,</span>
</span><span id="L-2826"><a href="#L-2826"><span class="linenos">2826</span></a> <span class="n">source</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
</span><span id="L-2827"><a href="#L-2827"><span class="linenos">2827</span></a> <span class="p">)</span>
</span><span id="L-2828"><a href="#L-2828"><span class="linenos">2828</span></a>
</span><span id="L-2829"><a href="#L-2829"><span class="linenos">2829</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_kill</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Kill</span><span class="p">:</span>
</span><span id="L-2830"><a href="#L-2830"><span class="linenos">2830</span></a> <span class="n">kind</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="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;CONNECTION&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">))</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-2831"><a href="#L-2831"><span class="linenos">2831</span></a>
</span><span id="L-2832"><a href="#L-2832"><span class="linenos">2832</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2833"><a href="#L-2833"><span class="linenos">2833</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kill</span><span class="p">,</span>
</span><span id="L-2834"><a href="#L-2834"><span class="linenos">2834</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">(),</span>
</span><span id="L-2835"><a href="#L-2835"><span class="linenos">2835</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="L-2836"><a href="#L-2836"><span class="linenos">2836</span></a> <span class="p">)</span>
</span><span id="L-2837"><a href="#L-2837"><span class="linenos">2837</span></a>
</span><span id="L-2838"><a href="#L-2838"><span class="linenos">2838</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_on_conflict</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">]:</span>
</span><span id="L-2839"><a href="#L-2839"><span class="linenos">2839</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONFLICT&quot;</span><span class="p">)</span>
</span><span id="L-2840"><a href="#L-2840"><span class="linenos">2840</span></a> <span class="n">duplicate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;DUPLICATE&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
</span><span id="L-2841"><a href="#L-2841"><span class="linenos">2841</span></a>
</span><span id="L-2842"><a href="#L-2842"><span class="linenos">2842</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">conflict</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">duplicate</span><span class="p">:</span>
</span><span id="L-2843"><a href="#L-2843"><span class="linenos">2843</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2844"><a href="#L-2844"><span class="linenos">2844</span></a>
</span><span id="L-2845"><a href="#L-2845"><span class="linenos">2845</span></a> <span class="n">conflict_keys</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2846"><a href="#L-2846"><span class="linenos">2846</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</span></a>
</span><span id="L-2848"><a href="#L-2848"><span class="linenos">2848</span></a> <span class="k">if</span> <span class="n">conflict</span><span class="p">:</span>
</span><span id="L-2849"><a href="#L-2849"><span class="linenos">2849</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONSTRAINT&quot;</span><span class="p">):</span>
</span><span id="L-2850"><a href="#L-2850"><span class="linenos">2850</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-2851"><a href="#L-2851"><span class="linenos">2851</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-2852"><a href="#L-2852"><span class="linenos">2852</span></a> <span class="n">conflict_keys</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span>
</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-2854"><a href="#L-2854"><span class="linenos">2854</span></a>
</span><span id="L-2855"><a href="#L-2855"><span class="linenos">2855</span></a> <span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONFLICT_ACTIONS</span><span class="p">)</span>
</span><span id="L-2856"><a href="#L-2856"><span class="linenos">2856</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">:</span>
</span><span id="L-2857"><a href="#L-2857"><span class="linenos">2857</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">)</span>
</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-2860"><a href="#L-2860"><span class="linenos">2860</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</span></a>
</span><span id="L-2862"><a href="#L-2862"><span class="linenos">2862</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2863"><a href="#L-2863"><span class="linenos">2863</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">,</span>
</span><span id="L-2864"><a href="#L-2864"><span class="linenos">2864</span></a> <span class="n">duplicate</span><span class="o">=</span><span class="n">duplicate</span><span class="p">,</span>
</span><span id="L-2865"><a href="#L-2865"><span class="linenos">2865</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-2866"><a href="#L-2866"><span class="linenos">2866</span></a> <span class="n">action</span><span class="o">=</span><span class="n">action</span><span class="p">,</span>
</span><span id="L-2867"><a href="#L-2867"><span class="linenos">2867</span></a> <span class="n">conflict_keys</span><span class="o">=</span><span class="n">conflict_keys</span><span class="p">,</span>
</span><span id="L-2868"><a href="#L-2868"><span class="linenos">2868</span></a> <span class="n">constraint</span><span class="o">=</span><span class="n">constraint</span><span class="p">,</span>
</span><span id="L-2869"><a href="#L-2869"><span class="linenos">2869</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
</span><span id="L-2870"><a href="#L-2870"><span class="linenos">2870</span></a> <span class="p">)</span>
</span><span id="L-2871"><a href="#L-2871"><span class="linenos">2871</span></a>
</span><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_returning</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">]:</span>
</span><span id="L-2873"><a href="#L-2873"><span class="linenos">2873</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">):</span>
</span><span id="L-2874"><a href="#L-2874"><span class="linenos">2874</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2875"><a href="#L-2875"><span class="linenos">2875</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2876"><a href="#L-2876"><span class="linenos">2876</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">,</span>
</span><span id="L-2877"><a href="#L-2877"><span class="linenos">2877</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">),</span>
</span><span id="L-2878"><a href="#L-2878"><span class="linenos">2878</span></a> <span class="n">into</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(),</span>
</span><span id="L-2879"><a href="#L-2879"><span class="linenos">2879</span></a> <span class="p">)</span>
</span><span id="L-2880"><a href="#L-2880"><span class="linenos">2880</span></a>
</span><span id="L-2881"><a href="#L-2881"><span class="linenos">2881</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_row</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">]:</span>
</span><span id="L-2882"><a href="#L-2882"><span class="linenos">2882</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">):</span>
</span><span id="L-2883"><a href="#L-2883"><span class="linenos">2883</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2884"><a href="#L-2884"><span class="linenos">2884</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_row_format</span><span class="p">()</span>
</span><span id="L-2885"><a href="#L-2885"><span class="linenos">2885</span></a>
</span><span id="L-2886"><a href="#L-2886"><span class="linenos">2886</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_serde_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">]:</span>
</span><span id="L-2887"><a href="#L-2887"><span class="linenos">2887</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-2888"><a href="#L-2888"><span class="linenos">2888</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">)</span>
</span><span id="L-2889"><a href="#L-2889"><span class="linenos">2889</span></a>
</span><span id="L-2890"><a href="#L-2890"><span class="linenos">2890</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SERDE_PROPERTIES</span><span class="p">):</span>
</span><span id="L-2891"><a href="#L-2891"><span class="linenos">2891</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-2892"><a href="#L-2892"><span class="linenos">2892</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2893"><a href="#L-2893"><span class="linenos">2893</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2894"><a href="#L-2894"><span class="linenos">2894</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">,</span>
</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
</span><span id="L-2896"><a href="#L-2896"><span class="linenos">2896</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_properties</span><span class="p">(),</span>
</span><span id="L-2897"><a href="#L-2897"><span class="linenos">2897</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="n">with_</span><span class="p">,</span>
</span><span id="L-2898"><a href="#L-2898"><span class="linenos">2898</span></a> <span class="p">},</span>
</span><span id="L-2899"><a href="#L-2899"><span class="linenos">2899</span></a> <span class="p">)</span>
</span><span id="L-2900"><a href="#L-2900"><span class="linenos">2900</span></a>
</span><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_row_format</span><span class="p">(</span>
</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">match_row</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-2903"><a href="#L-2903"><span class="linenos">2903</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">RowFormatSerdeProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">]:</span>
</span><span id="L-2904"><a href="#L-2904"><span class="linenos">2904</span></a> <span class="k">if</span> <span class="n">match_row</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">):</span>
</span><span id="L-2905"><a href="#L-2905"><span class="linenos">2905</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2906"><a href="#L-2906"><span class="linenos">2906</span></a>
</span><span id="L-2907"><a href="#L-2907"><span class="linenos">2907</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SERDE&quot;</span><span class="p">):</span>
</span><span id="L-2908"><a href="#L-2908"><span class="linenos">2908</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-2909"><a href="#L-2909"><span class="linenos">2909</span></a>
</span><span id="L-2910"><a href="#L-2910"><span class="linenos">2910</span></a> <span class="n">serde_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_serde_properties</span><span class="p">()</span>
</span><span id="L-2911"><a href="#L-2911"><span class="linenos">2911</span></a>
</span><span id="L-2912"><a href="#L-2912"><span class="linenos">2912</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2913"><a href="#L-2913"><span class="linenos">2913</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</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">serde_properties</span><span class="o">=</span><span class="n">serde_properties</span>
</span><span id="L-2914"><a href="#L-2914"><span class="linenos">2914</span></a> <span class="p">)</span>
</span><span id="L-2915"><a href="#L-2915"><span class="linenos">2915</span></a>
</span><span id="L-2916"><a href="#L-2916"><span class="linenos">2916</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DELIMITED&quot;</span><span class="p">)</span>
</span><span id="L-2917"><a href="#L-2917"><span class="linenos">2917</span></a>
</span><span id="L-2918"><a href="#L-2918"><span class="linenos">2918</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-2919"><a href="#L-2919"><span class="linenos">2919</span></a>
</span><span id="L-2920"><a href="#L-2920"><span class="linenos">2920</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FIELDS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="L-2921"><a href="#L-2921"><span class="linenos">2921</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;fields&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-2922"><a href="#L-2922"><span class="linenos">2922</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ESCAPED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="L-2923"><a href="#L-2923"><span class="linenos">2923</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;escaped&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-2924"><a href="#L-2924"><span class="linenos">2924</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLLECTION&quot;</span><span class="p">,</span> <span class="s2">&quot;ITEMS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="L-2925"><a href="#L-2925"><span class="linenos">2925</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;collection_items&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-2926"><a href="#L-2926"><span class="linenos">2926</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAP&quot;</span><span class="p">,</span> <span class="s2">&quot;KEYS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="L-2927"><a href="#L-2927"><span class="linenos">2927</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;map_keys&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-2928"><a href="#L-2928"><span class="linenos">2928</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LINES&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="L-2929"><a href="#L-2929"><span class="linenos">2929</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;lines&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-2930"><a href="#L-2930"><span class="linenos">2930</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFINED&quot;</span><span class="p">,</span> <span class="s2">&quot;AS&quot;</span><span class="p">):</span>
</span><span id="L-2931"><a href="#L-2931"><span class="linenos">2931</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;null&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-2932"><a href="#L-2932"><span class="linenos">2932</span></a>
</span><span id="L-2933"><a href="#L-2933"><span class="linenos">2933</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="L-2934"><a href="#L-2934"><span class="linenos">2934</span></a>
</span><span id="L-2935"><a href="#L-2935"><span class="linenos">2935</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_load</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="L-2936"><a href="#L-2936"><span class="linenos">2936</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DATA&quot;</span><span class="p">):</span>
</span><span id="L-2937"><a href="#L-2937"><span class="linenos">2937</span></a> <span class="n">local</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span>
</span><span id="L-2938"><a href="#L-2938"><span class="linenos">2938</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INPATH&quot;</span><span class="p">)</span>
</span><span id="L-2939"><a href="#L-2939"><span class="linenos">2939</span></a> <span class="n">inpath</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">)</span>
</span><span id="L-2941"><a href="#L-2941"><span class="linenos">2941</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="L-2942"><a href="#L-2942"><span class="linenos">2942</span></a>
</span><span id="L-2943"><a href="#L-2943"><span class="linenos">2943</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2944"><a href="#L-2944"><span class="linenos">2944</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</span><span class="p">,</span>
</span><span id="L-2945"><a href="#L-2945"><span class="linenos">2945</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-2946"><a href="#L-2946"><span class="linenos">2946</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
</span><span id="L-2947"><a href="#L-2947"><span class="linenos">2947</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
</span><span id="L-2948"><a href="#L-2948"><span class="linenos">2948</span></a> <span class="n">inpath</span><span class="o">=</span><span class="n">inpath</span><span class="p">,</span>
</span><span id="L-2949"><a href="#L-2949"><span class="linenos">2949</span></a> <span class="n">partition</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">(),</span>
</span><span id="L-2950"><a href="#L-2950"><span class="linenos">2950</span></a> <span class="n">input_format</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INPUTFORMAT&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="L-2951"><a href="#L-2951"><span class="linenos">2951</span></a> <span class="n">serde</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SERDE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="L-2952"><a href="#L-2952"><span class="linenos">2952</span></a> <span class="p">)</span>
</span><span id="L-2953"><a href="#L-2953"><span class="linenos">2953</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-2954"><a href="#L-2954"><span class="linenos">2954</span></a>
</span><span id="L-2955"><a href="#L-2955"><span class="linenos">2955</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">:</span>
</span><span id="L-2956"><a href="#L-2956"><span class="linenos">2956</span></a> <span class="c1"># This handles MySQL&#39;s &quot;Multiple-Table Syntax&quot;</span>
</span><span id="L-2957"><a href="#L-2957"><span class="linenos">2957</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/delete.html</span>
</span><span id="L-2958"><a href="#L-2958"><span class="linenos">2958</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2959"><a href="#L-2959"><span class="linenos">2959</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-2960"><a href="#L-2960"><span class="linenos">2960</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="L-2961"><a href="#L-2961"><span class="linenos">2961</span></a>
</span><span id="L-2962"><a href="#L-2962"><span class="linenos">2962</span></a> <span class="n">returning</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">()</span>
</span><span id="L-2963"><a href="#L-2963"><span class="linenos">2963</span></a>
</span><span id="L-2964"><a href="#L-2964"><span class="linenos">2964</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2965"><a href="#L-2965"><span class="linenos">2965</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
</span><span id="L-2966"><a href="#L-2966"><span class="linenos">2966</span></a> <span class="n">tables</span><span class="o">=</span><span class="n">tables</span><span class="p">,</span>
</span><span id="L-2967"><a href="#L-2967"><span class="linenos">2967</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-2968"><a href="#L-2968"><span class="linenos">2968</span></a> <span class="n">using</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-2969"><a href="#L-2969"><span class="linenos">2969</span></a> <span class="n">cluster</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_property</span><span class="p">(),</span>
</span><span id="L-2970"><a href="#L-2970"><span class="linenos">2970</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
</span><span id="L-2971"><a href="#L-2971"><span class="linenos">2971</span></a> <span class="n">returning</span><span class="o">=</span><span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
</span><span id="L-2972"><a href="#L-2972"><span class="linenos">2972</span></a> <span class="n">limit</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(),</span>
</span><span id="L-2973"><a href="#L-2973"><span class="linenos">2973</span></a> <span class="p">)</span>
</span><span id="L-2974"><a href="#L-2974"><span class="linenos">2974</span></a>
</span><span id="L-2975"><a href="#L-2975"><span class="linenos">2975</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_update</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">:</span>
</span><span id="L-2976"><a href="#L-2976"><span class="linenos">2976</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">UPDATE_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="L-2977"><a href="#L-2977"><span class="linenos">2977</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
</span><span id="L-2978"><a href="#L-2978"><span class="linenos">2978</span></a> <span class="n">returning</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">()</span>
</span><span id="L-2979"><a href="#L-2979"><span class="linenos">2979</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2980"><a href="#L-2980"><span class="linenos">2980</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
</span><span id="L-2981"><a href="#L-2981"><span class="linenos">2981</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
</span><span id="L-2982"><a href="#L-2982"><span class="linenos">2982</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="n">this</span><span class="p">,</span>
</span><span id="L-2983"><a href="#L-2983"><span class="linenos">2983</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">expressions</span><span class="p">,</span>
</span><span id="L-2984"><a href="#L-2984"><span class="linenos">2984</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-2985"><a href="#L-2985"><span class="linenos">2985</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
</span><span id="L-2986"><a href="#L-2986"><span class="linenos">2986</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
</span><span id="L-2987"><a href="#L-2987"><span class="linenos">2987</span></a> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(),</span>
</span><span id="L-2988"><a href="#L-2988"><span class="linenos">2988</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(),</span>
</span><span id="L-2989"><a href="#L-2989"><span class="linenos">2989</span></a> <span class="p">},</span>
</span><span id="L-2990"><a href="#L-2990"><span class="linenos">2990</span></a> <span class="p">)</span>
</span><span id="L-2991"><a href="#L-2991"><span class="linenos">2991</span></a>
</span><span id="L-2992"><a href="#L-2992"><span class="linenos">2992</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_use</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Use</span><span class="p">:</span>
</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-2994"><a href="#L-2994"><span class="linenos">2994</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Use</span><span class="p">,</span>
</span><span id="L-2995"><a href="#L-2995"><span class="linenos">2995</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">USABLES</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="L-2996"><a href="#L-2996"><span class="linenos">2996</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="L-2997"><a href="#L-2997"><span class="linenos">2997</span></a> <span class="p">)</span>
</span><span id="L-2998"><a href="#L-2998"><span class="linenos">2998</span></a>
</span><span id="L-2999"><a href="#L-2999"><span class="linenos">2999</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_uncache</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">:</span>
</span><span id="L-3000"><a href="#L-3000"><span class="linenos">3000</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">):</span>
</span><span id="L-3001"><a href="#L-3001"><span class="linenos">3001</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting TABLE after UNCACHE&quot;</span><span class="p">)</span>
</span><span id="L-3002"><a href="#L-3002"><span class="linenos">3002</span></a>
</span><span id="L-3003"><a href="#L-3003"><span class="linenos">3003</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3004"><a href="#L-3004"><span class="linenos">3004</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(),</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-3005"><a href="#L-3005"><span class="linenos">3005</span></a> <span class="p">)</span>
</span><span id="L-3006"><a href="#L-3006"><span class="linenos">3006</span></a>
</span><span id="L-3007"><a href="#L-3007"><span class="linenos">3007</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_cache</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">:</span>
</span><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LAZY&quot;</span><span class="p">)</span>
</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="L-3010"><a href="#L-3010"><span class="linenos">3010</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-3011"><a href="#L-3011"><span class="linenos">3011</span></a>
</span><span id="L-3012"><a href="#L-3012"><span class="linenos">3012</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-3013"><a href="#L-3013"><span class="linenos">3013</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OPTIONS&quot;</span><span class="p">):</span>
</span><span id="L-3014"><a href="#L-3014"><span class="linenos">3014</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="L-3015"><a href="#L-3015"><span class="linenos">3015</span></a> <span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-3016"><a href="#L-3016"><span class="linenos">3016</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-3017"><a href="#L-3017"><span class="linenos">3017</span></a> <span class="n">v</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-3018"><a href="#L-3018"><span class="linenos">3018</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">]</span>
</span><span id="L-3019"><a href="#L-3019"><span class="linenos">3019</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-3020"><a href="#L-3020"><span class="linenos">3020</span></a>
</span><span id="L-3021"><a href="#L-3021"><span class="linenos">3021</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="L-3022"><a href="#L-3022"><span class="linenos">3022</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3023"><a href="#L-3023"><span class="linenos">3023</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span>
</span><span id="L-3024"><a href="#L-3024"><span class="linenos">3024</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
</span><span id="L-3025"><a href="#L-3025"><span class="linenos">3025</span></a> <span class="n">lazy</span><span class="o">=</span><span class="n">lazy</span><span class="p">,</span>
</span><span id="L-3026"><a href="#L-3026"><span class="linenos">3026</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
</span><span id="L-3027"><a href="#L-3027"><span class="linenos">3027</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-3028"><a href="#L-3028"><span class="linenos">3028</span></a> <span class="p">)</span>
</span><span id="L-3029"><a href="#L-3029"><span class="linenos">3029</span></a>
</span><span id="L-3030"><a href="#L-3030"><span class="linenos">3030</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partition</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Partition</span><span class="p">]:</span>
</span><span id="L-3031"><a href="#L-3031"><span class="linenos">3031</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PARTITION_KEYWORDS</span><span class="p">):</span>
</span><span id="L-3032"><a href="#L-3032"><span class="linenos">3032</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3033"><a href="#L-3033"><span class="linenos">3033</span></a>
</span><span id="L-3034"><a href="#L-3034"><span class="linenos">3034</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3035"><a href="#L-3035"><span class="linenos">3035</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Partition</span><span class="p">,</span>
</span><span id="L-3036"><a href="#L-3036"><span class="linenos">3036</span></a> <span class="n">subpartition</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;SUBPARTITION&quot;</span><span class="p">,</span>
</span><span id="L-3037"><a href="#L-3037"><span class="linenos">3037</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">),</span>
</span><span id="L-3038"><a href="#L-3038"><span class="linenos">3038</span></a> <span class="p">)</span>
</span><span id="L-3039"><a href="#L-3039"><span class="linenos">3039</span></a>
</span><span id="L-3040"><a href="#L-3040"><span class="linenos">3040</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_value</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">]:</span>
</span><span id="L-3041"><a href="#L-3041"><span class="linenos">3041</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_value_expression</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-3042"><a href="#L-3042"><span class="linenos">3042</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_VALUES_DEFAULT</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="L-3043"><a href="#L-3043"><span class="linenos">3043</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-3044"><a href="#L-3044"><span class="linenos">3044</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
</span><span id="L-3045"><a href="#L-3045"><span class="linenos">3045</span></a>
</span><span id="L-3046"><a href="#L-3046"><span class="linenos">3046</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-3047"><a href="#L-3047"><span class="linenos">3047</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_value_expression</span><span class="p">)</span>
</span><span id="L-3048"><a href="#L-3048"><span class="linenos">3048</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-3049"><a href="#L-3049"><span class="linenos">3049</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-3050"><a href="#L-3050"><span class="linenos">3050</span></a>
</span><span id="L-3051"><a href="#L-3051"><span class="linenos">3051</span></a> <span class="c1"># In some dialects we can have VALUES 1, 2 which results in 1 column &amp; 2 rows.</span>
</span><span id="L-3052"><a href="#L-3052"><span class="linenos">3052</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
</span><span id="L-3053"><a href="#L-3053"><span class="linenos">3053</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="L-3054"><a href="#L-3054"><span class="linenos">3054</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">])</span>
</span><span id="L-3055"><a href="#L-3055"><span class="linenos">3055</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3056"><a href="#L-3056"><span class="linenos">3056</span></a>
</span><span id="L-3057"><a href="#L-3057"><span class="linenos">3057</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_projections</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-3058"><a href="#L-3058"><span class="linenos">3058</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
</span><span id="L-3059"><a href="#L-3059"><span class="linenos">3059</span></a>
</span><span id="L-3060"><a href="#L-3060"><span class="linenos">3060</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_select</span><span class="p">(</span>
</span><span id="L-3061"><a href="#L-3061"><span class="linenos">3061</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-3062"><a href="#L-3062"><span class="linenos">3062</span></a> <span class="n">nested</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-3063"><a href="#L-3063"><span class="linenos">3063</span></a> <span class="n">table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-3064"><a href="#L-3064"><span class="linenos">3064</span></a> <span class="n">parse_subquery_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</span></a> <span class="n">parse_set_operation</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="L-3066"><a href="#L-3066"><span class="linenos">3066</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-3067"><a href="#L-3067"><span class="linenos">3067</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_with</span><span class="p">()</span>
</span><span id="L-3068"><a href="#L-3068"><span class="linenos">3068</span></a>
</span><span id="L-3069"><a href="#L-3069"><span class="linenos">3069</span></a> <span class="k">if</span> <span class="n">cte</span><span class="p">:</span>
</span><span id="L-3070"><a href="#L-3070"><span class="linenos">3070</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="L-3071"><a href="#L-3071"><span class="linenos">3071</span></a>
</span><span id="L-3072"><a href="#L-3072"><span class="linenos">3072</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="L-3073"><a href="#L-3073"><span class="linenos">3073</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Failed to parse any statement following CTE&quot;</span><span class="p">)</span>
</span><span id="L-3074"><a href="#L-3074"><span class="linenos">3074</span></a> <span class="k">return</span> <span class="n">cte</span>
</span><span id="L-3075"><a href="#L-3075"><span class="linenos">3075</span></a>
</span><span id="L-3076"><a href="#L-3076"><span class="linenos">3076</span></a> <span class="k">if</span> <span class="s2">&quot;with&quot;</span> <span class="ow">in</span> <span class="n">this</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
</span><span id="L-3077"><a href="#L-3077"><span class="linenos">3077</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;with&quot;</span><span class="p">,</span> <span class="n">cte</span><span class="p">)</span>
</span><span id="L-3078"><a href="#L-3078"><span class="linenos">3078</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3079"><a href="#L-3079"><span class="linenos">3079</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> does not support CTE&quot;</span><span class="p">)</span>
</span><span id="L-3080"><a href="#L-3080"><span class="linenos">3080</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">cte</span>
</span><span id="L-3081"><a href="#L-3081"><span class="linenos">3081</span></a>
</span><span id="L-3082"><a href="#L-3082"><span class="linenos">3082</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3083"><a href="#L-3083"><span class="linenos">3083</span></a>
</span><span id="L-3084"><a href="#L-3084"><span class="linenos">3084</span></a> <span class="c1"># duckdb supports leading with FROM x</span>
</span><span id="L-3085"><a href="#L-3085"><span class="linenos">3085</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-3086"><a href="#L-3086"><span class="linenos">3086</span></a>
</span><span id="L-3087"><a href="#L-3087"><span class="linenos">3087</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">):</span>
</span><span id="L-3088"><a href="#L-3088"><span class="linenos">3088</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="L-3089"><a href="#L-3089"><span class="linenos">3089</span></a>
</span><span id="L-3090"><a href="#L-3090"><span class="linenos">3090</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint</span><span class="p">()</span>
</span><span id="L-3091"><a href="#L-3091"><span class="linenos">3091</span></a>
</span><span id="L-3092"><a href="#L-3092"><span class="linenos">3092</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">:</span>
</span><span id="L-3093"><a href="#L-3093"><span class="linenos">3093</span></a> <span class="n">all_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">)</span>
</span><span id="L-3094"><a href="#L-3094"><span class="linenos">3094</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">DISTINCT_TOKENS</span><span class="p">)</span>
</span><span id="L-3095"><a href="#L-3095"><span class="linenos">3095</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3096"><a href="#L-3096"><span class="linenos">3096</span></a> <span class="n">all_</span><span class="p">,</span> <span class="n">distinct</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
</span><span id="L-3097"><a href="#L-3097"><span class="linenos">3097</span></a>
</span><span id="L-3098"><a href="#L-3098"><span class="linenos">3098</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-3099"><a href="#L-3099"><span class="linenos">3099</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="L-3100"><a href="#L-3100"><span class="linenos">3100</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;STRUCT&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUE&quot;</span><span class="p">))</span>
</span><span id="L-3101"><a href="#L-3101"><span class="linenos">3101</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-3102"><a href="#L-3102"><span class="linenos">3102</span></a> <span class="p">)</span>
</span><span id="L-3103"><a href="#L-3103"><span class="linenos">3103</span></a>
</span><span id="L-3104"><a href="#L-3104"><span class="linenos">3104</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="L-3105"><a href="#L-3105"><span class="linenos">3105</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3106"><a href="#L-3106"><span class="linenos">3106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span>
</span><span id="L-3107"><a href="#L-3107"><span class="linenos">3107</span></a> <span class="n">on</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-3108"><a href="#L-3108"><span class="linenos">3108</span></a> <span class="p">)</span>
</span><span id="L-3109"><a href="#L-3109"><span class="linenos">3109</span></a>
</span><span id="L-3110"><a href="#L-3110"><span class="linenos">3110</span></a> <span class="k">if</span> <span class="n">all_</span> <span class="ow">and</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="L-3111"><a href="#L-3111"><span class="linenos">3111</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Cannot specify both ALL and DISTINCT after SELECT&quot;</span><span class="p">)</span>
</span><span id="L-3112"><a href="#L-3112"><span class="linenos">3112</span></a>
</span><span id="L-3113"><a href="#L-3113"><span class="linenos">3113</span></a> <span class="n">operation_modifiers</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-3114"><a href="#L-3114"><span class="linenos">3114</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPERATION_MODIFIERS</span><span class="p">):</span>
</span><span id="L-3115"><a href="#L-3115"><span class="linenos">3115</span></a> <span class="n">operation_modifiers</span><span class="o">.</span><span class="n">append</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="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()))</span>
</span><span id="L-3116"><a href="#L-3116"><span class="linenos">3116</span></a>
</span><span id="L-3117"><a href="#L-3117"><span class="linenos">3117</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-3118"><a href="#L-3118"><span class="linenos">3118</span></a> <span class="n">projections</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_projections</span><span class="p">()</span>
</span><span id="L-3119"><a href="#L-3119"><span class="linenos">3119</span></a>
</span><span id="L-3120"><a href="#L-3120"><span class="linenos">3120</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3121"><a href="#L-3121"><span class="linenos">3121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span>
</span><span id="L-3122"><a href="#L-3122"><span class="linenos">3122</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="L-3123"><a href="#L-3123"><span class="linenos">3123</span></a> <span class="n">hint</span><span class="o">=</span><span class="n">hint</span><span class="p">,</span>
</span><span id="L-3124"><a href="#L-3124"><span class="linenos">3124</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
</span><span id="L-3125"><a href="#L-3125"><span class="linenos">3125</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">projections</span><span class="p">,</span>
</span><span id="L-3126"><a href="#L-3126"><span class="linenos">3126</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
</span><span id="L-3127"><a href="#L-3127"><span class="linenos">3127</span></a> <span class="n">operation_modifiers</span><span class="o">=</span><span class="n">operation_modifiers</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-3128"><a href="#L-3128"><span class="linenos">3128</span></a> <span class="p">)</span>
</span><span id="L-3129"><a href="#L-3129"><span class="linenos">3129</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
</span><span id="L-3130"><a href="#L-3130"><span class="linenos">3130</span></a>
</span><span id="L-3131"><a href="#L-3131"><span class="linenos">3131</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_into</span><span class="p">()</span>
</span><span id="L-3132"><a href="#L-3132"><span class="linenos">3132</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
</span><span id="L-3133"><a href="#L-3133"><span class="linenos">3133</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;into&quot;</span><span class="p">,</span> <span class="n">into</span><span class="p">)</span>
</span><span id="L-3134"><a href="#L-3134"><span class="linenos">3134</span></a>
</span><span id="L-3135"><a href="#L-3135"><span class="linenos">3135</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">from_</span><span class="p">:</span>
</span><span id="L-3136"><a href="#L-3136"><span class="linenos">3136</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span>
</span><span id="L-3137"><a href="#L-3137"><span class="linenos">3137</span></a>
</span><span id="L-3138"><a href="#L-3138"><span class="linenos">3138</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
</span><span id="L-3139"><a href="#L-3139"><span class="linenos">3139</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;from&quot;</span><span class="p">,</span> <span class="n">from_</span><span class="p">)</span>
</span><span id="L-3140"><a href="#L-3140"><span class="linenos">3140</span></a>
</span><span id="L-3141"><a href="#L-3141"><span class="linenos">3141</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-3142"><a href="#L-3142"><span class="linenos">3142</span></a> <span class="k">elif</span> <span class="p">(</span><span class="n">table</span> <span class="ow">or</span> <span class="n">nested</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-3143"><a href="#L-3143"><span class="linenos">3143</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">)):</span>
</span><span id="L-3144"><a href="#L-3144"><span class="linenos">3144</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</span><span class="p">(</span>
</span><span id="L-3145"><a href="#L-3145"><span class="linenos">3145</span></a> <span class="n">is_unpivot</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span>
</span><span id="L-3146"><a href="#L-3146"><span class="linenos">3146</span></a> <span class="p">)</span>
</span><span id="L-3147"><a href="#L-3147"><span class="linenos">3147</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
</span><span id="L-3148"><a href="#L-3148"><span class="linenos">3148</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">(</span><span class="n">skip_from_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-3149"><a href="#L-3149"><span class="linenos">3149</span></a> <span class="c1"># Support parentheses for duckdb FROM-first syntax</span>
</span><span id="L-3150"><a href="#L-3150"><span class="linenos">3150</span></a> <span class="n">select</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
</span><span id="L-3151"><a href="#L-3151"><span class="linenos">3151</span></a> <span class="k">if</span> <span class="n">select</span><span class="p">:</span>
</span><span id="L-3152"><a href="#L-3152"><span class="linenos">3152</span></a> <span class="n">select</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;from&quot;</span><span class="p">,</span> <span class="n">from_</span><span class="p">)</span>
</span><span id="L-3153"><a href="#L-3153"><span class="linenos">3153</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">select</span>
</span><span id="L-3154"><a href="#L-3154"><span class="linenos">3154</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3155"><a href="#L-3155"><span class="linenos">3155</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">from_</span><span class="p">))</span>
</span><span id="L-3156"><a href="#L-3156"><span class="linenos">3156</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3157"><a href="#L-3157"><span class="linenos">3157</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-3158"><a href="#L-3158"><span class="linenos">3158</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="L-3159"><a href="#L-3159"><span class="linenos">3159</span></a> <span class="k">if</span> <span class="n">table</span>
</span><span id="L-3160"><a href="#L-3160"><span class="linenos">3160</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_set_operation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-3161"><a href="#L-3161"><span class="linenos">3161</span></a> <span class="p">)</span>
</span><span id="L-3162"><a href="#L-3162"><span class="linenos">3162</span></a>
</span><span id="L-3163"><a href="#L-3163"><span class="linenos">3163</span></a> <span class="c1"># Transform exp.Values into a exp.Table to pass through parse_query_modifiers</span>
</span><span id="L-3164"><a href="#L-3164"><span class="linenos">3164</span></a> <span class="c1"># in case a modifier (e.g. join) is following</span>
</span><span id="L-3165"><a href="#L-3165"><span class="linenos">3165</span></a> <span class="k">if</span> <span class="n">table</span> <span class="ow">and</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">Values</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
</span><span id="L-3166"><a href="#L-3166"><span class="linenos">3166</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span><span id="L-3167"><a href="#L-3167"><span class="linenos">3167</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
</span><span id="L-3168"><a href="#L-3168"><span class="linenos">3168</span></a>
</span><span id="L-3169"><a href="#L-3169"><span class="linenos">3169</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
</span><span id="L-3170"><a href="#L-3170"><span class="linenos">3170</span></a>
</span><span id="L-3171"><a href="#L-3171"><span class="linenos">3171</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-3172"><a href="#L-3172"><span class="linenos">3172</span></a>
</span><span id="L-3173"><a href="#L-3173"><span class="linenos">3173</span></a> <span class="c1"># We return early here so that the UNION isn&#39;t attached to the subquery by the</span>
</span><span id="L-3174"><a href="#L-3174"><span class="linenos">3174</span></a> <span class="c1"># following call to _parse_set_operations, but instead becomes the parent node</span>
</span><span id="L-3175"><a href="#L-3175"><span class="linenos">3175</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">parse_alias</span><span class="o">=</span><span class="n">parse_subquery_alias</span><span class="p">)</span>
</span><span id="L-3176"><a href="#L-3176"><span class="linenos">3176</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-3177"><a href="#L-3177"><span class="linenos">3177</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span>
</span><span id="L-3178"><a href="#L-3178"><span class="linenos">3178</span></a> <span class="k">elif</span> <span class="n">from_</span><span class="p">:</span>
</span><span id="L-3179"><a href="#L-3179"><span class="linenos">3179</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">from_</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-3180"><a href="#L-3180"><span class="linenos">3180</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SUMMARIZE</span><span class="p">):</span>
</span><span id="L-3181"><a href="#L-3181"><span class="linenos">3181</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="L-3182"><a href="#L-3182"><span class="linenos">3182</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="L-3183"><a href="#L-3183"><span class="linenos">3183</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Summarize</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">table</span><span class="o">=</span><span class="n">table</span><span class="p">)</span>
</span><span id="L-3184"><a href="#L-3184"><span class="linenos">3184</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</span><span class="p">):</span>
</span><span id="L-3185"><a href="#L-3185"><span class="linenos">3185</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_describe</span><span class="p">()</span>
</span><span id="L-3186"><a href="#L-3186"><span class="linenos">3186</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STREAM&quot;</span><span class="p">):</span>
</span><span id="L-3187"><a href="#L-3187"><span class="linenos">3187</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
</span><span id="L-3188"><a href="#L-3188"><span class="linenos">3188</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
</span><span id="L-3189"><a href="#L-3189"><span class="linenos">3189</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Stream</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-3190"><a href="#L-3190"><span class="linenos">3190</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3191"><a href="#L-3191"><span class="linenos">3191</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-3192"><a href="#L-3192"><span class="linenos">3192</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3193"><a href="#L-3193"><span class="linenos">3193</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3194"><a href="#L-3194"><span class="linenos">3194</span></a>
</span><span id="L-3195"><a href="#L-3195"><span class="linenos">3195</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">parse_set_operation</span> <span class="k">else</span> <span class="n">this</span>
</span><span id="L-3196"><a href="#L-3196"><span class="linenos">3196</span></a>
</span><span id="L-3197"><a href="#L-3197"><span class="linenos">3197</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_recursive_with_search</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">RecursiveWithSearch</span><span class="p">]:</span>
</span><span id="L-3198"><a href="#L-3198"><span class="linenos">3198</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SEARCH&quot;</span><span class="p">)</span>
</span><span id="L-3199"><a href="#L-3199"><span class="linenos">3199</span></a>
</span><span id="L-3200"><a href="#L-3200"><span class="linenos">3200</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RECURSIVE_CTE_SEARCH_KIND</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-3201"><a href="#L-3201"><span class="linenos">3201</span></a>
</span><span id="L-3202"><a href="#L-3202"><span class="linenos">3202</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
</span><span id="L-3203"><a href="#L-3203"><span class="linenos">3203</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3204"><a href="#L-3204"><span class="linenos">3204</span></a>
</span><span id="L-3205"><a href="#L-3205"><span class="linenos">3205</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">)</span>
</span><span id="L-3206"><a href="#L-3206"><span class="linenos">3206</span></a>
</span><span id="L-3207"><a href="#L-3207"><span class="linenos">3207</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3208"><a href="#L-3208"><span class="linenos">3208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RecursiveWithSearch</span><span class="p">,</span>
</span><span id="L-3209"><a href="#L-3209"><span class="linenos">3209</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="L-3210"><a href="#L-3210"><span class="linenos">3210</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span>
</span><span id="L-3211"><a href="#L-3211"><span class="linenos">3211</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span>
</span><span id="L-3212"><a href="#L-3212"><span class="linenos">3212</span></a> <span class="n">using</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;USING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span>
</span><span id="L-3213"><a href="#L-3213"><span class="linenos">3213</span></a> <span class="p">)</span>
</span><span id="L-3214"><a href="#L-3214"><span class="linenos">3214</span></a>
</span><span id="L-3215"><a href="#L-3215"><span class="linenos">3215</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_with</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_with_token</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">]:</span>
</span><span id="L-3216"><a href="#L-3216"><span class="linenos">3216</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_with_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
</span><span id="L-3217"><a href="#L-3217"><span class="linenos">3217</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3218"><a href="#L-3218"><span class="linenos">3218</span></a>
</span><span id="L-3219"><a href="#L-3219"><span class="linenos">3219</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="L-3220"><a href="#L-3220"><span class="linenos">3220</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">RECURSIVE</span><span class="p">)</span>
</span><span id="L-3221"><a href="#L-3221"><span class="linenos">3221</span></a>
</span><span id="L-3222"><a href="#L-3222"><span class="linenos">3222</span></a> <span class="n">last_comments</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3223"><a href="#L-3223"><span class="linenos">3223</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-3224"><a href="#L-3224"><span class="linenos">3224</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-3225"><a href="#L-3225"><span class="linenos">3225</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
</span><span id="L-3226"><a href="#L-3226"><span class="linenos">3226</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cte</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">):</span>
</span><span id="L-3227"><a href="#L-3227"><span class="linenos">3227</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cte</span><span class="p">)</span>
</span><span id="L-3228"><a href="#L-3228"><span class="linenos">3228</span></a> <span class="k">if</span> <span class="n">last_comments</span><span class="p">:</span>
</span><span id="L-3229"><a href="#L-3229"><span class="linenos">3229</span></a> <span class="n">cte</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">last_comments</span><span class="p">)</span>
</span><span id="L-3230"><a href="#L-3230"><span class="linenos">3230</span></a>
</span><span id="L-3231"><a href="#L-3231"><span class="linenos">3231</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
</span><span id="L-3232"><a href="#L-3232"><span class="linenos">3232</span></a> <span class="k">break</span>
</span><span id="L-3233"><a href="#L-3233"><span class="linenos">3233</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3234"><a href="#L-3234"><span class="linenos">3234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">)</span>
</span><span id="L-3235"><a href="#L-3235"><span class="linenos">3235</span></a>
</span><span id="L-3236"><a href="#L-3236"><span class="linenos">3236</span></a> <span class="n">last_comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="L-3237"><a href="#L-3237"><span class="linenos">3237</span></a>
</span><span id="L-3238"><a href="#L-3238"><span class="linenos">3238</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3239"><a href="#L-3239"><span class="linenos">3239</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">,</span>
</span><span id="L-3240"><a href="#L-3240"><span class="linenos">3240</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="L-3241"><a href="#L-3241"><span class="linenos">3241</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-3242"><a href="#L-3242"><span class="linenos">3242</span></a> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</span><span class="p">,</span>
</span><span id="L-3243"><a href="#L-3243"><span class="linenos">3243</span></a> <span class="n">search</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_recursive_with_search</span><span class="p">(),</span>
</span><span id="L-3244"><a href="#L-3244"><span class="linenos">3244</span></a> <span class="p">)</span>
</span><span id="L-3245"><a href="#L-3245"><span class="linenos">3245</span></a>
</span><span id="L-3246"><a href="#L-3246"><span class="linenos">3246</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">]:</span>
</span><span id="L-3247"><a href="#L-3247"><span class="linenos">3247</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-3248"><a href="#L-3248"><span class="linenos">3248</span></a>
</span><span id="L-3249"><a href="#L-3249"><span class="linenos">3249</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">)</span>
</span><span id="L-3250"><a href="#L-3250"><span class="linenos">3250</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
</span><span id="L-3251"><a href="#L-3251"><span class="linenos">3251</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
</span><span id="L-3252"><a href="#L-3252"><span class="linenos">3252</span></a>
</span><span id="L-3253"><a href="#L-3253"><span class="linenos">3253</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">OPTIONAL_ALIAS_TOKEN_CTE</span><span class="p">:</span>
</span><span id="L-3254"><a href="#L-3254"><span class="linenos">3254</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-3255"><a href="#L-3255"><span class="linenos">3255</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3256"><a href="#L-3256"><span class="linenos">3256</span></a>
</span><span id="L-3257"><a href="#L-3257"><span class="linenos">3257</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="L-3258"><a href="#L-3258"><span class="linenos">3258</span></a>
</span><span id="L-3259"><a href="#L-3259"><span class="linenos">3259</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">):</span>
</span><span id="L-3260"><a href="#L-3260"><span class="linenos">3260</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-3261"><a href="#L-3261"><span class="linenos">3261</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">):</span>
</span><span id="L-3262"><a href="#L-3262"><span class="linenos">3262</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-3263"><a href="#L-3263"><span class="linenos">3263</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3264"><a href="#L-3264"><span class="linenos">3264</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3265"><a href="#L-3265"><span class="linenos">3265</span></a>
</span><span id="L-3266"><a href="#L-3266"><span class="linenos">3266</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3267"><a href="#L-3267"><span class="linenos">3267</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
</span><span id="L-3268"><a href="#L-3268"><span class="linenos">3268</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">),</span>
</span><span id="L-3269"><a href="#L-3269"><span class="linenos">3269</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span>
</span><span id="L-3270"><a href="#L-3270"><span class="linenos">3270</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
</span><span id="L-3271"><a href="#L-3271"><span class="linenos">3271</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="L-3272"><a href="#L-3272"><span class="linenos">3272</span></a> <span class="p">)</span>
</span><span id="L-3273"><a href="#L-3273"><span class="linenos">3273</span></a>
</span><span id="L-3274"><a href="#L-3274"><span class="linenos">3274</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cte</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">Values</span><span class="p">):</span>
</span><span id="L-3275"><a href="#L-3275"><span class="linenos">3275</span></a> <span class="n">cte</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">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;_values&quot;</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)))</span>
</span><span id="L-3276"><a href="#L-3276"><span class="linenos">3276</span></a>
</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</span></a> <span class="k">return</span> <span class="n">cte</span>
</span><span id="L-3278"><a href="#L-3278"><span class="linenos">3278</span></a>
</span><span id="L-3279"><a href="#L-3279"><span class="linenos">3279</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_table_alias</span><span class="p">(</span>
</span><span id="L-3280"><a href="#L-3280"><span class="linenos">3280</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias_tokens</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">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3281"><a href="#L-3281"><span class="linenos">3281</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">TableAlias</span><span class="p">]:</span>
</span><span id="L-3282"><a href="#L-3282"><span class="linenos">3282</span></a> <span class="c1"># In some dialects, LIMIT and OFFSET can act as both identifiers and keywords (clauses)</span>
</span><span id="L-3283"><a href="#L-3283"><span class="linenos">3283</span></a> <span class="c1"># so this section tries to parse the clause version and if it fails, it treats the token</span>
</span><span id="L-3284"><a href="#L-3284"><span class="linenos">3284</span></a> <span class="c1"># as an identifier (alias)</span>
</span><span id="L-3285"><a href="#L-3285"><span class="linenos">3285</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_can_parse_limit_or_offset</span><span class="p">():</span>
</span><span id="L-3286"><a href="#L-3286"><span class="linenos">3286</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3287"><a href="#L-3287"><span class="linenos">3287</span></a>
</span><span id="L-3288"><a href="#L-3288"><span class="linenos">3288</span></a> <span class="n">any_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="L-3289"><a href="#L-3289"><span class="linenos">3289</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-3290"><a href="#L-3290"><span class="linenos">3290</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="n">alias_tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="L-3291"><a href="#L-3291"><span class="linenos">3291</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
</span><span id="L-3292"><a href="#L-3292"><span class="linenos">3292</span></a> <span class="p">)</span>
</span><span id="L-3293"><a href="#L-3293"><span class="linenos">3293</span></a>
</span><span id="L-3294"><a href="#L-3294"><span class="linenos">3294</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-3295"><a href="#L-3295"><span class="linenos">3295</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-3296"><a href="#L-3296"><span class="linenos">3296</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_parameter</span><span class="p">)</span>
</span><span id="L-3297"><a href="#L-3297"><span class="linenos">3297</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3299"><a href="#L-3299"><span class="linenos">3299</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3300"><a href="#L-3300"><span class="linenos">3300</span></a>
</span><span id="L-3301"><a href="#L-3301"><span class="linenos">3301</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">columns</span><span class="p">:</span>
</span><span id="L-3302"><a href="#L-3302"><span class="linenos">3302</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3303"><a href="#L-3303"><span class="linenos">3303</span></a>
</span><span id="L-3304"><a href="#L-3304"><span class="linenos">3304</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">)</span>
</span><span id="L-3305"><a href="#L-3305"><span class="linenos">3305</span></a>
</span><span id="L-3306"><a href="#L-3306"><span class="linenos">3306</span></a> <span class="c1"># We bubble up comments from the Identifier to the TableAlias</span>
</span><span id="L-3307"><a href="#L-3307"><span class="linenos">3307</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</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-3308"><a href="#L-3308"><span class="linenos">3308</span></a> <span class="n">table_alias</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">pop_comments</span><span class="p">())</span>
</span><span id="L-3309"><a href="#L-3309"><span class="linenos">3309</span></a>
</span><span id="L-3310"><a href="#L-3310"><span class="linenos">3310</span></a> <span class="k">return</span> <span class="n">table_alias</span>
</span><span id="L-3311"><a href="#L-3311"><span class="linenos">3311</span></a>
</span><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_subquery</span><span class="p">(</span>
</span><span id="L-3313"><a href="#L-3313"><span class="linenos">3313</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="n">parse_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-3314"><a href="#L-3314"><span class="linenos">3314</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">Subquery</span><span class="p">]:</span>
</span><span id="L-3315"><a href="#L-3315"><span class="linenos">3315</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="L-3316"><a href="#L-3316"><span class="linenos">3316</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3317"><a href="#L-3317"><span class="linenos">3317</span></a>
</span><span id="L-3318"><a href="#L-3318"><span class="linenos">3318</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3319"><a href="#L-3319"><span class="linenos">3319</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span>
</span><span id="L-3320"><a href="#L-3320"><span class="linenos">3320</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-3321"><a href="#L-3321"><span class="linenos">3321</span></a> <span class="n">pivots</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">(),</span>
</span><span id="L-3322"><a href="#L-3322"><span class="linenos">3322</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">parse_alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-3323"><a href="#L-3323"><span class="linenos">3323</span></a> <span class="n">sample</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">(),</span>
</span><span id="L-3324"><a href="#L-3324"><span class="linenos">3324</span></a> <span class="p">)</span>
</span><span id="L-3325"><a href="#L-3325"><span class="linenos">3325</span></a>
</span><span id="L-3326"><a href="#L-3326"><span class="linenos">3326</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_implicit_unnests_to_explicit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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-3327"><a href="#L-3327"><span class="linenos">3327</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.optimizer.normalize_identifiers</span><span class="w"> </span><span class="kn">import</span> <span class="n">normalize_identifiers</span> <span class="k">as</span> <span class="n">_norm</span>
</span><span id="L-3328"><a href="#L-3328"><span class="linenos">3328</span></a>
</span><span id="L-3329"><a href="#L-3329"><span class="linenos">3329</span></a> <span class="n">refs</span> <span class="o">=</span> <span class="p">{</span><span class="n">_norm</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;from&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">}</span>
</span><span id="L-3330"><a href="#L-3330"><span class="linenos">3330</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">this</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;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]):</span>
</span><span id="L-3331"><a href="#L-3331"><span class="linenos">3331</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-3332"><a href="#L-3332"><span class="linenos">3332</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="L-3333"><a href="#L-3333"><span class="linenos">3333</span></a> <span class="n">normalized_table</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;maybe_column&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-3334"><a href="#L-3334"><span class="linenos">3334</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="n">_norm</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="L-3335"><a href="#L-3335"><span class="linenos">3335</span></a>
</span><span id="L-3336"><a href="#L-3336"><span class="linenos">3336</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">):</span>
</span><span id="L-3337"><a href="#L-3337"><span class="linenos">3337</span></a> <span class="k">if</span> <span class="n">normalized_table</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">refs</span><span class="p">:</span>
</span><span id="L-3338"><a href="#L-3338"><span class="linenos">3338</span></a> <span class="n">table_as_column</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">to_column</span><span class="p">()</span>
</span><span id="L-3339"><a href="#L-3339"><span class="linenos">3339</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">table_as_column</span><span class="p">])</span>
</span><span id="L-3340"><a href="#L-3340"><span class="linenos">3340</span></a>
</span><span id="L-3341"><a href="#L-3341"><span class="linenos">3341</span></a> <span class="c1"># Table.to_column creates a parent Alias node that we want to convert to</span>
</span><span id="L-3342"><a href="#L-3342"><span class="linenos">3342</span></a> <span class="c1"># a TableAlias and attach to the Unnest, so it matches the parser&#39;s output</span>
</span><span id="L-3343"><a href="#L-3343"><span class="linenos">3343</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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;alias&quot;</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">):</span>
</span><span id="L-3344"><a href="#L-3344"><span class="linenos">3344</span></a> <span class="n">table_as_column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">table_as_column</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-3345"><a href="#L-3345"><span class="linenos">3345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">this</span><span class="p">],</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-3346"><a href="#L-3346"><span class="linenos">3346</span></a>
</span><span id="L-3347"><a href="#L-3347"><span class="linenos">3347</span></a> <span class="n">table</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">unnest</span><span class="p">)</span>
</span><span id="L-3348"><a href="#L-3348"><span class="linenos">3348</span></a>
</span><span id="L-3349"><a href="#L-3349"><span class="linenos">3349</span></a> <span class="n">refs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
</span><span id="L-3350"><a href="#L-3350"><span class="linenos">3350</span></a>
</span><span id="L-3351"><a href="#L-3351"><span class="linenos">3351</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3352"><a href="#L-3352"><span class="linenos">3352</span></a>
</span><span id="L-3353"><a href="#L-3353"><span class="linenos">3353</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_query_modifiers</span><span class="p">(</span>
</span><span id="L-3354"><a href="#L-3354"><span class="linenos">3354</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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-3355"><a href="#L-3355"><span class="linenos">3355</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-3356"><a href="#L-3356"><span class="linenos">3356</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="bp">self</span><span class="o">.</span><span class="n">MODIFIABLES</span><span class="p">):</span>
</span><span id="L-3357"><a href="#L-3357"><span class="linenos">3357</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_joins</span><span class="p">():</span>
</span><span id="L-3358"><a href="#L-3358"><span class="linenos">3358</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">join</span><span class="p">)</span>
</span><span id="L-3359"><a href="#L-3359"><span class="linenos">3359</span></a> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
</span><span id="L-3360"><a href="#L-3360"><span class="linenos">3360</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">lateral</span><span class="p">)</span>
</span><span id="L-3361"><a href="#L-3361"><span class="linenos">3361</span></a>
</span><span id="L-3362"><a href="#L-3362"><span class="linenos">3362</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-3363"><a href="#L-3363"><span class="linenos">3363</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_MODIFIER_PARSERS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-3364"><a href="#L-3364"><span class="linenos">3364</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_MODIFIER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span><span class="p">]</span>
</span><span id="L-3365"><a href="#L-3365"><span class="linenos">3365</span></a> <span class="n">key</span><span class="p">,</span> <span class="n">expression</span> <span class="o">=</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-3366"><a href="#L-3366"><span class="linenos">3366</span></a>
</span><span id="L-3367"><a href="#L-3367"><span class="linenos">3367</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="L-3368"><a href="#L-3368"><span class="linenos">3368</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="L-3369"><a href="#L-3369"><span class="linenos">3369</span></a> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;limit&quot;</span><span class="p">:</span>
</span><span id="L-3370"><a href="#L-3370"><span class="linenos">3370</span></a> <span class="n">offset</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">pop</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="L-3371"><a href="#L-3371"><span class="linenos">3371</span></a>
</span><span id="L-3372"><a href="#L-3372"><span class="linenos">3372</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
</span><span id="L-3373"><a href="#L-3373"><span class="linenos">3373</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
</span><span id="L-3374"><a href="#L-3374"><span class="linenos">3374</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
</span><span id="L-3375"><a href="#L-3375"><span class="linenos">3375</span></a>
</span><span id="L-3376"><a href="#L-3376"><span class="linenos">3376</span></a> <span class="n">limit_by_expressions</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
</span><span id="L-3377"><a href="#L-3377"><span class="linenos">3377</span></a> <span class="n">expression</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="kc">None</span><span class="p">)</span>
</span><span id="L-3378"><a href="#L-3378"><span class="linenos">3378</span></a> <span class="n">offset</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="n">limit_by_expressions</span><span class="p">)</span>
</span><span id="L-3379"><a href="#L-3379"><span class="linenos">3379</span></a> <span class="k">continue</span>
</span><span id="L-3380"><a href="#L-3380"><span class="linenos">3380</span></a> <span class="k">break</span>
</span><span id="L-3381"><a href="#L-3381"><span class="linenos">3381</span></a>
</span><span id="L-3382"><a href="#L-3382"><span class="linenos">3382</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_IMPLICIT_UNNEST</span> <span class="ow">and</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</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;from&quot;</span><span class="p">):</span>
</span><span id="L-3383"><a href="#L-3383"><span class="linenos">3383</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_implicit_unnests_to_explicit</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-3384"><a href="#L-3384"><span class="linenos">3384</span></a>
</span><span id="L-3385"><a href="#L-3385"><span class="linenos">3385</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3386"><a href="#L-3386"><span class="linenos">3386</span></a>
</span><span id="L-3387"><a href="#L-3387"><span class="linenos">3387</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_hint_fallback_to_string</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
</span><span id="L-3388"><a href="#L-3388"><span class="linenos">3388</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="L-3389"><a href="#L-3389"><span class="linenos">3389</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-3390"><a href="#L-3390"><span class="linenos">3390</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-3391"><a href="#L-3391"><span class="linenos">3391</span></a>
</span><span id="L-3392"><a href="#L-3392"><span class="linenos">3392</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
</span><span id="L-3393"><a href="#L-3393"><span class="linenos">3393</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
</span><span id="L-3394"><a href="#L-3394"><span class="linenos">3394</span></a>
</span><span id="L-3395"><a href="#L-3395"><span class="linenos">3395</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_hint_function_call</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-3396"><a href="#L-3396"><span class="linenos">3396</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_call</span><span class="p">()</span>
</span><span id="L-3397"><a href="#L-3397"><span class="linenos">3397</span></a>
</span><span id="L-3398"><a href="#L-3398"><span class="linenos">3398</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_hint_body</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
</span><span id="L-3399"><a href="#L-3399"><span class="linenos">3399</span></a> <span class="n">start_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-3400"><a href="#L-3400"><span class="linenos">3400</span></a> <span class="n">should_fallback_to_string</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-3401"><a href="#L-3401"><span class="linenos">3401</span></a>
</span><span id="L-3402"><a href="#L-3402"><span class="linenos">3402</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-3403"><a href="#L-3403"><span class="linenos">3403</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="L-3404"><a href="#L-3404"><span class="linenos">3404</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span>
</span><span id="L-3405"><a href="#L-3405"><span class="linenos">3405</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="L-3406"><a href="#L-3406"><span class="linenos">3406</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint_function_call</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-3407"><a href="#L-3407"><span class="linenos">3407</span></a> <span class="p">),</span>
</span><span id="L-3408"><a href="#L-3408"><span class="linenos">3408</span></a> <span class="p">[],</span>
</span><span id="L-3409"><a href="#L-3409"><span class="linenos">3409</span></a> <span class="p">):</span>
</span><span id="L-3410"><a href="#L-3410"><span class="linenos">3410</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
</span><span id="L-3411"><a href="#L-3411"><span class="linenos">3411</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
</span><span id="L-3412"><a href="#L-3412"><span class="linenos">3412</span></a> <span class="n">should_fallback_to_string</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-3413"><a href="#L-3413"><span class="linenos">3413</span></a>
</span><span id="L-3414"><a href="#L-3414"><span class="linenos">3414</span></a> <span class="k">if</span> <span class="n">should_fallback_to_string</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-3415"><a href="#L-3415"><span class="linenos">3415</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">start_index</span><span class="p">)</span>
</span><span id="L-3416"><a href="#L-3416"><span class="linenos">3416</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint_fallback_to_string</span><span class="p">()</span>
</span><span id="L-3417"><a href="#L-3417"><span class="linenos">3417</span></a>
</span><span id="L-3418"><a href="#L-3418"><span class="linenos">3418</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">hints</span><span class="p">)</span>
</span><span id="L-3419"><a href="#L-3419"><span class="linenos">3419</span></a>
</span><span id="L-3420"><a href="#L-3420"><span class="linenos">3420</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
</span><span id="L-3421"><a href="#L-3421"><span class="linenos">3421</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
</span><span id="L-3422"><a href="#L-3422"><span class="linenos">3422</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">into</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="L-3423"><a href="#L-3423"><span class="linenos">3423</span></a>
</span><span id="L-3424"><a href="#L-3424"><span class="linenos">3424</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3425"><a href="#L-3425"><span class="linenos">3425</span></a>
</span><span id="L-3426"><a href="#L-3426"><span class="linenos">3426</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_into</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">]:</span>
</span><span id="L-3427"><a href="#L-3427"><span class="linenos">3427</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
</span><span id="L-3428"><a href="#L-3428"><span class="linenos">3428</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3429"><a href="#L-3429"><span class="linenos">3429</span></a>
</span><span id="L-3430"><a href="#L-3430"><span class="linenos">3430</span></a> <span class="n">temp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">)</span>
</span><span id="L-3431"><a href="#L-3431"><span class="linenos">3431</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
</span><span id="L-3432"><a href="#L-3432"><span class="linenos">3432</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="L-3433"><a href="#L-3433"><span class="linenos">3433</span></a>
</span><span id="L-3434"><a href="#L-3434"><span class="linenos">3434</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3435"><a href="#L-3435"><span class="linenos">3435</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">temporary</span><span class="o">=</span><span class="n">temp</span><span class="p">,</span> <span class="n">unlogged</span><span class="o">=</span><span class="n">unlogged</span>
</span><span id="L-3436"><a href="#L-3436"><span class="linenos">3436</span></a> <span class="p">)</span>
</span><span id="L-3437"><a href="#L-3437"><span class="linenos">3437</span></a>
</span><span id="L-3438"><a href="#L-3438"><span class="linenos">3438</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_from</span><span class="p">(</span>
</span><span id="L-3439"><a href="#L-3439"><span class="linenos">3439</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</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="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-3440"><a href="#L-3440"><span class="linenos">3440</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">From</span><span class="p">]:</span>
</span><span id="L-3441"><a href="#L-3441"><span class="linenos">3441</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
</span><span id="L-3442"><a href="#L-3442"><span class="linenos">3442</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3443"><a href="#L-3443"><span class="linenos">3443</span></a>
</span><span id="L-3444"><a href="#L-3444"><span class="linenos">3444</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3445"><a href="#L-3445"><span class="linenos">3445</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
</span><span id="L-3446"><a href="#L-3446"><span class="linenos">3446</span></a> <span class="p">)</span>
</span><span id="L-3447"><a href="#L-3447"><span class="linenos">3447</span></a>
</span><span id="L-3448"><a href="#L-3448"><span class="linenos">3448</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_match_recognize_measure</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognizeMeasure</span><span class="p">:</span>
</span><span id="L-3449"><a href="#L-3449"><span class="linenos">3449</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3450"><a href="#L-3450"><span class="linenos">3450</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognizeMeasure</span><span class="p">,</span>
</span><span id="L-3451"><a href="#L-3451"><span class="linenos">3451</span></a> <span class="n">window_frame</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;FINAL&quot;</span><span class="p">,</span> <span class="s2">&quot;RUNNING&quot;</span><span class="p">))</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span>
</span><span id="L-3452"><a href="#L-3452"><span class="linenos">3452</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">(),</span>
</span><span id="L-3453"><a href="#L-3453"><span class="linenos">3453</span></a> <span class="p">)</span>
</span><span id="L-3454"><a href="#L-3454"><span class="linenos">3454</span></a>
</span><span id="L-3455"><a href="#L-3455"><span class="linenos">3455</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_match_recognize</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">]:</span>
</span><span id="L-3456"><a href="#L-3456"><span class="linenos">3456</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">):</span>
</span><span id="L-3457"><a href="#L-3457"><span class="linenos">3457</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3458"><a href="#L-3458"><span class="linenos">3458</span></a>
</span><span id="L-3459"><a href="#L-3459"><span class="linenos">3459</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="L-3460"><a href="#L-3460"><span class="linenos">3460</span></a>
</span><span id="L-3461"><a href="#L-3461"><span class="linenos">3461</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">()</span>
</span><span id="L-3462"><a href="#L-3462"><span class="linenos">3462</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
</span><span id="L-3463"><a href="#L-3463"><span class="linenos">3463</span></a>
</span><span id="L-3464"><a href="#L-3464"><span class="linenos">3464</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-3465"><a href="#L-3465"><span class="linenos">3465</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_match_recognize_measure</span><span class="p">)</span>
</span><span id="L-3466"><a href="#L-3466"><span class="linenos">3466</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MEASURES&quot;</span><span class="p">)</span>
</span><span id="L-3467"><a href="#L-3467"><span class="linenos">3467</span></a> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-3468"><a href="#L-3468"><span class="linenos">3468</span></a> <span class="p">)</span>
</span><span id="L-3469"><a href="#L-3469"><span class="linenos">3469</span></a>
</span><span id="L-3470"><a href="#L-3470"><span class="linenos">3470</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
</span><span id="L-3471"><a href="#L-3471"><span class="linenos">3471</span></a> <span class="n">rows</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="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
</span><span id="L-3472"><a href="#L-3472"><span class="linenos">3472</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
</span><span id="L-3473"><a href="#L-3473"><span class="linenos">3473</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;ALL ROWS PER MATCH&quot;</span>
</span><span id="L-3474"><a href="#L-3474"><span class="linenos">3474</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SHOW&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
</span><span id="L-3475"><a href="#L-3475"><span class="linenos">3475</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
</span><span id="L-3476"><a href="#L-3476"><span class="linenos">3476</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
</span><span id="L-3477"><a href="#L-3477"><span class="linenos">3477</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
</span><span id="L-3478"><a href="#L-3478"><span class="linenos">3478</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNMATCHED&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
</span><span id="L-3479"><a href="#L-3479"><span class="linenos">3479</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; WITH UNMATCHED ROWS&quot;</span>
</span><span id="L-3480"><a href="#L-3480"><span class="linenos">3480</span></a> <span class="n">rows</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">text</span><span class="p">)</span>
</span><span id="L-3481"><a href="#L-3481"><span class="linenos">3481</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3482"><a href="#L-3482"><span class="linenos">3482</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3483"><a href="#L-3483"><span class="linenos">3483</span></a>
</span><span id="L-3484"><a href="#L-3484"><span class="linenos">3484</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;SKIP&quot;</span><span class="p">):</span>
</span><span id="L-3485"><a href="#L-3485"><span class="linenos">3485</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
</span><span id="L-3486"><a href="#L-3486"><span class="linenos">3486</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PAST&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
</span><span id="L-3487"><a href="#L-3487"><span class="linenos">3487</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; PAST LAST ROW&quot;</span>
</span><span id="L-3488"><a href="#L-3488"><span class="linenos">3488</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;NEXT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
</span><span id="L-3489"><a href="#L-3489"><span class="linenos">3489</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; TO NEXT ROW&quot;</span>
</span><span id="L-3490"><a href="#L-3490"><span class="linenos">3490</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">):</span>
</span><span id="L-3491"><a href="#L-3491"><span class="linenos">3491</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO FIRST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
</span><span id="L-3492"><a href="#L-3492"><span class="linenos">3492</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
</span><span id="L-3493"><a href="#L-3493"><span class="linenos">3493</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO LAST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
</span><span id="L-3494"><a href="#L-3494"><span class="linenos">3494</span></a> <span class="n">after</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">text</span><span class="p">)</span>
</span><span id="L-3495"><a href="#L-3495"><span class="linenos">3495</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3496"><a href="#L-3496"><span class="linenos">3496</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3497"><a href="#L-3497"><span class="linenos">3497</span></a>
</span><span id="L-3498"><a href="#L-3498"><span class="linenos">3498</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATTERN&quot;</span><span class="p">):</span>
</span><span id="L-3499"><a href="#L-3499"><span class="linenos">3499</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="L-3500"><a href="#L-3500"><span class="linenos">3500</span></a>
</span><span id="L-3501"><a href="#L-3501"><span class="linenos">3501</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-3502"><a href="#L-3502"><span class="linenos">3502</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
</span><span id="L-3503"><a href="#L-3503"><span class="linenos">3503</span></a>
</span><span id="L-3504"><a href="#L-3504"><span class="linenos">3504</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
</span><span id="L-3505"><a href="#L-3505"><span class="linenos">3505</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="L-3506"><a href="#L-3506"><span class="linenos">3506</span></a>
</span><span id="L-3507"><a href="#L-3507"><span class="linenos">3507</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-3508"><a href="#L-3508"><span class="linenos">3508</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
</span><span id="L-3509"><a href="#L-3509"><span class="linenos">3509</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="L-3510"><a href="#L-3510"><span class="linenos">3510</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">:</span>
</span><span id="L-3511"><a href="#L-3511"><span class="linenos">3511</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
</span><span id="L-3512"><a href="#L-3512"><span class="linenos">3512</span></a>
</span><span id="L-3513"><a href="#L-3513"><span class="linenos">3513</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-3514"><a href="#L-3514"><span class="linenos">3514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-3515"><a href="#L-3515"><span class="linenos">3515</span></a>
</span><span id="L-3516"><a href="#L-3516"><span class="linenos">3516</span></a> <span class="k">if</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-3517"><a href="#L-3517"><span class="linenos">3517</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
</span><span id="L-3518"><a href="#L-3518"><span class="linenos">3518</span></a>
</span><span id="L-3519"><a href="#L-3519"><span class="linenos">3519</span></a> <span class="n">pattern</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="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
</span><span id="L-3520"><a href="#L-3520"><span class="linenos">3520</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3521"><a href="#L-3521"><span class="linenos">3521</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3522"><a href="#L-3522"><span class="linenos">3522</span></a>
</span><span id="L-3523"><a href="#L-3523"><span class="linenos">3523</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-3524"><a href="#L-3524"><span class="linenos">3524</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_name_as_expression</span><span class="p">)</span>
</span><span id="L-3525"><a href="#L-3525"><span class="linenos">3525</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFINE&quot;</span><span class="p">)</span>
</span><span id="L-3526"><a href="#L-3526"><span class="linenos">3526</span></a> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-3527"><a href="#L-3527"><span class="linenos">3527</span></a> <span class="p">)</span>
</span><span id="L-3528"><a href="#L-3528"><span class="linenos">3528</span></a>
</span><span id="L-3529"><a href="#L-3529"><span class="linenos">3529</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-3530"><a href="#L-3530"><span class="linenos">3530</span></a>
</span><span id="L-3531"><a href="#L-3531"><span class="linenos">3531</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3532"><a href="#L-3532"><span class="linenos">3532</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
</span><span id="L-3533"><a href="#L-3533"><span class="linenos">3533</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
</span><span id="L-3534"><a href="#L-3534"><span class="linenos">3534</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
</span><span id="L-3535"><a href="#L-3535"><span class="linenos">3535</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
</span><span id="L-3536"><a href="#L-3536"><span class="linenos">3536</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
</span><span id="L-3537"><a href="#L-3537"><span class="linenos">3537</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
</span><span id="L-3538"><a href="#L-3538"><span class="linenos">3538</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
</span><span id="L-3539"><a href="#L-3539"><span class="linenos">3539</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
</span><span id="L-3540"><a href="#L-3540"><span class="linenos">3540</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
</span><span id="L-3541"><a href="#L-3541"><span class="linenos">3541</span></a> <span class="p">)</span>
</span><span id="L-3542"><a href="#L-3542"><span class="linenos">3542</span></a>
</span><span id="L-3543"><a href="#L-3543"><span class="linenos">3543</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_lateral</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">]:</span>
</span><span id="L-3544"><a href="#L-3544"><span class="linenos">3544</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">)</span>
</span><span id="L-3545"><a href="#L-3545"><span class="linenos">3545</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cross_apply</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">):</span>
</span><span id="L-3546"><a href="#L-3546"><span class="linenos">3546</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-3547"><a href="#L-3547"><span class="linenos">3547</span></a>
</span><span id="L-3548"><a href="#L-3548"><span class="linenos">3548</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-3549"><a href="#L-3549"><span class="linenos">3549</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-3550"><a href="#L-3550"><span class="linenos">3550</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3551"><a href="#L-3551"><span class="linenos">3551</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3552"><a href="#L-3552"><span class="linenos">3552</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LATERAL</span><span class="p">):</span>
</span><span id="L-3553"><a href="#L-3553"><span class="linenos">3553</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-3554"><a href="#L-3554"><span class="linenos">3554</span></a> <span class="n">view</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">)</span>
</span><span id="L-3555"><a href="#L-3555"><span class="linenos">3555</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">)</span>
</span><span id="L-3556"><a href="#L-3556"><span class="linenos">3556</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3557"><a href="#L-3557"><span class="linenos">3557</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3558"><a href="#L-3558"><span class="linenos">3558</span></a>
</span><span id="L-3559"><a href="#L-3559"><span class="linenos">3559</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="L-3560"><a href="#L-3560"><span class="linenos">3560</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-3561"><a href="#L-3561"><span class="linenos">3561</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
</span><span id="L-3562"><a href="#L-3562"><span class="linenos">3562</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
</span><span id="L-3563"><a href="#L-3563"><span class="linenos">3563</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-3564"><a href="#L-3564"><span class="linenos">3564</span></a> <span class="p">)</span>
</span><span id="L-3565"><a href="#L-3565"><span class="linenos">3565</span></a>
</span><span id="L-3566"><a href="#L-3566"><span class="linenos">3566</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
</span><span id="L-3567"><a href="#L-3567"><span class="linenos">3567</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">(</span>
</span><span id="L-3568"><a href="#L-3568"><span class="linenos">3568</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-3569"><a href="#L-3569"><span class="linenos">3569</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="L-3570"><a href="#L-3570"><span class="linenos">3570</span></a> <span class="p">)</span>
</span><span id="L-3571"><a href="#L-3571"><span class="linenos">3571</span></a>
</span><span id="L-3572"><a href="#L-3572"><span class="linenos">3572</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
</span><span id="L-3573"><a href="#L-3573"><span class="linenos">3573</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-3574"><a href="#L-3574"><span class="linenos">3574</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="k">else</span> <span class="p">[]</span>
</span><span id="L-3575"><a href="#L-3575"><span class="linenos">3575</span></a> <span class="n">table_alias</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">TableAlias</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3576"><a href="#L-3576"><span class="linenos">3576</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
</span><span id="L-3577"><a href="#L-3577"><span class="linenos">3577</span></a> <span class="p">)</span>
</span><span id="L-3578"><a href="#L-3578"><span class="linenos">3578</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">))</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
</span><span id="L-3579"><a href="#L-3579"><span class="linenos">3579</span></a> <span class="c1"># We move the alias from the lateral&#39;s child node to the lateral itself</span>
</span><span id="L-3580"><a href="#L-3580"><span class="linenos">3580</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span><span id="L-3581"><a href="#L-3581"><span class="linenos">3581</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3582"><a href="#L-3582"><span class="linenos">3582</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
</span><span id="L-3583"><a href="#L-3583"><span class="linenos">3583</span></a>
</span><span id="L-3584"><a href="#L-3584"><span class="linenos">3584</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3585"><a href="#L-3585"><span class="linenos">3585</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
</span><span id="L-3586"><a href="#L-3586"><span class="linenos">3586</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-3587"><a href="#L-3587"><span class="linenos">3587</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
</span><span id="L-3588"><a href="#L-3588"><span class="linenos">3588</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
</span><span id="L-3589"><a href="#L-3589"><span class="linenos">3589</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</span><span class="p">,</span>
</span><span id="L-3590"><a href="#L-3590"><span class="linenos">3590</span></a> <span class="n">cross_apply</span><span class="o">=</span><span class="n">cross_apply</span><span class="p">,</span>
</span><span id="L-3591"><a href="#L-3591"><span class="linenos">3591</span></a> <span class="p">)</span>
</span><span id="L-3592"><a href="#L-3592"><span class="linenos">3592</span></a>
</span><span id="L-3593"><a href="#L-3593"><span class="linenos">3593</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_join_parts</span><span class="p">(</span>
</span><span id="L-3594"><a href="#L-3594"><span class="linenos">3594</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-3595"><a href="#L-3595"><span class="linenos">3595</span></a> <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="n">Token</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">Token</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">Token</span><span class="p">]]:</span>
</span><span id="L-3596"><a href="#L-3596"><span class="linenos">3596</span></a> <span class="k">return</span> <span class="p">(</span>
</span><span id="L-3597"><a href="#L-3597"><span class="linenos">3597</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
</span><span id="L-3598"><a href="#L-3598"><span class="linenos">3598</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
</span><span id="L-3599"><a href="#L-3599"><span class="linenos">3599</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
</span><span id="L-3600"><a href="#L-3600"><span class="linenos">3600</span></a> <span class="p">)</span>
</span><span id="L-3601"><a href="#L-3601"><span class="linenos">3601</span></a>
</span><span id="L-3602"><a href="#L-3602"><span class="linenos">3602</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_using_identifiers</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-3603"><a href="#L-3603"><span class="linenos">3603</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_column_as_identifier</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-3604"><a href="#L-3604"><span class="linenos">3604</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-3605"><a href="#L-3605"><span class="linenos">3605</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">Column</span><span class="p">):</span>
</span><span id="L-3606"><a href="#L-3606"><span class="linenos">3606</span></a> <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-3607"><a href="#L-3607"><span class="linenos">3607</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3608"><a href="#L-3608"><span class="linenos">3608</span></a>
</span><span id="L-3609"><a href="#L-3609"><span class="linenos">3609</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="n">_parse_column_as_identifier</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-3610"><a href="#L-3610"><span class="linenos">3610</span></a>
</span><span id="L-3611"><a href="#L-3611"><span class="linenos">3611</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_join</span><span class="p">(</span>
</span><span id="L-3612"><a href="#L-3612"><span class="linenos">3612</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</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="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-3613"><a href="#L-3613"><span class="linenos">3613</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">Join</span><span class="p">]:</span>
</span><span id="L-3614"><a href="#L-3614"><span class="linenos">3614</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="L-3615"><a href="#L-3615"><span class="linenos">3615</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_try_parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">)</span>
</span><span id="L-3616"><a href="#L-3616"><span class="linenos">3616</span></a> <span class="k">if</span> <span class="n">table</span><span class="p">:</span>
</span><span id="L-3617"><a href="#L-3617"><span class="linenos">3617</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">)</span>
</span><span id="L-3618"><a href="#L-3618"><span class="linenos">3618</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3619"><a href="#L-3619"><span class="linenos">3619</span></a>
</span><span id="L-3620"><a href="#L-3620"><span class="linenos">3620</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-3621"><a href="#L-3621"><span class="linenos">3621</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
</span><span id="L-3622"><a href="#L-3622"><span class="linenos">3622</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-3623"><a href="#L-3623"><span class="linenos">3623</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRAIGHT_JOIN</span><span class="p">)</span>
</span><span id="L-3624"><a href="#L-3624"><span class="linenos">3624</span></a>
</span><span id="L-3625"><a href="#L-3625"><span class="linenos">3625</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
</span><span id="L-3626"><a href="#L-3626"><span class="linenos">3626</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-3627"><a href="#L-3627"><span class="linenos">3627</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3628"><a href="#L-3628"><span class="linenos">3628</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3629"><a href="#L-3629"><span class="linenos">3629</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3630"><a href="#L-3630"><span class="linenos">3630</span></a>
</span><span id="L-3631"><a href="#L-3631"><span class="linenos">3631</span></a> <span class="n">outer_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="L-3632"><a href="#L-3632"><span class="linenos">3632</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="L-3633"><a href="#L-3633"><span class="linenos">3633</span></a>
</span><span id="L-3634"><a href="#L-3634"><span class="linenos">3634</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">outer_apply</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">cross_apply</span><span class="p">:</span>
</span><span id="L-3635"><a href="#L-3635"><span class="linenos">3635</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3636"><a href="#L-3636"><span class="linenos">3636</span></a>
</span><span id="L-3637"><a href="#L-3637"><span class="linenos">3637</span></a> <span class="n">kwargs</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">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
</span><span id="L-3638"><a href="#L-3638"><span class="linenos">3638</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="L-3639"><a href="#L-3639"><span class="linenos">3639</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;expressions&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="L-3640"><a href="#L-3640"><span class="linenos">3640</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)</span>
</span><span id="L-3641"><a href="#L-3641"><span class="linenos">3641</span></a> <span class="p">)</span>
</span><span id="L-3642"><a href="#L-3642"><span class="linenos">3642</span></a>
</span><span id="L-3643"><a href="#L-3643"><span class="linenos">3643</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
</span><span id="L-3644"><a href="#L-3644"><span class="linenos">3644</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-3645"><a href="#L-3645"><span class="linenos">3645</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
</span><span id="L-3646"><a href="#L-3646"><span class="linenos">3646</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-3647"><a href="#L-3647"><span class="linenos">3647</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
</span><span id="L-3648"><a href="#L-3648"><span class="linenos">3648</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kind</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-3649"><a href="#L-3649"><span class="linenos">3649</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
</span><span id="L-3650"><a href="#L-3650"><span class="linenos">3650</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;hint&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hint</span>
</span><span id="L-3651"><a href="#L-3651"><span class="linenos">3651</span></a>
</span><span id="L-3652"><a href="#L-3652"><span class="linenos">3652</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_CONDITION</span><span class="p">):</span>
</span><span id="L-3653"><a href="#L-3653"><span class="linenos">3653</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;match_condition&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_comparison</span><span class="p">)</span>
</span><span id="L-3654"><a href="#L-3654"><span class="linenos">3654</span></a>
</span><span id="L-3655"><a href="#L-3655"><span class="linenos">3655</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
</span><span id="L-3656"><a href="#L-3656"><span class="linenos">3656</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-3657"><a href="#L-3657"><span class="linenos">3657</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
</span><span id="L-3658"><a href="#L-3658"><span class="linenos">3658</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_using_identifiers</span><span class="p">()</span>
</span><span id="L-3659"><a href="#L-3659"><span class="linenos">3659</span></a> <span class="k">elif</span> <span class="p">(</span>
</span><span id="L-3660"><a href="#L-3660"><span class="linenos">3660</span></a> <span class="ow">not</span> <span class="p">(</span><span class="n">outer_apply</span> <span class="ow">or</span> <span class="n">cross_apply</span><span class="p">)</span>
</span><span id="L-3661"><a href="#L-3661"><span class="linenos">3661</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span>
</span><span id="L-3662"><a href="#L-3662"><span class="linenos">3662</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">))</span>
</span><span id="L-3663"><a href="#L-3663"><span class="linenos">3663</span></a> <span class="p">):</span>
</span><span id="L-3664"><a href="#L-3664"><span class="linenos">3664</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-3665"><a href="#L-3665"><span class="linenos">3665</span></a> <span class="n">joins</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">list</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_joins</span><span class="p">())</span>
</span><span id="L-3666"><a href="#L-3666"><span class="linenos">3666</span></a>
</span><span id="L-3667"><a href="#L-3667"><span class="linenos">3667</span></a> <span class="k">if</span> <span class="n">joins</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
</span><span id="L-3668"><a href="#L-3668"><span class="linenos">3668</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-3669"><a href="#L-3669"><span class="linenos">3669</span></a> <span class="k">elif</span> <span class="n">joins</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
</span><span id="L-3670"><a href="#L-3670"><span class="linenos">3670</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_using_identifiers</span><span class="p">()</span>
</span><span id="L-3671"><a href="#L-3671"><span class="linenos">3671</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3672"><a href="#L-3672"><span class="linenos">3672</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3673"><a href="#L-3673"><span class="linenos">3673</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-3674"><a href="#L-3674"><span class="linenos">3674</span></a>
</span><span id="L-3675"><a href="#L-3675"><span class="linenos">3675</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">joins</span> <span class="k">if</span> <span class="n">joins</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="L-3676"><a href="#L-3676"><span class="linenos">3676</span></a>
</span><span id="L-3677"><a href="#L-3677"><span class="linenos">3677</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">if</span> <span class="n">token</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">]</span>
</span><span id="L-3678"><a href="#L-3678"><span class="linenos">3678</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="L-3679"><a href="#L-3679"><span class="linenos">3679</span></a>
</span><span id="L-3680"><a href="#L-3680"><span class="linenos">3680</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_opclass</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-3681"><a href="#L-3681"><span class="linenos">3681</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-3682"><a href="#L-3682"><span class="linenos">3682</span></a>
</span><span id="L-3683"><a href="#L-3683"><span class="linenos">3683</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPCLASS_FOLLOW_KEYWORDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-3684"><a href="#L-3684"><span class="linenos">3684</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3685"><a href="#L-3685"><span class="linenos">3685</span></a>
</span><span id="L-3686"><a href="#L-3686"><span class="linenos">3686</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPTYPE_FOLLOW_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-3687"><a href="#L-3687"><span class="linenos">3687</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Opclass</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="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
</span><span id="L-3688"><a href="#L-3688"><span class="linenos">3688</span></a>
</span><span id="L-3689"><a href="#L-3689"><span class="linenos">3689</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3690"><a href="#L-3690"><span class="linenos">3690</span></a>
</span><span id="L-3691"><a href="#L-3691"><span class="linenos">3691</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_index_params</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexParameters</span><span class="p">:</span>
</span><span id="L-3692"><a href="#L-3692"><span class="linenos">3692</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-3693"><a href="#L-3693"><span class="linenos">3693</span></a>
</span><span id="L-3694"><a href="#L-3694"><span class="linenos">3694</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-3695"><a href="#L-3695"><span class="linenos">3695</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_with_operator</span><span class="p">)</span>
</span><span id="L-3696"><a href="#L-3696"><span class="linenos">3696</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3697"><a href="#L-3697"><span class="linenos">3697</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3698"><a href="#L-3698"><span class="linenos">3698</span></a>
</span><span id="L-3699"><a href="#L-3699"><span class="linenos">3699</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-3700"><a href="#L-3700"><span class="linenos">3700</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">()</span>
</span><span id="L-3701"><a href="#L-3701"><span class="linenos">3701</span></a> <span class="n">with_storage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_properties</span><span class="p">()</span>
</span><span id="L-3702"><a href="#L-3702"><span class="linenos">3702</span></a> <span class="n">tablespace</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-3703"><a href="#L-3703"><span class="linenos">3703</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-3704"><a href="#L-3704"><span class="linenos">3704</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;TABLESPACE&quot;</span><span class="p">)</span>
</span><span id="L-3705"><a href="#L-3705"><span class="linenos">3705</span></a> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-3706"><a href="#L-3706"><span class="linenos">3706</span></a> <span class="p">)</span>
</span><span id="L-3707"><a href="#L-3707"><span class="linenos">3707</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">()</span>
</span><span id="L-3708"><a href="#L-3708"><span class="linenos">3708</span></a>
</span><span id="L-3709"><a href="#L-3709"><span class="linenos">3709</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-3710"><a href="#L-3710"><span class="linenos">3710</span></a>
</span><span id="L-3711"><a href="#L-3711"><span class="linenos">3711</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3712"><a href="#L-3712"><span class="linenos">3712</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IndexParameters</span><span class="p">,</span>
</span><span id="L-3713"><a href="#L-3713"><span class="linenos">3713</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
</span><span id="L-3714"><a href="#L-3714"><span class="linenos">3714</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
</span><span id="L-3715"><a href="#L-3715"><span class="linenos">3715</span></a> <span class="n">include</span><span class="o">=</span><span class="n">include</span><span class="p">,</span>
</span><span id="L-3716"><a href="#L-3716"><span class="linenos">3716</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition_by</span><span class="p">,</span>
</span><span id="L-3717"><a href="#L-3717"><span class="linenos">3717</span></a> <span class="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
</span><span id="L-3718"><a href="#L-3718"><span class="linenos">3718</span></a> <span class="n">with_storage</span><span class="o">=</span><span class="n">with_storage</span><span class="p">,</span>
</span><span id="L-3719"><a href="#L-3719"><span class="linenos">3719</span></a> <span class="n">tablespace</span><span class="o">=</span><span class="n">tablespace</span><span class="p">,</span>
</span><span id="L-3720"><a href="#L-3720"><span class="linenos">3720</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
</span><span id="L-3721"><a href="#L-3721"><span class="linenos">3721</span></a> <span class="p">)</span>
</span><span id="L-3722"><a href="#L-3722"><span class="linenos">3722</span></a>
</span><span id="L-3723"><a href="#L-3723"><span class="linenos">3723</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_index</span><span class="p">(</span>
</span><span id="L-3724"><a href="#L-3724"><span class="linenos">3724</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">index</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 class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-3725"><a href="#L-3725"><span class="linenos">3725</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">Index</span><span class="p">]:</span>
</span><span id="L-3726"><a href="#L-3726"><span class="linenos">3726</span></a> <span class="k">if</span> <span class="n">index</span> <span class="ow">or</span> <span class="n">anonymous</span><span class="p">:</span>
</span><span id="L-3727"><a href="#L-3727"><span class="linenos">3727</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3728"><a href="#L-3728"><span class="linenos">3728</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3729"><a href="#L-3729"><span class="linenos">3729</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3730"><a href="#L-3730"><span class="linenos">3730</span></a>
</span><span id="L-3731"><a href="#L-3731"><span class="linenos">3731</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
</span><span id="L-3732"><a href="#L-3732"><span class="linenos">3732</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span> <span class="c1"># hive</span>
</span><span id="L-3733"><a href="#L-3733"><span class="linenos">3733</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-3734"><a href="#L-3734"><span class="linenos">3734</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3735"><a href="#L-3735"><span class="linenos">3735</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">)</span>
</span><span id="L-3736"><a href="#L-3736"><span class="linenos">3736</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PRIMARY&quot;</span><span class="p">)</span>
</span><span id="L-3737"><a href="#L-3737"><span class="linenos">3737</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AMP&quot;</span><span class="p">)</span>
</span><span id="L-3738"><a href="#L-3738"><span class="linenos">3738</span></a>
</span><span id="L-3739"><a href="#L-3739"><span class="linenos">3739</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">):</span>
</span><span id="L-3740"><a href="#L-3740"><span class="linenos">3740</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3741"><a href="#L-3741"><span class="linenos">3741</span></a>
</span><span id="L-3742"><a href="#L-3742"><span class="linenos">3742</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-3743"><a href="#L-3743"><span class="linenos">3743</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3744"><a href="#L-3744"><span class="linenos">3744</span></a>
</span><span id="L-3745"><a href="#L-3745"><span class="linenos">3745</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_params</span><span class="p">()</span>
</span><span id="L-3746"><a href="#L-3746"><span class="linenos">3746</span></a>
</span><span id="L-3747"><a href="#L-3747"><span class="linenos">3747</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3748"><a href="#L-3748"><span class="linenos">3748</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
</span><span id="L-3749"><a href="#L-3749"><span class="linenos">3749</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
</span><span id="L-3750"><a href="#L-3750"><span class="linenos">3750</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
</span><span id="L-3751"><a href="#L-3751"><span class="linenos">3751</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
</span><span id="L-3752"><a href="#L-3752"><span class="linenos">3752</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
</span><span id="L-3753"><a href="#L-3753"><span class="linenos">3753</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
</span><span id="L-3754"><a href="#L-3754"><span class="linenos">3754</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
</span><span id="L-3755"><a href="#L-3755"><span class="linenos">3755</span></a> <span class="p">)</span>
</span><span id="L-3756"><a href="#L-3756"><span class="linenos">3756</span></a>
</span><span id="L-3757"><a href="#L-3757"><span class="linenos">3757</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_table_hints</span><span class="p">(</span><span class="bp">self</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">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><span id="L-3758"><a href="#L-3758"><span class="linenos">3758</span></a> <span class="n">hints</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="o">=</span> <span class="p">[]</span>
</span><span id="L-3759"><a href="#L-3759"><span class="linenos">3759</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-3760"><a href="#L-3760"><span class="linenos">3760</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
</span><span id="L-3761"><a href="#L-3761"><span class="linenos">3761</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="L-3762"><a href="#L-3762"><span class="linenos">3762</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3763"><a href="#L-3763"><span class="linenos">3763</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">,</span>
</span><span id="L-3764"><a href="#L-3764"><span class="linenos">3764</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="L-3765"><a href="#L-3765"><span class="linenos">3765</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-3766"><a href="#L-3766"><span class="linenos">3766</span></a> <span class="p">),</span>
</span><span id="L-3767"><a href="#L-3767"><span class="linenos">3767</span></a> <span class="p">)</span>
</span><span id="L-3768"><a href="#L-3768"><span class="linenos">3768</span></a> <span class="p">)</span>
</span><span id="L-3769"><a href="#L-3769"><span class="linenos">3769</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-3770"><a href="#L-3770"><span class="linenos">3770</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3771"><a href="#L-3771"><span class="linenos">3771</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
</span><span id="L-3772"><a href="#L-3772"><span class="linenos">3772</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
</span><span id="L-3773"><a href="#L-3773"><span class="linenos">3773</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-3774"><a href="#L-3774"><span class="linenos">3774</span></a>
</span><span id="L-3775"><a href="#L-3775"><span class="linenos">3775</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">KEY</span><span class="p">))</span>
</span><span id="L-3776"><a href="#L-3776"><span class="linenos">3776</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
</span><span id="L-3777"><a href="#L-3777"><span class="linenos">3777</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-3778"><a href="#L-3778"><span class="linenos">3778</span></a>
</span><span id="L-3779"><a href="#L-3779"><span class="linenos">3779</span></a> <span class="n">hint</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="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
</span><span id="L-3780"><a href="#L-3780"><span class="linenos">3780</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
</span><span id="L-3781"><a href="#L-3781"><span class="linenos">3781</span></a>
</span><span id="L-3782"><a href="#L-3782"><span class="linenos">3782</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="L-3783"><a href="#L-3783"><span class="linenos">3783</span></a>
</span><span id="L-3784"><a href="#L-3784"><span class="linenos">3784</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</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">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-3785"><a href="#L-3785"><span class="linenos">3785</span></a> <span class="k">return</span> <span class="p">(</span>
</span><span id="L-3786"><a href="#L-3786"><span class="linenos">3786</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
</span><span id="L-3787"><a href="#L-3787"><span class="linenos">3787</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-3788"><a href="#L-3788"><span class="linenos">3788</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
</span><span id="L-3789"><a href="#L-3789"><span class="linenos">3789</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="L-3790"><a href="#L-3790"><span class="linenos">3790</span></a> <span class="p">)</span>
</span><span id="L-3791"><a href="#L-3791"><span class="linenos">3791</span></a>
</span><span id="L-3792"><a href="#L-3792"><span class="linenos">3792</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_table_parts</span><span class="p">(</span>
</span><span id="L-3793"><a href="#L-3793"><span class="linenos">3793</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">schema</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="n">is_db_reference</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="n">wildcard</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-3794"><a href="#L-3794"><span class="linenos">3794</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span>
</span><span id="L-3795"><a href="#L-3795"><span class="linenos">3795</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3796"><a href="#L-3796"><span class="linenos">3796</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3797"><a href="#L-3797"><span class="linenos">3797</span></a> <span class="n">table</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="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
</span><span id="L-3798"><a href="#L-3798"><span class="linenos">3798</span></a>
</span><span id="L-3799"><a href="#L-3799"><span class="linenos">3799</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
</span><span id="L-3800"><a href="#L-3800"><span class="linenos">3800</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
</span><span id="L-3801"><a href="#L-3801"><span class="linenos">3801</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
</span><span id="L-3802"><a href="#L-3802"><span class="linenos">3802</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3803"><a href="#L-3803"><span class="linenos">3803</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
</span><span id="L-3804"><a href="#L-3804"><span class="linenos">3804</span></a> <span class="p">)</span>
</span><span id="L-3805"><a href="#L-3805"><span class="linenos">3805</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3806"><a href="#L-3806"><span class="linenos">3806</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
</span><span id="L-3807"><a href="#L-3807"><span class="linenos">3807</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
</span><span id="L-3808"><a href="#L-3808"><span class="linenos">3808</span></a> <span class="c1"># &quot;&quot; used for tsql FROM a..b case</span>
</span><span id="L-3809"><a href="#L-3809"><span class="linenos">3809</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
</span><span id="L-3810"><a href="#L-3810"><span class="linenos">3810</span></a>
</span><span id="L-3811"><a href="#L-3811"><span class="linenos">3811</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="L-3812"><a href="#L-3812"><span class="linenos">3812</span></a> <span class="n">wildcard</span>
</span><span id="L-3813"><a href="#L-3813"><span class="linenos">3813</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">()</span>
</span><span id="L-3814"><a href="#L-3814"><span class="linenos">3814</span></a> <span class="ow">and</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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="ow">or</span> <span class="ow">not</span> <span class="n">table</span><span class="p">)</span>
</span><span id="L-3815"><a href="#L-3815"><span class="linenos">3815</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">)</span>
</span><span id="L-3816"><a href="#L-3816"><span class="linenos">3816</span></a> <span class="p">):</span>
</span><span id="L-3817"><a href="#L-3817"><span class="linenos">3817</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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-3818"><a href="#L-3818"><span class="linenos">3818</span></a> <span class="n">table</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span> <span class="o">+=</span> <span class="s2">&quot;*&quot;</span>
</span><span id="L-3819"><a href="#L-3819"><span class="linenos">3819</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3820"><a href="#L-3820"><span class="linenos">3820</span></a> <span class="n">table</span> <span class="o">=</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="s2">&quot;*&quot;</span><span class="p">)</span>
</span><span id="L-3821"><a href="#L-3821"><span class="linenos">3821</span></a>
</span><span id="L-3822"><a href="#L-3822"><span class="linenos">3822</span></a> <span class="c1"># We bubble up comments from the Identifier to the Table</span>
</span><span id="L-3823"><a href="#L-3823"><span class="linenos">3823</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">pop_comments</span><span class="p">()</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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="k">else</span> <span class="kc">None</span>
</span><span id="L-3824"><a href="#L-3824"><span class="linenos">3824</span></a>
</span><span id="L-3825"><a href="#L-3825"><span class="linenos">3825</span></a> <span class="k">if</span> <span class="n">is_db_reference</span><span class="p">:</span>
</span><span id="L-3826"><a href="#L-3826"><span class="linenos">3826</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
</span><span id="L-3827"><a href="#L-3827"><span class="linenos">3827</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
</span><span id="L-3828"><a href="#L-3828"><span class="linenos">3828</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3829"><a href="#L-3829"><span class="linenos">3829</span></a>
</span><span id="L-3830"><a href="#L-3830"><span class="linenos">3830</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">is_db_reference</span><span class="p">:</span>
</span><span id="L-3831"><a href="#L-3831"><span class="linenos">3831</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected table name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-3832"><a href="#L-3832"><span class="linenos">3832</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db</span> <span class="ow">and</span> <span class="n">is_db_reference</span><span class="p">:</span>
</span><span id="L-3833"><a href="#L-3833"><span class="linenos">3833</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected database name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-3834"><a href="#L-3834"><span class="linenos">3834</span></a>
</span><span id="L-3835"><a href="#L-3835"><span class="linenos">3835</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3836"><a href="#L-3836"><span class="linenos">3836</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span>
</span><span id="L-3837"><a href="#L-3837"><span class="linenos">3837</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="L-3838"><a href="#L-3838"><span class="linenos">3838</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
</span><span id="L-3839"><a href="#L-3839"><span class="linenos">3839</span></a> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span>
</span><span id="L-3840"><a href="#L-3840"><span class="linenos">3840</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">catalog</span><span class="p">,</span>
</span><span id="L-3841"><a href="#L-3841"><span class="linenos">3841</span></a> <span class="p">)</span>
</span><span id="L-3842"><a href="#L-3842"><span class="linenos">3842</span></a>
</span><span id="L-3843"><a href="#L-3843"><span class="linenos">3843</span></a> <span class="n">changes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_changes</span><span class="p">()</span>
</span><span id="L-3844"><a href="#L-3844"><span class="linenos">3844</span></a> <span class="k">if</span> <span class="n">changes</span><span class="p">:</span>
</span><span id="L-3845"><a href="#L-3845"><span class="linenos">3845</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;changes&quot;</span><span class="p">,</span> <span class="n">changes</span><span class="p">)</span>
</span><span id="L-3846"><a href="#L-3846"><span class="linenos">3846</span></a>
</span><span id="L-3847"><a href="#L-3847"><span class="linenos">3847</span></a> <span class="n">at_before</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_historical_data</span><span class="p">()</span>
</span><span id="L-3848"><a href="#L-3848"><span class="linenos">3848</span></a> <span class="k">if</span> <span class="n">at_before</span><span class="p">:</span>
</span><span id="L-3849"><a href="#L-3849"><span class="linenos">3849</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;when&quot;</span><span class="p">,</span> <span class="n">at_before</span><span class="p">)</span>
</span><span id="L-3850"><a href="#L-3850"><span class="linenos">3850</span></a>
</span><span id="L-3851"><a href="#L-3851"><span class="linenos">3851</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">()</span>
</span><span id="L-3852"><a href="#L-3852"><span class="linenos">3852</span></a> <span class="k">if</span> <span class="n">pivots</span><span class="p">:</span>
</span><span id="L-3853"><a href="#L-3853"><span class="linenos">3853</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
</span><span id="L-3854"><a href="#L-3854"><span class="linenos">3854</span></a>
</span><span id="L-3855"><a href="#L-3855"><span class="linenos">3855</span></a> <span class="k">return</span> <span class="n">table</span>
</span><span id="L-3856"><a href="#L-3856"><span class="linenos">3856</span></a>
</span><span id="L-3857"><a href="#L-3857"><span class="linenos">3857</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_table</span><span class="p">(</span>
</span><span id="L-3858"><a href="#L-3858"><span class="linenos">3858</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-3859"><a href="#L-3859"><span class="linenos">3859</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-3860"><a href="#L-3860"><span class="linenos">3860</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-3861"><a href="#L-3861"><span class="linenos">3861</span></a> <span class="n">alias_tokens</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">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-3862"><a href="#L-3862"><span class="linenos">3862</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-3863"><a href="#L-3863"><span class="linenos">3863</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-3864"><a href="#L-3864"><span class="linenos">3864</span></a> <span class="n">parse_partition</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-3865"><a href="#L-3865"><span class="linenos">3865</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-3866"><a href="#L-3866"><span class="linenos">3866</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">()</span>
</span><span id="L-3867"><a href="#L-3867"><span class="linenos">3867</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
</span><span id="L-3868"><a href="#L-3868"><span class="linenos">3868</span></a> <span class="k">return</span> <span class="n">lateral</span>
</span><span id="L-3869"><a href="#L-3869"><span class="linenos">3869</span></a>
</span><span id="L-3870"><a href="#L-3870"><span class="linenos">3870</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
</span><span id="L-3871"><a href="#L-3871"><span class="linenos">3871</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
</span><span id="L-3872"><a href="#L-3872"><span class="linenos">3872</span></a> <span class="k">return</span> <span class="n">unnest</span>
</span><span id="L-3873"><a href="#L-3873"><span class="linenos">3873</span></a>
</span><span id="L-3874"><a href="#L-3874"><span class="linenos">3874</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span>
</span><span id="L-3875"><a href="#L-3875"><span class="linenos">3875</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
</span><span id="L-3876"><a href="#L-3876"><span class="linenos">3876</span></a> <span class="k">return</span> <span class="n">values</span>
</span><span id="L-3877"><a href="#L-3877"><span class="linenos">3877</span></a>
</span><span id="L-3878"><a href="#L-3878"><span class="linenos">3878</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-3879"><a href="#L-3879"><span class="linenos">3879</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
</span><span id="L-3880"><a href="#L-3880"><span class="linenos">3880</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subquery</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;pivots&quot;</span><span class="p">):</span>
</span><span id="L-3881"><a href="#L-3881"><span class="linenos">3881</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
</span><span id="L-3882"><a href="#L-3882"><span class="linenos">3882</span></a> <span class="k">return</span> <span class="n">subquery</span>
</span><span id="L-3883"><a href="#L-3883"><span class="linenos">3883</span></a>
</span><span id="L-3884"><a href="#L-3884"><span class="linenos">3884</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
</span><span id="L-3885"><a href="#L-3885"><span class="linenos">3885</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-3886"><a href="#L-3886"><span class="linenos">3886</span></a>
</span><span id="L-3887"><a href="#L-3887"><span class="linenos">3887</span></a> <span class="n">rows_from</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ROWS&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span>
</span><span id="L-3888"><a href="#L-3888"><span class="linenos">3888</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span>
</span><span id="L-3889"><a href="#L-3889"><span class="linenos">3889</span></a> <span class="p">)</span>
</span><span id="L-3890"><a href="#L-3890"><span class="linenos">3890</span></a> <span class="n">rows_from</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">rows_from</span><span class="o">=</span><span class="n">rows_from</span><span class="p">)</span> <span class="k">if</span> <span class="n">rows_from</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-3891"><a href="#L-3891"><span class="linenos">3891</span></a>
</span><span id="L-3892"><a href="#L-3892"><span class="linenos">3892</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ONLY</span><span class="p">)</span>
</span><span id="L-3893"><a href="#L-3893"><span class="linenos">3893</span></a>
</span><span id="L-3894"><a href="#L-3894"><span class="linenos">3894</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
</span><span id="L-3895"><a href="#L-3895"><span class="linenos">3895</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
</span><span id="L-3896"><a href="#L-3896"><span class="linenos">3896</span></a> <span class="n">bracket</span>
</span><span id="L-3897"><a href="#L-3897"><span class="linenos">3897</span></a> <span class="ow">or</span> <span class="n">rows_from</span>
</span><span id="L-3898"><a href="#L-3898"><span class="linenos">3898</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span>
</span><span id="L-3899"><a href="#L-3899"><span class="linenos">3899</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">)</span>
</span><span id="L-3900"><a href="#L-3900"><span class="linenos">3900</span></a> <span class="p">),</span>
</span><span id="L-3901"><a href="#L-3901"><span class="linenos">3901</span></a> <span class="p">)</span>
</span><span id="L-3902"><a href="#L-3902"><span class="linenos">3902</span></a>
</span><span id="L-3903"><a href="#L-3903"><span class="linenos">3903</span></a> <span class="k">if</span> <span class="n">only</span><span class="p">:</span>
</span><span id="L-3904"><a href="#L-3904"><span class="linenos">3904</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;only&quot;</span><span class="p">,</span> <span class="n">only</span><span class="p">)</span>
</span><span id="L-3905"><a href="#L-3905"><span class="linenos">3905</span></a>
</span><span id="L-3906"><a href="#L-3906"><span class="linenos">3906</span></a> <span class="c1"># Postgres supports a wildcard (table) suffix operator, which is a no-op in this context</span>
</span><span id="L-3907"><a href="#L-3907"><span class="linenos">3907</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span>
</span><span id="L-3908"><a href="#L-3908"><span class="linenos">3908</span></a>
</span><span id="L-3909"><a href="#L-3909"><span class="linenos">3909</span></a> <span class="n">parse_partition</span> <span class="o">=</span> <span class="n">parse_partition</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_PARTITION_SELECTION</span>
</span><span id="L-3910"><a href="#L-3910"><span class="linenos">3910</span></a> <span class="k">if</span> <span class="n">parse_partition</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-3911"><a href="#L-3911"><span class="linenos">3911</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">())</span>
</span><span id="L-3912"><a href="#L-3912"><span class="linenos">3912</span></a>
</span><span id="L-3913"><a href="#L-3913"><span class="linenos">3913</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
</span><span id="L-3914"><a href="#L-3914"><span class="linenos">3914</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</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-3915"><a href="#L-3915"><span class="linenos">3915</span></a>
</span><span id="L-3916"><a href="#L-3916"><span class="linenos">3916</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_version</span><span class="p">()</span>
</span><span id="L-3917"><a href="#L-3917"><span class="linenos">3917</span></a>
</span><span id="L-3918"><a href="#L-3918"><span class="linenos">3918</span></a> <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
</span><span id="L-3919"><a href="#L-3919"><span class="linenos">3919</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
</span><span id="L-3920"><a href="#L-3920"><span class="linenos">3920</span></a>
</span><span id="L-3921"><a href="#L-3921"><span class="linenos">3921</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
</span><span id="L-3922"><a href="#L-3922"><span class="linenos">3922</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sample&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">())</span>
</span><span id="L-3923"><a href="#L-3923"><span class="linenos">3923</span></a>
</span><span id="L-3924"><a href="#L-3924"><span class="linenos">3924</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(</span><span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="L-3925"><a href="#L-3925"><span class="linenos">3925</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
</span><span id="L-3926"><a href="#L-3926"><span class="linenos">3926</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="n">alias</span><span class="p">)</span>
</span><span id="L-3927"><a href="#L-3927"><span class="linenos">3927</span></a>
</span><span id="L-3928"><a href="#L-3928"><span class="linenos">3928</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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">):</span>
</span><span id="L-3929"><a href="#L-3929"><span class="linenos">3929</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3930"><a href="#L-3930"><span class="linenos">3930</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtIndex</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">to_column</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-3931"><a href="#L-3931"><span class="linenos">3931</span></a> <span class="p">)</span>
</span><span id="L-3932"><a href="#L-3932"><span class="linenos">3932</span></a>
</span><span id="L-3933"><a href="#L-3933"><span class="linenos">3933</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
</span><span id="L-3934"><a href="#L-3934"><span class="linenos">3934</span></a>
</span><span id="L-3935"><a href="#L-3935"><span class="linenos">3935</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</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;pivots&quot;</span><span class="p">):</span>
</span><span id="L-3936"><a href="#L-3936"><span class="linenos">3936</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
</span><span id="L-3937"><a href="#L-3937"><span class="linenos">3937</span></a>
</span><span id="L-3938"><a href="#L-3938"><span class="linenos">3938</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
</span><span id="L-3939"><a href="#L-3939"><span class="linenos">3939</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sample&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">())</span>
</span><span id="L-3940"><a href="#L-3940"><span class="linenos">3940</span></a>
</span><span id="L-3941"><a href="#L-3941"><span class="linenos">3941</span></a> <span class="k">if</span> <span class="n">joins</span><span class="p">:</span>
</span><span id="L-3942"><a href="#L-3942"><span class="linenos">3942</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_joins</span><span class="p">():</span>
</span><span id="L-3943"><a href="#L-3943"><span class="linenos">3943</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">join</span><span class="p">)</span>
</span><span id="L-3944"><a href="#L-3944"><span class="linenos">3944</span></a>
</span><span id="L-3945"><a href="#L-3945"><span class="linenos">3945</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">):</span>
</span><span id="L-3946"><a href="#L-3946"><span class="linenos">3946</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;ordinality&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
</span><span id="L-3947"><a href="#L-3947"><span class="linenos">3947</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
</span><span id="L-3948"><a href="#L-3948"><span class="linenos">3948</span></a>
</span><span id="L-3949"><a href="#L-3949"><span class="linenos">3949</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3950"><a href="#L-3950"><span class="linenos">3950</span></a>
</span><span id="L-3951"><a href="#L-3951"><span class="linenos">3951</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_version</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">]:</span>
</span><span id="L-3952"><a href="#L-3952"><span class="linenos">3952</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
</span><span id="L-3953"><a href="#L-3953"><span class="linenos">3953</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;TIMESTAMP&quot;</span>
</span><span id="L-3954"><a href="#L-3954"><span class="linenos">3954</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">):</span>
</span><span id="L-3955"><a href="#L-3955"><span class="linenos">3955</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;VERSION&quot;</span>
</span><span id="L-3956"><a href="#L-3956"><span class="linenos">3956</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3957"><a href="#L-3957"><span class="linenos">3957</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3958"><a href="#L-3958"><span class="linenos">3958</span></a>
</span><span id="L-3959"><a href="#L-3959"><span class="linenos">3959</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
</span><span id="L-3960"><a href="#L-3960"><span class="linenos">3960</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-3961"><a href="#L-3961"><span class="linenos">3961</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-3962"><a href="#L-3962"><span class="linenos">3962</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
</span><span id="L-3963"><a href="#L-3963"><span class="linenos">3963</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-3964"><a href="#L-3964"><span class="linenos">3964</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3965"><a href="#L-3965"><span class="linenos">3965</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span>
</span><span id="L-3966"><a href="#L-3966"><span class="linenos">3966</span></a> <span class="p">)</span>
</span><span id="L-3967"><a href="#L-3967"><span class="linenos">3967</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
</span><span id="L-3968"><a href="#L-3968"><span class="linenos">3968</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;CONTAINED IN&quot;</span>
</span><span id="L-3969"><a href="#L-3969"><span class="linenos">3969</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3970"><a href="#L-3970"><span class="linenos">3970</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="L-3971"><a href="#L-3971"><span class="linenos">3971</span></a> <span class="p">)</span>
</span><span id="L-3972"><a href="#L-3972"><span class="linenos">3972</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
</span><span id="L-3973"><a href="#L-3973"><span class="linenos">3973</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</span>
</span><span id="L-3974"><a href="#L-3974"><span class="linenos">3974</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3975"><a href="#L-3975"><span class="linenos">3975</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3976"><a href="#L-3976"><span class="linenos">3976</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
</span><span id="L-3977"><a href="#L-3977"><span class="linenos">3977</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;AS OF&quot;</span>
</span><span id="L-3978"><a href="#L-3978"><span class="linenos">3978</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="L-3979"><a href="#L-3979"><span class="linenos">3979</span></a>
</span><span id="L-3980"><a href="#L-3980"><span class="linenos">3980</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</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">expression</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="L-3981"><a href="#L-3981"><span class="linenos">3981</span></a>
</span><span id="L-3982"><a href="#L-3982"><span class="linenos">3982</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_historical_data</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">HistoricalData</span><span class="p">]:</span>
</span><span id="L-3983"><a href="#L-3983"><span class="linenos">3983</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/constructs/at-before</span>
</span><span id="L-3984"><a href="#L-3984"><span class="linenos">3984</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-3985"><a href="#L-3985"><span class="linenos">3985</span></a> <span class="n">historical_data</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3986"><a href="#L-3986"><span class="linenos">3986</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">HISTORICAL_DATA_PREFIX</span><span class="p">):</span>
</span><span id="L-3987"><a href="#L-3987"><span class="linenos">3987</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-3988"><a href="#L-3988"><span class="linenos">3988</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-3989"><a href="#L-3989"><span class="linenos">3989</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="L-3990"><a href="#L-3990"><span class="linenos">3990</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">HISTORICAL_DATA_KIND</span><span class="p">)</span>
</span><span id="L-3991"><a href="#L-3991"><span class="linenos">3991</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-3992"><a href="#L-3992"><span class="linenos">3992</span></a> <span class="p">)</span>
</span><span id="L-3993"><a href="#L-3993"><span class="linenos">3993</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-3994"><a href="#L-3994"><span class="linenos">3994</span></a>
</span><span id="L-3995"><a href="#L-3995"><span class="linenos">3995</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="L-3996"><a href="#L-3996"><span class="linenos">3996</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-3997"><a href="#L-3997"><span class="linenos">3997</span></a> <span class="n">historical_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-3998"><a href="#L-3998"><span class="linenos">3998</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HistoricalData</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span>
</span><span id="L-3999"><a href="#L-3999"><span class="linenos">3999</span></a> <span class="p">)</span>
</span><span id="L-4000"><a href="#L-4000"><span class="linenos">4000</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4001"><a href="#L-4001"><span class="linenos">4001</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-4002"><a href="#L-4002"><span class="linenos">4002</span></a>
</span><span id="L-4003"><a href="#L-4003"><span class="linenos">4003</span></a> <span class="k">return</span> <span class="n">historical_data</span>
</span><span id="L-4004"><a href="#L-4004"><span class="linenos">4004</span></a>
</span><span id="L-4005"><a href="#L-4005"><span class="linenos">4005</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_changes</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Changes</span><span class="p">]:</span>
</span><span id="L-4006"><a href="#L-4006"><span class="linenos">4006</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHANGES&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;INFORMATION&quot;</span><span class="p">,</span> <span class="s2">&quot;=&gt;&quot;</span><span class="p">):</span>
</span><span id="L-4007"><a href="#L-4007"><span class="linenos">4007</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4008"><a href="#L-4008"><span class="linenos">4008</span></a>
</span><span id="L-4009"><a href="#L-4009"><span class="linenos">4009</span></a> <span class="n">information</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-4010"><a href="#L-4010"><span class="linenos">4010</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-4011"><a href="#L-4011"><span class="linenos">4011</span></a>
</span><span id="L-4012"><a href="#L-4012"><span class="linenos">4012</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4013"><a href="#L-4013"><span class="linenos">4013</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Changes</span><span class="p">,</span>
</span><span id="L-4014"><a href="#L-4014"><span class="linenos">4014</span></a> <span class="n">information</span><span class="o">=</span><span class="n">information</span><span class="p">,</span>
</span><span id="L-4015"><a href="#L-4015"><span class="linenos">4015</span></a> <span class="n">at_before</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_historical_data</span><span class="p">(),</span>
</span><span id="L-4016"><a href="#L-4016"><span class="linenos">4016</span></a> <span class="n">end</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_historical_data</span><span class="p">(),</span>
</span><span id="L-4017"><a href="#L-4017"><span class="linenos">4017</span></a> <span class="p">)</span>
</span><span id="L-4018"><a href="#L-4018"><span class="linenos">4018</span></a>
</span><span id="L-4019"><a href="#L-4019"><span class="linenos">4019</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</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">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">Unnest</span><span class="p">]:</span>
</span><span id="L-4020"><a href="#L-4020"><span class="linenos">4020</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">):</span>
</span><span id="L-4021"><a href="#L-4021"><span class="linenos">4021</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4022"><a href="#L-4022"><span class="linenos">4022</span></a>
</span><span id="L-4023"><a href="#L-4023"><span class="linenos">4023</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
</span><span id="L-4024"><a href="#L-4024"><span class="linenos">4024</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">)</span>
</span><span id="L-4025"><a href="#L-4025"><span class="linenos">4025</span></a>
</span><span id="L-4026"><a href="#L-4026"><span class="linenos">4026</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-4027"><a href="#L-4027"><span class="linenos">4027</span></a>
</span><span id="L-4028"><a href="#L-4028"><span class="linenos">4028</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
</span><span id="L-4029"><a href="#L-4029"><span class="linenos">4029</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
</span><span id="L-4030"><a href="#L-4030"><span class="linenos">4030</span></a> <span class="k">if</span> <span class="n">alias</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;columns&quot;</span><span class="p">):</span>
</span><span id="L-4031"><a href="#L-4031"><span class="linenos">4031</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected extra column alias in unnest.&quot;</span><span class="p">)</span>
</span><span id="L-4032"><a href="#L-4032"><span class="linenos">4032</span></a>
</span><span id="L-4033"><a href="#L-4033"><span class="linenos">4033</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">])</span>
</span><span id="L-4034"><a href="#L-4034"><span class="linenos">4034</span></a> <span class="n">alias</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="kc">None</span><span class="p">)</span>
</span><span id="L-4035"><a href="#L-4035"><span class="linenos">4035</span></a>
</span><span id="L-4036"><a href="#L-4036"><span class="linenos">4036</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</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;columns&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
</span><span id="L-4037"><a href="#L-4037"><span class="linenos">4037</span></a> <span class="k">if</span> <span class="n">offset</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">):</span>
</span><span id="L-4038"><a href="#L-4038"><span class="linenos">4038</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">columns</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span><span id="L-4039"><a href="#L-4039"><span class="linenos">4039</span></a>
</span><span id="L-4040"><a href="#L-4040"><span class="linenos">4040</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">offset</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
</span><span id="L-4041"><a href="#L-4041"><span class="linenos">4041</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="L-4042"><a href="#L-4042"><span class="linenos">4042</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
</span><span id="L-4043"><a href="#L-4043"><span class="linenos">4043</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_OFFSET_ALIAS_TOKENS</span>
</span><span id="L-4044"><a href="#L-4044"><span class="linenos">4044</span></a> <span class="p">)</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">)</span>
</span><span id="L-4045"><a href="#L-4045"><span class="linenos">4045</span></a>
</span><span id="L-4046"><a href="#L-4046"><span class="linenos">4046</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
</span><span id="L-4047"><a href="#L-4047"><span class="linenos">4047</span></a>
</span><span id="L-4048"><a href="#L-4048"><span class="linenos">4048</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_derived_table_values</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">]:</span>
</span><span id="L-4049"><a href="#L-4049"><span class="linenos">4049</span></a> <span class="n">is_derived</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span>
</span><span id="L-4050"><a href="#L-4050"><span class="linenos">4050</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_derived</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
</span><span id="L-4051"><a href="#L-4051"><span class="linenos">4051</span></a> <span class="c1"># ClickHouse&#39;s `FORMAT Values` is equivalent to `VALUES`</span>
</span><span id="L-4052"><a href="#L-4052"><span class="linenos">4052</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUES&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUES&quot;</span><span class="p">)</span>
</span><span id="L-4053"><a href="#L-4053"><span class="linenos">4053</span></a> <span class="p">):</span>
</span><span id="L-4054"><a href="#L-4054"><span class="linenos">4054</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4055"><a href="#L-4055"><span class="linenos">4055</span></a>
</span><span id="L-4056"><a href="#L-4056"><span class="linenos">4056</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">)</span>
</span><span id="L-4057"><a href="#L-4057"><span class="linenos">4057</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
</span><span id="L-4058"><a href="#L-4058"><span class="linenos">4058</span></a>
</span><span id="L-4059"><a href="#L-4059"><span class="linenos">4059</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
</span><span id="L-4060"><a href="#L-4060"><span class="linenos">4060</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-4061"><a href="#L-4061"><span class="linenos">4061</span></a>
</span><span id="L-4062"><a href="#L-4062"><span class="linenos">4062</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4063"><a href="#L-4063"><span class="linenos">4063</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
</span><span id="L-4064"><a href="#L-4064"><span class="linenos">4064</span></a> <span class="p">)</span>
</span><span id="L-4065"><a href="#L-4065"><span class="linenos">4065</span></a>
</span><span id="L-4066"><a href="#L-4066"><span class="linenos">4066</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">]:</span>
</span><span id="L-4067"><a href="#L-4067"><span class="linenos">4067</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
</span><span id="L-4068"><a href="#L-4068"><span class="linenos">4068</span></a> <span class="n">as_modifier</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">)</span>
</span><span id="L-4069"><a href="#L-4069"><span class="linenos">4069</span></a> <span class="p">):</span>
</span><span id="L-4070"><a href="#L-4070"><span class="linenos">4070</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4071"><a href="#L-4071"><span class="linenos">4071</span></a>
</span><span id="L-4072"><a href="#L-4072"><span class="linenos">4072</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4073"><a href="#L-4073"><span class="linenos">4073</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4074"><a href="#L-4074"><span class="linenos">4074</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4075"><a href="#L-4075"><span class="linenos">4075</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4076"><a href="#L-4076"><span class="linenos">4076</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4077"><a href="#L-4077"><span class="linenos">4077</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4078"><a href="#L-4078"><span class="linenos">4078</span></a>
</span><span id="L-4079"><a href="#L-4079"><span class="linenos">4079</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,),</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-4080"><a href="#L-4080"><span class="linenos">4080</span></a> <span class="n">matched_l_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="L-4081"><a href="#L-4081"><span class="linenos">4081</span></a>
</span><span id="L-4082"><a href="#L-4082"><span class="linenos">4082</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_CSV</span><span class="p">:</span>
</span><span id="L-4083"><a href="#L-4083"><span class="linenos">4083</span></a> <span class="n">num</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4084"><a href="#L-4084"><span class="linenos">4084</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">)</span>
</span><span id="L-4085"><a href="#L-4085"><span class="linenos">4085</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4086"><a href="#L-4086"><span class="linenos">4086</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4087"><a href="#L-4087"><span class="linenos">4087</span></a> <span class="n">num</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-4088"><a href="#L-4088"><span class="linenos">4088</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
</span><span id="L-4089"><a href="#L-4089"><span class="linenos">4089</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-4090"><a href="#L-4090"><span class="linenos">4090</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="L-4091"><a href="#L-4091"><span class="linenos">4091</span></a> <span class="p">)</span>
</span><span id="L-4092"><a href="#L-4092"><span class="linenos">4092</span></a>
</span><span id="L-4093"><a href="#L-4093"><span class="linenos">4093</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKET&quot;</span><span class="p">):</span>
</span><span id="L-4094"><a href="#L-4094"><span class="linenos">4094</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="L-4095"><a href="#L-4095"><span class="linenos">4095</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
</span><span id="L-4096"><a href="#L-4096"><span class="linenos">4096</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="L-4097"><a href="#L-4097"><span class="linenos">4097</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
</span><span id="L-4098"><a href="#L-4098"><span class="linenos">4098</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
</span><span id="L-4099"><a href="#L-4099"><span class="linenos">4099</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">)):</span>
</span><span id="L-4100"><a href="#L-4100"><span class="linenos">4100</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
</span><span id="L-4101"><a href="#L-4101"><span class="linenos">4101</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
</span><span id="L-4102"><a href="#L-4102"><span class="linenos">4102</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
</span><span id="L-4103"><a href="#L-4103"><span class="linenos">4103</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4104"><a href="#L-4104"><span class="linenos">4104</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
</span><span id="L-4105"><a href="#L-4105"><span class="linenos">4105</span></a>
</span><span id="L-4106"><a href="#L-4106"><span class="linenos">4106</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
</span><span id="L-4107"><a href="#L-4107"><span class="linenos">4107</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-4108"><a href="#L-4108"><span class="linenos">4108</span></a>
</span><span id="L-4109"><a href="#L-4109"><span class="linenos">4109</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-4110"><a href="#L-4110"><span class="linenos">4110</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-4111"><a href="#L-4111"><span class="linenos">4111</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="L-4112"><a href="#L-4112"><span class="linenos">4112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-4113"><a href="#L-4113"><span class="linenos">4113</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)):</span>
</span><span id="L-4114"><a href="#L-4114"><span class="linenos">4114</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">)</span>
</span><span id="L-4115"><a href="#L-4115"><span class="linenos">4115</span></a>
</span><span id="L-4116"><a href="#L-4116"><span class="linenos">4116</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">method</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_SAMPLING_METHOD</span><span class="p">:</span>
</span><span id="L-4117"><a href="#L-4117"><span class="linenos">4117</span></a> <span class="n">method</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="bp">self</span><span class="o">.</span><span class="n">DEFAULT_SAMPLING_METHOD</span><span class="p">)</span>
</span><span id="L-4118"><a href="#L-4118"><span class="linenos">4118</span></a>
</span><span id="L-4119"><a href="#L-4119"><span class="linenos">4119</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4120"><a href="#L-4120"><span class="linenos">4120</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
</span><span id="L-4121"><a href="#L-4121"><span class="linenos">4121</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-4122"><a href="#L-4122"><span class="linenos">4122</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
</span><span id="L-4123"><a href="#L-4123"><span class="linenos">4123</span></a> <span class="n">bucket_numerator</span><span class="o">=</span><span class="n">bucket_numerator</span><span class="p">,</span>
</span><span id="L-4124"><a href="#L-4124"><span class="linenos">4124</span></a> <span class="n">bucket_denominator</span><span class="o">=</span><span class="n">bucket_denominator</span><span class="p">,</span>
</span><span id="L-4125"><a href="#L-4125"><span class="linenos">4125</span></a> <span class="n">bucket_field</span><span class="o">=</span><span class="n">bucket_field</span><span class="p">,</span>
</span><span id="L-4126"><a href="#L-4126"><span class="linenos">4126</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
</span><span id="L-4127"><a href="#L-4127"><span class="linenos">4127</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
</span><span id="L-4128"><a href="#L-4128"><span class="linenos">4128</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
</span><span id="L-4129"><a href="#L-4129"><span class="linenos">4129</span></a> <span class="p">)</span>
</span><span id="L-4130"><a href="#L-4130"><span class="linenos">4130</span></a>
</span><span id="L-4131"><a href="#L-4131"><span class="linenos">4131</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_pivots</span><span class="p">(</span><span class="bp">self</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">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">Pivot</span><span class="p">]]:</span>
</span><span id="L-4132"><a href="#L-4132"><span class="linenos">4132</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="L-4133"><a href="#L-4133"><span class="linenos">4133</span></a>
</span><span id="L-4134"><a href="#L-4134"><span class="linenos">4134</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_joins</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterator</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
</span><span id="L-4135"><a href="#L-4135"><span class="linenos">4135</span></a> <span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="L-4136"><a href="#L-4136"><span class="linenos">4136</span></a>
</span><span id="L-4137"><a href="#L-4137"><span class="linenos">4137</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unpivot_columns</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">UnpivotColumns</span><span class="p">]:</span>
</span><span id="L-4138"><a href="#L-4138"><span class="linenos">4138</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
</span><span id="L-4139"><a href="#L-4139"><span class="linenos">4139</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4140"><a href="#L-4140"><span class="linenos">4140</span></a>
</span><span id="L-4141"><a href="#L-4141"><span class="linenos">4141</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4142"><a href="#L-4142"><span class="linenos">4142</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnpivotColumns</span><span class="p">,</span>
</span><span id="L-4143"><a href="#L-4143"><span class="linenos">4143</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NAME&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
</span><span id="L-4144"><a href="#L-4144"><span class="linenos">4144</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">),</span>
</span><span id="L-4145"><a href="#L-4145"><span class="linenos">4145</span></a> <span class="p">)</span>
</span><span id="L-4146"><a href="#L-4146"><span class="linenos">4146</span></a>
</span><span id="L-4147"><a href="#L-4147"><span class="linenos">4147</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
</span><span id="L-4148"><a href="#L-4148"><span class="linenos">4148</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_simplified_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">is_unpivot</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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span>
</span><span id="L-4149"><a href="#L-4149"><span class="linenos">4149</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_on</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4150"><a href="#L-4150"><span class="linenos">4150</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-4151"><a href="#L-4151"><span class="linenos">4151</span></a>
</span><span id="L-4152"><a href="#L-4152"><span class="linenos">4152</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
</span><span id="L-4153"><a href="#L-4153"><span class="linenos">4153</span></a> <span class="c1"># PIVOT ... ON col IN (row_val1, row_val2)</span>
</span><span id="L-4154"><a href="#L-4154"><span class="linenos">4154</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-4155"><a href="#L-4155"><span class="linenos">4155</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-4156"><a href="#L-4156"><span class="linenos">4156</span></a> <span class="c1"># UNPIVOT ... ON (col1, col2, col3) AS row_val</span>
</span><span id="L-4157"><a href="#L-4157"><span class="linenos">4157</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-4158"><a href="#L-4158"><span class="linenos">4158</span></a>
</span><span id="L-4159"><a href="#L-4159"><span class="linenos">4159</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4160"><a href="#L-4160"><span class="linenos">4160</span></a>
</span><span id="L-4161"><a href="#L-4161"><span class="linenos">4161</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="L-4162"><a href="#L-4162"><span class="linenos">4162</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
</span><span id="L-4163"><a href="#L-4163"><span class="linenos">4163</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unpivot_columns</span><span class="p">()</span>
</span><span id="L-4164"><a href="#L-4164"><span class="linenos">4164</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="L-4165"><a href="#L-4165"><span class="linenos">4165</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
</span><span id="L-4166"><a href="#L-4166"><span class="linenos">4166</span></a> <span class="p">)</span>
</span><span id="L-4167"><a href="#L-4167"><span class="linenos">4167</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
</span><span id="L-4168"><a href="#L-4168"><span class="linenos">4168</span></a>
</span><span id="L-4169"><a href="#L-4169"><span class="linenos">4169</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4170"><a href="#L-4170"><span class="linenos">4170</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
</span><span id="L-4171"><a href="#L-4171"><span class="linenos">4171</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-4172"><a href="#L-4172"><span class="linenos">4172</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-4173"><a href="#L-4173"><span class="linenos">4173</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
</span><span id="L-4174"><a href="#L-4174"><span class="linenos">4174</span></a> <span class="n">group</span><span class="o">=</span><span class="n">group</span><span class="p">,</span>
</span><span id="L-4175"><a href="#L-4175"><span class="linenos">4175</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">is_unpivot</span><span class="p">,</span>
</span><span id="L-4176"><a href="#L-4176"><span class="linenos">4176</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
</span><span id="L-4177"><a href="#L-4177"><span class="linenos">4177</span></a> <span class="p">)</span>
</span><span id="L-4178"><a href="#L-4178"><span class="linenos">4178</span></a>
</span><span id="L-4179"><a href="#L-4179"><span class="linenos">4179</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_pivot_in</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PivotAny</span><span class="p">:</span>
</span><span id="L-4180"><a href="#L-4180"><span class="linenos">4180</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_aliased_expression</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4181"><a href="#L-4181"><span class="linenos">4181</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">()</span>
</span><span id="L-4182"><a href="#L-4182"><span class="linenos">4182</span></a>
</span><span id="L-4183"><a href="#L-4183"><span class="linenos">4183</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="L-4184"><a href="#L-4184"><span class="linenos">4184</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-4185"><a href="#L-4185"><span class="linenos">4185</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
</span><span id="L-4186"><a href="#L-4186"><span class="linenos">4186</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">alias</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="L-4187"><a href="#L-4187"><span class="linenos">4187</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">alias</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-4188"><a href="#L-4188"><span class="linenos">4188</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PivotAlias</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
</span><span id="L-4189"><a href="#L-4189"><span class="linenos">4189</span></a>
</span><span id="L-4190"><a href="#L-4190"><span class="linenos">4190</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4191"><a href="#L-4191"><span class="linenos">4191</span></a>
</span><span id="L-4192"><a href="#L-4192"><span class="linenos">4192</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-4193"><a href="#L-4193"><span class="linenos">4193</span></a>
</span><span id="L-4194"><a href="#L-4194"><span class="linenos">4194</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-4195"><a href="#L-4195"><span class="linenos">4195</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting IN (&quot;</span><span class="p">)</span>
</span><span id="L-4196"><a href="#L-4196"><span class="linenos">4196</span></a>
</span><span id="L-4197"><a href="#L-4197"><span class="linenos">4197</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">):</span>
</span><span id="L-4198"><a href="#L-4198"><span class="linenos">4198</span></a> <span class="n">exprs</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="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PivotAny</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()))</span>
</span><span id="L-4199"><a href="#L-4199"><span class="linenos">4199</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4200"><a href="#L-4200"><span class="linenos">4200</span></a> <span class="n">exprs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_aliased_expression</span><span class="p">)</span>
</span><span id="L-4201"><a href="#L-4201"><span class="linenos">4201</span></a>
</span><span id="L-4202"><a href="#L-4202"><span class="linenos">4202</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-4203"><a href="#L-4203"><span class="linenos">4203</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">exprs</span><span class="p">)</span>
</span><span id="L-4204"><a href="#L-4204"><span class="linenos">4204</span></a>
</span><span id="L-4205"><a href="#L-4205"><span class="linenos">4205</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_pivot</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]:</span>
</span><span id="L-4206"><a href="#L-4206"><span class="linenos">4206</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-4207"><a href="#L-4207"><span class="linenos">4207</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4208"><a href="#L-4208"><span class="linenos">4208</span></a>
</span><span id="L-4209"><a href="#L-4209"><span class="linenos">4209</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">):</span>
</span><span id="L-4210"><a href="#L-4210"><span class="linenos">4210</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-4211"><a href="#L-4211"><span class="linenos">4211</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">):</span>
</span><span id="L-4212"><a href="#L-4212"><span class="linenos">4212</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-4213"><a href="#L-4213"><span class="linenos">4213</span></a>
</span><span id="L-4214"><a href="#L-4214"><span class="linenos">4214</span></a> <span class="c1"># https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-unpivot.html#syntax</span>
</span><span id="L-4215"><a href="#L-4215"><span class="linenos">4215</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
</span><span id="L-4216"><a href="#L-4216"><span class="linenos">4216</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-4217"><a href="#L-4217"><span class="linenos">4217</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;EXCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
</span><span id="L-4218"><a href="#L-4218"><span class="linenos">4218</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-4219"><a href="#L-4219"><span class="linenos">4219</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4220"><a href="#L-4220"><span class="linenos">4220</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4221"><a href="#L-4221"><span class="linenos">4221</span></a>
</span><span id="L-4222"><a href="#L-4222"><span class="linenos">4222</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-4223"><a href="#L-4223"><span class="linenos">4223</span></a>
</span><span id="L-4224"><a href="#L-4224"><span class="linenos">4224</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-4225"><a href="#L-4225"><span class="linenos">4225</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-4226"><a href="#L-4226"><span class="linenos">4226</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4227"><a href="#L-4227"><span class="linenos">4227</span></a>
</span><span id="L-4228"><a href="#L-4228"><span class="linenos">4228</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
</span><span id="L-4229"><a href="#L-4229"><span class="linenos">4229</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="L-4230"><a href="#L-4230"><span class="linenos">4230</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4231"><a href="#L-4231"><span class="linenos">4231</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()))</span>
</span><span id="L-4232"><a href="#L-4232"><span class="linenos">4232</span></a>
</span><span id="L-4233"><a href="#L-4233"><span class="linenos">4233</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
</span><span id="L-4234"><a href="#L-4234"><span class="linenos">4234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Failed to parse PIVOT&#39;s aggregation list&quot;</span><span class="p">)</span>
</span><span id="L-4235"><a href="#L-4235"><span class="linenos">4235</span></a>
</span><span id="L-4236"><a href="#L-4236"><span class="linenos">4236</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
</span><span id="L-4237"><a href="#L-4237"><span class="linenos">4237</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting FOR&quot;</span><span class="p">)</span>
</span><span id="L-4238"><a href="#L-4238"><span class="linenos">4238</span></a>
</span><span id="L-4239"><a href="#L-4239"><span class="linenos">4239</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot_in</span><span class="p">()</span>
</span><span id="L-4240"><a href="#L-4240"><span class="linenos">4240</span></a> <span class="n">default_on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFAULT&quot;</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
</span><span id="L-4241"><a href="#L-4241"><span class="linenos">4241</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span>
</span><span id="L-4242"><a href="#L-4242"><span class="linenos">4242</span></a> <span class="p">)</span>
</span><span id="L-4243"><a href="#L-4243"><span class="linenos">4243</span></a>
</span><span id="L-4244"><a href="#L-4244"><span class="linenos">4244</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-4245"><a href="#L-4245"><span class="linenos">4245</span></a>
</span><span id="L-4246"><a href="#L-4246"><span class="linenos">4246</span></a> <span class="n">pivot</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4247"><a href="#L-4247"><span class="linenos">4247</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
</span><span id="L-4248"><a href="#L-4248"><span class="linenos">4248</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-4249"><a href="#L-4249"><span class="linenos">4249</span></a> <span class="n">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
</span><span id="L-4250"><a href="#L-4250"><span class="linenos">4250</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">,</span>
</span><span id="L-4251"><a href="#L-4251"><span class="linenos">4251</span></a> <span class="n">include_nulls</span><span class="o">=</span><span class="n">include_nulls</span><span class="p">,</span>
</span><span id="L-4252"><a href="#L-4252"><span class="linenos">4252</span></a> <span class="n">default_on_null</span><span class="o">=</span><span class="n">default_on_null</span><span class="p">,</span>
</span><span id="L-4253"><a href="#L-4253"><span class="linenos">4253</span></a> <span class="p">)</span>
</span><span id="L-4254"><a href="#L-4254"><span class="linenos">4254</span></a>
</span><span id="L-4255"><a href="#L-4255"><span class="linenos">4255</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-4256"><a href="#L-4256"><span class="linenos">4256</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
</span><span id="L-4257"><a href="#L-4257"><span class="linenos">4257</span></a>
</span><span id="L-4258"><a href="#L-4258"><span class="linenos">4258</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
</span><span id="L-4259"><a href="#L-4259"><span class="linenos">4259</span></a> <span class="n">names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</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">expressions</span><span class="p">))</span>
</span><span id="L-4260"><a href="#L-4260"><span class="linenos">4260</span></a>
</span><span id="L-4261"><a href="#L-4261"><span class="linenos">4261</span></a> <span class="n">columns</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="o">=</span> <span class="p">[]</span>
</span><span id="L-4262"><a href="#L-4262"><span class="linenos">4262</span></a> <span class="n">pivot_field_expressions</span> <span class="o">=</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
</span><span id="L-4263"><a href="#L-4263"><span class="linenos">4263</span></a>
</span><span id="L-4264"><a href="#L-4264"><span class="linenos">4264</span></a> <span class="c1"># The `PivotAny` expression corresponds to `ANY ORDER BY &lt;column&gt;`; we can&#39;t infer in this case.</span>
</span><span id="L-4265"><a href="#L-4265"><span class="linenos">4265</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">pivot_field_expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">PivotAny</span><span class="p">):</span>
</span><span id="L-4266"><a href="#L-4266"><span class="linenos">4266</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot_field_expressions</span><span class="p">:</span>
</span><span id="L-4267"><a href="#L-4267"><span class="linenos">4267</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
</span><span id="L-4268"><a href="#L-4268"><span class="linenos">4268</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
</span><span id="L-4269"><a href="#L-4269"><span class="linenos">4269</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PREFIXED_PIVOT_COLUMNS</span><span class="p">:</span>
</span><span id="L-4270"><a href="#L-4270"><span class="linenos">4270</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
</span><span id="L-4271"><a href="#L-4271"><span class="linenos">4271</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4272"><a href="#L-4272"><span class="linenos">4272</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
</span><span id="L-4273"><a href="#L-4273"><span class="linenos">4273</span></a>
</span><span id="L-4274"><a href="#L-4274"><span class="linenos">4274</span></a> <span class="n">columns</span><span class="o">.</span><span class="n">append</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">name</span><span class="p">))</span>
</span><span id="L-4275"><a href="#L-4275"><span class="linenos">4275</span></a>
</span><span id="L-4276"><a href="#L-4276"><span class="linenos">4276</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">columns</span><span class="p">)</span>
</span><span id="L-4277"><a href="#L-4277"><span class="linenos">4277</span></a>
</span><span id="L-4278"><a href="#L-4278"><span class="linenos">4278</span></a> <span class="k">return</span> <span class="n">pivot</span>
</span><span id="L-4279"><a href="#L-4279"><span class="linenos">4279</span></a>
</span><span id="L-4280"><a href="#L-4280"><span class="linenos">4280</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</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="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-4281"><a href="#L-4281"><span class="linenos">4281</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <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-4282"><a href="#L-4282"><span class="linenos">4282</span></a>
</span><span id="L-4283"><a href="#L-4283"><span class="linenos">4283</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_prewhere</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">PreWhere</span><span class="p">]:</span>
</span><span id="L-4284"><a href="#L-4284"><span class="linenos">4284</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_where_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PREWHERE</span><span class="p">):</span>
</span><span id="L-4285"><a href="#L-4285"><span class="linenos">4285</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4286"><a href="#L-4286"><span class="linenos">4286</span></a>
</span><span id="L-4287"><a href="#L-4287"><span class="linenos">4287</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4288"><a href="#L-4288"><span class="linenos">4288</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PreWhere</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-4289"><a href="#L-4289"><span class="linenos">4289</span></a> <span class="p">)</span>
</span><span id="L-4290"><a href="#L-4290"><span class="linenos">4290</span></a>
</span><span id="L-4291"><a href="#L-4291"><span class="linenos">4291</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">]:</span>
</span><span id="L-4292"><a href="#L-4292"><span class="linenos">4292</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_where_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">):</span>
</span><span id="L-4293"><a href="#L-4293"><span class="linenos">4293</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4294"><a href="#L-4294"><span class="linenos">4294</span></a>
</span><span id="L-4295"><a href="#L-4295"><span class="linenos">4295</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4296"><a href="#L-4296"><span class="linenos">4296</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-4297"><a href="#L-4297"><span class="linenos">4297</span></a> <span class="p">)</span>
</span><span id="L-4298"><a href="#L-4298"><span class="linenos">4298</span></a>
</span><span id="L-4299"><a href="#L-4299"><span class="linenos">4299</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">]:</span>
</span><span id="L-4300"><a href="#L-4300"><span class="linenos">4300</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_group_by_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">):</span>
</span><span id="L-4301"><a href="#L-4301"><span class="linenos">4301</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4302"><a href="#L-4302"><span class="linenos">4302</span></a>
</span><span id="L-4303"><a href="#L-4303"><span class="linenos">4303</span></a> <span class="n">elements</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">Any</span><span class="p">]</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
</span><span id="L-4304"><a href="#L-4304"><span class="linenos">4304</span></a>
</span><span id="L-4305"><a href="#L-4305"><span class="linenos">4305</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
</span><span id="L-4306"><a href="#L-4306"><span class="linenos">4306</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;all&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-4307"><a href="#L-4307"><span class="linenos">4307</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
</span><span id="L-4308"><a href="#L-4308"><span class="linenos">4308</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;all&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-4309"><a href="#L-4309"><span class="linenos">4309</span></a>
</span><span id="L-4310"><a href="#L-4310"><span class="linenos">4310</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-4311"><a href="#L-4311"><span class="linenos">4311</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-4312"><a href="#L-4312"><span class="linenos">4312</span></a>
</span><span id="L-4313"><a href="#L-4313"><span class="linenos">4313</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;expressions&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
</span><span id="L-4314"><a href="#L-4314"><span class="linenos">4314</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="L-4315"><a href="#L-4315"><span class="linenos">4315</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="kc">None</span>
</span><span id="L-4316"><a href="#L-4316"><span class="linenos">4316</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-4317"><a href="#L-4317"><span class="linenos">4317</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-4318"><a href="#L-4318"><span class="linenos">4318</span></a> <span class="p">)</span>
</span><span id="L-4319"><a href="#L-4319"><span class="linenos">4319</span></a> <span class="p">)</span>
</span><span id="L-4320"><a href="#L-4320"><span class="linenos">4320</span></a>
</span><span id="L-4321"><a href="#L-4321"><span class="linenos">4321</span></a> <span class="n">before_with_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-4322"><a href="#L-4322"><span class="linenos">4322</span></a> <span class="n">with_prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">)</span>
</span><span id="L-4323"><a href="#L-4323"><span class="linenos">4323</span></a>
</span><span id="L-4324"><a href="#L-4324"><span class="linenos">4324</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">):</span>
</span><span id="L-4325"><a href="#L-4325"><span class="linenos">4325</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;rollup&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="L-4326"><a href="#L-4326"><span class="linenos">4326</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cube_or_rollup</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Rollup</span><span class="p">,</span> <span class="n">with_prefix</span><span class="o">=</span><span class="n">with_prefix</span><span class="p">)</span>
</span><span id="L-4327"><a href="#L-4327"><span class="linenos">4327</span></a> <span class="p">)</span>
</span><span id="L-4328"><a href="#L-4328"><span class="linenos">4328</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">):</span>
</span><span id="L-4329"><a href="#L-4329"><span class="linenos">4329</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;cube&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="L-4330"><a href="#L-4330"><span class="linenos">4330</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cube_or_rollup</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cube</span><span class="p">,</span> <span class="n">with_prefix</span><span class="o">=</span><span class="n">with_prefix</span><span class="p">)</span>
</span><span id="L-4331"><a href="#L-4331"><span class="linenos">4331</span></a> <span class="p">)</span>
</span><span id="L-4332"><a href="#L-4332"><span class="linenos">4332</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">):</span>
</span><span id="L-4333"><a href="#L-4333"><span class="linenos">4333</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="L-4334"><a href="#L-4334"><span class="linenos">4334</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4335"><a href="#L-4335"><span class="linenos">4335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupingSets</span><span class="p">,</span>
</span><span id="L-4336"><a href="#L-4336"><span class="linenos">4336</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_set</span><span class="p">),</span>
</span><span id="L-4337"><a href="#L-4337"><span class="linenos">4337</span></a> <span class="p">)</span>
</span><span id="L-4338"><a href="#L-4338"><span class="linenos">4338</span></a> <span class="p">)</span>
</span><span id="L-4339"><a href="#L-4339"><span class="linenos">4339</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TOTALS&quot;</span><span class="p">):</span>
</span><span id="L-4340"><a href="#L-4340"><span class="linenos">4340</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
</span><span id="L-4341"><a href="#L-4341"><span class="linenos">4341</span></a>
</span><span id="L-4342"><a href="#L-4342"><span class="linenos">4342</span></a> <span class="k">if</span> <span class="n">before_with_index</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&lt;=</span> <span class="n">before_with_index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-4343"><a href="#L-4343"><span class="linenos">4343</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">before_with_index</span><span class="p">)</span>
</span><span id="L-4344"><a href="#L-4344"><span class="linenos">4344</span></a> <span class="k">break</span>
</span><span id="L-4345"><a href="#L-4345"><span class="linenos">4345</span></a>
</span><span id="L-4346"><a href="#L-4346"><span class="linenos">4346</span></a> <span class="k">if</span> <span class="n">index</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="p">:</span>
</span><span id="L-4347"><a href="#L-4347"><span class="linenos">4347</span></a> <span class="k">break</span>
</span><span id="L-4348"><a href="#L-4348"><span class="linenos">4348</span></a>
</span><span id="L-4349"><a href="#L-4349"><span class="linenos">4349</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">,</span> <span class="o">**</span><span class="n">elements</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="L-4350"><a href="#L-4350"><span class="linenos">4350</span></a>
</span><span id="L-4351"><a href="#L-4351"><span class="linenos">4351</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_cube_or_rollup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kind</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">with_prefix</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">E</span><span class="p">:</span>
</span><span id="L-4352"><a href="#L-4352"><span class="linenos">4352</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4353"><a href="#L-4353"><span class="linenos">4353</span></a> <span class="n">kind</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[]</span> <span class="k">if</span> <span class="n">with_prefix</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="L-4354"><a href="#L-4354"><span class="linenos">4354</span></a> <span class="p">)</span>
</span><span id="L-4355"><a href="#L-4355"><span class="linenos">4355</span></a>
</span><span id="L-4356"><a href="#L-4356"><span class="linenos">4356</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_grouping_set</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4357"><a href="#L-4357"><span class="linenos">4357</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-4358"><a href="#L-4358"><span class="linenos">4358</span></a> <span class="n">grouping_set</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="L-4359"><a href="#L-4359"><span class="linenos">4359</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-4360"><a href="#L-4360"><span class="linenos">4360</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">grouping_set</span><span class="p">)</span>
</span><span id="L-4361"><a href="#L-4361"><span class="linenos">4361</span></a>
</span><span id="L-4362"><a href="#L-4362"><span class="linenos">4362</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-4363"><a href="#L-4363"><span class="linenos">4363</span></a>
</span><span id="L-4364"><a href="#L-4364"><span class="linenos">4364</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">]:</span>
</span><span id="L-4365"><a href="#L-4365"><span class="linenos">4365</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_having_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">):</span>
</span><span id="L-4366"><a href="#L-4366"><span class="linenos">4366</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4367"><a href="#L-4367"><span class="linenos">4367</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">())</span>
</span><span id="L-4368"><a href="#L-4368"><span class="linenos">4368</span></a>
</span><span id="L-4369"><a href="#L-4369"><span class="linenos">4369</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_qualify</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">]:</span>
</span><span id="L-4370"><a href="#L-4370"><span class="linenos">4370</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">):</span>
</span><span id="L-4371"><a href="#L-4371"><span class="linenos">4371</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4372"><a href="#L-4372"><span class="linenos">4372</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">())</span>
</span><span id="L-4373"><a href="#L-4373"><span class="linenos">4373</span></a>
</span><span id="L-4374"><a href="#L-4374"><span class="linenos">4374</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_start_token</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">]:</span>
</span><span id="L-4375"><a href="#L-4375"><span class="linenos">4375</span></a> <span class="k">if</span> <span class="n">skip_start_token</span><span class="p">:</span>
</span><span id="L-4376"><a href="#L-4376"><span class="linenos">4376</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4377"><a href="#L-4377"><span class="linenos">4377</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
</span><span id="L-4378"><a href="#L-4378"><span class="linenos">4378</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-4379"><a href="#L-4379"><span class="linenos">4379</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4380"><a href="#L-4380"><span class="linenos">4380</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4381"><a href="#L-4381"><span class="linenos">4381</span></a>
</span><span id="L-4382"><a href="#L-4382"><span class="linenos">4382</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">)</span>
</span><span id="L-4383"><a href="#L-4383"><span class="linenos">4383</span></a> <span class="n">nocycle</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOCYCLE&quot;</span><span class="p">)</span>
</span><span id="L-4384"><a href="#L-4384"><span class="linenos">4384</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">[</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4385"><a href="#L-4385"><span class="linenos">4385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-4386"><a href="#L-4386"><span class="linenos">4386</span></a> <span class="p">)</span>
</span><span id="L-4387"><a href="#L-4387"><span class="linenos">4387</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-4388"><a href="#L-4388"><span class="linenos">4388</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">)</span>
</span><span id="L-4389"><a href="#L-4389"><span class="linenos">4389</span></a>
</span><span id="L-4390"><a href="#L-4390"><span class="linenos">4390</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
</span><span id="L-4391"><a href="#L-4391"><span class="linenos">4391</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-4392"><a href="#L-4392"><span class="linenos">4392</span></a>
</span><span id="L-4393"><a href="#L-4393"><span class="linenos">4393</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">connect</span><span class="o">=</span><span class="n">connect</span><span class="p">,</span> <span class="n">nocycle</span><span class="o">=</span><span class="n">nocycle</span><span class="p">)</span>
</span><span id="L-4394"><a href="#L-4394"><span class="linenos">4394</span></a>
</span><span id="L-4395"><a href="#L-4395"><span class="linenos">4395</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_name_as_expression</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4396"><a href="#L-4396"><span class="linenos">4396</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-4397"><a href="#L-4397"><span class="linenos">4397</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
</span><span id="L-4398"><a href="#L-4398"><span class="linenos">4398</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">())</span>
</span><span id="L-4399"><a href="#L-4399"><span class="linenos">4399</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4400"><a href="#L-4400"><span class="linenos">4400</span></a>
</span><span id="L-4401"><a href="#L-4401"><span class="linenos">4401</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_interpolate</span><span class="p">(</span><span class="bp">self</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">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><span id="L-4402"><a href="#L-4402"><span class="linenos">4402</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INTERPOLATE&quot;</span><span class="p">):</span>
</span><span id="L-4403"><a href="#L-4403"><span class="linenos">4403</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_name_as_expression</span><span class="p">)</span>
</span><span id="L-4404"><a href="#L-4404"><span class="linenos">4404</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4405"><a href="#L-4405"><span class="linenos">4405</span></a>
</span><span id="L-4406"><a href="#L-4406"><span class="linenos">4406</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_order</span><span class="p">(</span>
</span><span id="L-4407"><a href="#L-4407"><span class="linenos">4407</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">skip_order_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-4408"><a href="#L-4408"><span class="linenos">4408</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-4409"><a href="#L-4409"><span class="linenos">4409</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4410"><a href="#L-4410"><span class="linenos">4410</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_order_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">):</span>
</span><span id="L-4411"><a href="#L-4411"><span class="linenos">4411</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_SIBLINGS_BY</span><span class="p">):</span>
</span><span id="L-4412"><a href="#L-4412"><span class="linenos">4412</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4413"><a href="#L-4413"><span class="linenos">4413</span></a>
</span><span id="L-4414"><a href="#L-4414"><span class="linenos">4414</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-4415"><a href="#L-4415"><span class="linenos">4415</span></a>
</span><span id="L-4416"><a href="#L-4416"><span class="linenos">4416</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4417"><a href="#L-4417"><span class="linenos">4417</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">,</span>
</span><span id="L-4418"><a href="#L-4418"><span class="linenos">4418</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-4419"><a href="#L-4419"><span class="linenos">4419</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">),</span>
</span><span id="L-4420"><a href="#L-4420"><span class="linenos">4420</span></a> <span class="n">siblings</span><span class="o">=</span><span class="n">siblings</span><span class="p">,</span>
</span><span id="L-4421"><a href="#L-4421"><span class="linenos">4421</span></a> <span class="p">)</span>
</span><span id="L-4422"><a href="#L-4422"><span class="linenos">4422</span></a>
</span><span id="L-4423"><a href="#L-4423"><span class="linenos">4423</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <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">token</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">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
</span><span id="L-4424"><a href="#L-4424"><span class="linenos">4424</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
</span><span id="L-4425"><a href="#L-4425"><span class="linenos">4425</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4426"><a href="#L-4426"><span class="linenos">4426</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp_class</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">))</span>
</span><span id="L-4427"><a href="#L-4427"><span class="linenos">4427</span></a>
</span><span id="L-4428"><a href="#L-4428"><span class="linenos">4428</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_ordered</span><span class="p">(</span>
</span><span id="L-4429"><a href="#L-4429"><span class="linenos">4429</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</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">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4430"><a href="#L-4430"><span class="linenos">4430</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">Ordered</span><span class="p">]:</span>
</span><span id="L-4431"><a href="#L-4431"><span class="linenos">4431</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span> <span class="k">if</span> <span class="n">parse_method</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-4432"><a href="#L-4432"><span class="linenos">4432</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="L-4433"><a href="#L-4433"><span class="linenos">4433</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4434"><a href="#L-4434"><span class="linenos">4434</span></a>
</span><span id="L-4435"><a href="#L-4435"><span class="linenos">4435</span></a> <span class="k">if</span> <span class="n">this</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="o">==</span> <span class="s2">&quot;ALL&quot;</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_ORDER_BY_ALL</span><span class="p">:</span>
</span><span id="L-4436"><a href="#L-4436"><span class="linenos">4436</span></a> <span class="n">this</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="s2">&quot;ALL&quot;</span><span class="p">)</span>
</span><span id="L-4437"><a href="#L-4437"><span class="linenos">4437</span></a>
</span><span id="L-4438"><a href="#L-4438"><span class="linenos">4438</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">)</span>
</span><span id="L-4439"><a href="#L-4439"><span class="linenos">4439</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="L-4440"><a href="#L-4440"><span class="linenos">4440</span></a>
</span><span id="L-4441"><a href="#L-4441"><span class="linenos">4441</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
</span><span id="L-4442"><a href="#L-4442"><span class="linenos">4442</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
</span><span id="L-4443"><a href="#L-4443"><span class="linenos">4443</span></a>
</span><span id="L-4444"><a href="#L-4444"><span class="linenos">4444</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="kc">False</span>
</span><span id="L-4445"><a href="#L-4445"><span class="linenos">4445</span></a> <span class="n">explicitly_null_ordered</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="n">is_nulls_last</span>
</span><span id="L-4446"><a href="#L-4446"><span class="linenos">4446</span></a>
</span><span id="L-4447"><a href="#L-4447"><span class="linenos">4447</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="L-4448"><a href="#L-4448"><span class="linenos">4448</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
</span><span id="L-4449"><a href="#L-4449"><span class="linenos">4449</span></a> <span class="ow">and</span> <span class="p">(</span>
</span><span id="L-4450"><a href="#L-4450"><span class="linenos">4450</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
</span><span id="L-4451"><a href="#L-4451"><span class="linenos">4451</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
</span><span id="L-4452"><a href="#L-4452"><span class="linenos">4452</span></a> <span class="p">)</span>
</span><span id="L-4453"><a href="#L-4453"><span class="linenos">4453</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
</span><span id="L-4454"><a href="#L-4454"><span class="linenos">4454</span></a> <span class="p">):</span>
</span><span id="L-4455"><a href="#L-4455"><span class="linenos">4455</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-4456"><a href="#L-4456"><span class="linenos">4456</span></a>
</span><span id="L-4457"><a href="#L-4457"><span class="linenos">4457</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;FILL&quot;</span><span class="p">):</span>
</span><span id="L-4458"><a href="#L-4458"><span class="linenos">4458</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4459"><a href="#L-4459"><span class="linenos">4459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithFill</span><span class="p">,</span>
</span><span id="L-4460"><a href="#L-4460"><span class="linenos">4460</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
</span><span id="L-4461"><a href="#L-4461"><span class="linenos">4461</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="L-4462"><a href="#L-4462"><span class="linenos">4462</span></a> <span class="s2">&quot;to&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="L-4463"><a href="#L-4463"><span class="linenos">4463</span></a> <span class="s2">&quot;step&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STEP&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="L-4464"><a href="#L-4464"><span class="linenos">4464</span></a> <span class="s2">&quot;interpolate&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_interpolate</span><span class="p">(),</span>
</span><span id="L-4465"><a href="#L-4465"><span class="linenos">4465</span></a> <span class="p">},</span>
</span><span id="L-4466"><a href="#L-4466"><span class="linenos">4466</span></a> <span class="p">)</span>
</span><span id="L-4467"><a href="#L-4467"><span class="linenos">4467</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4468"><a href="#L-4468"><span class="linenos">4468</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4469"><a href="#L-4469"><span class="linenos">4469</span></a>
</span><span id="L-4470"><a href="#L-4470"><span class="linenos">4470</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4471"><a href="#L-4471"><span class="linenos">4471</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="n">nulls_first</span><span class="p">,</span> <span class="n">with_fill</span><span class="o">=</span><span class="n">with_fill</span>
</span><span id="L-4472"><a href="#L-4472"><span class="linenos">4472</span></a> <span class="p">)</span>
</span><span id="L-4473"><a href="#L-4473"><span class="linenos">4473</span></a>
</span><span id="L-4474"><a href="#L-4474"><span class="linenos">4474</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_limit_options</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">LimitOptions</span><span class="p">:</span>
</span><span id="L-4475"><a href="#L-4475"><span class="linenos">4475</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">)</span>
</span><span id="L-4476"><a href="#L-4476"><span class="linenos">4476</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
</span><span id="L-4477"><a href="#L-4477"><span class="linenos">4477</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
</span><span id="L-4478"><a href="#L-4478"><span class="linenos">4478</span></a> <span class="n">with_ties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIES&quot;</span><span class="p">)</span>
</span><span id="L-4479"><a href="#L-4479"><span class="linenos">4479</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LimitOptions</span><span class="p">,</span> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span> <span class="n">with_ties</span><span class="o">=</span><span class="n">with_ties</span><span class="p">)</span>
</span><span id="L-4480"><a href="#L-4480"><span class="linenos">4480</span></a>
</span><span id="L-4481"><a href="#L-4481"><span class="linenos">4481</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_limit</span><span class="p">(</span>
</span><span id="L-4482"><a href="#L-4482"><span class="linenos">4482</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-4483"><a href="#L-4483"><span class="linenos">4483</span></a> <span class="n">this</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 class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-4484"><a href="#L-4484"><span class="linenos">4484</span></a> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-4485"><a href="#L-4485"><span class="linenos">4485</span></a> <span class="n">skip_limit_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-4486"><a href="#L-4486"><span class="linenos">4486</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-4487"><a href="#L-4487"><span class="linenos">4487</span></a> <span class="k">if</span> <span class="n">skip_limit_token</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">):</span>
</span><span id="L-4488"><a href="#L-4488"><span class="linenos">4488</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="L-4489"><a href="#L-4489"><span class="linenos">4489</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
</span><span id="L-4490"><a href="#L-4490"><span class="linenos">4490</span></a> <span class="n">limit_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="L-4491"><a href="#L-4491"><span class="linenos">4491</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span> <span class="k">if</span> <span class="n">limit_paren</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="L-4492"><a href="#L-4492"><span class="linenos">4492</span></a>
</span><span id="L-4493"><a href="#L-4493"><span class="linenos">4493</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
</span><span id="L-4494"><a href="#L-4494"><span class="linenos">4494</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-4495"><a href="#L-4495"><span class="linenos">4495</span></a>
</span><span id="L-4496"><a href="#L-4496"><span class="linenos">4496</span></a> <span class="n">limit_options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_options</span><span class="p">()</span>
</span><span id="L-4497"><a href="#L-4497"><span class="linenos">4497</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4498"><a href="#L-4498"><span class="linenos">4498</span></a> <span class="n">limit_options</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4499"><a href="#L-4499"><span class="linenos">4499</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="L-4500"><a href="#L-4500"><span class="linenos">4500</span></a>
</span><span id="L-4501"><a href="#L-4501"><span class="linenos">4501</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="L-4502"><a href="#L-4502"><span class="linenos">4502</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
</span><span id="L-4503"><a href="#L-4503"><span class="linenos">4503</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="L-4504"><a href="#L-4504"><span class="linenos">4504</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4505"><a href="#L-4505"><span class="linenos">4505</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4506"><a href="#L-4506"><span class="linenos">4506</span></a>
</span><span id="L-4507"><a href="#L-4507"><span class="linenos">4507</span></a> <span class="n">limit_exp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4508"><a href="#L-4508"><span class="linenos">4508</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span>
</span><span id="L-4509"><a href="#L-4509"><span class="linenos">4509</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-4510"><a href="#L-4510"><span class="linenos">4510</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="L-4511"><a href="#L-4511"><span class="linenos">4511</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
</span><span id="L-4512"><a href="#L-4512"><span class="linenos">4512</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="L-4513"><a href="#L-4513"><span class="linenos">4513</span></a> <span class="n">limit_options</span><span class="o">=</span><span class="n">limit_options</span><span class="p">,</span>
</span><span id="L-4514"><a href="#L-4514"><span class="linenos">4514</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_by</span><span class="p">(),</span>
</span><span id="L-4515"><a href="#L-4515"><span class="linenos">4515</span></a> <span class="p">)</span>
</span><span id="L-4516"><a href="#L-4516"><span class="linenos">4516</span></a>
</span><span id="L-4517"><a href="#L-4517"><span class="linenos">4517</span></a> <span class="k">return</span> <span class="n">limit_exp</span>
</span><span id="L-4518"><a href="#L-4518"><span class="linenos">4518</span></a>
</span><span id="L-4519"><a href="#L-4519"><span class="linenos">4519</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">):</span>
</span><span id="L-4520"><a href="#L-4520"><span class="linenos">4520</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">))</span>
</span><span id="L-4521"><a href="#L-4521"><span class="linenos">4521</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
</span><span id="L-4522"><a href="#L-4522"><span class="linenos">4522</span></a>
</span><span id="L-4523"><a href="#L-4523"><span class="linenos">4523</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">FETCH_TOKENS</span><span class="p">)</span>
</span><span id="L-4524"><a href="#L-4524"><span class="linenos">4524</span></a>
</span><span id="L-4525"><a href="#L-4525"><span class="linenos">4525</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4526"><a href="#L-4526"><span class="linenos">4526</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
</span><span id="L-4527"><a href="#L-4527"><span class="linenos">4527</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
</span><span id="L-4528"><a href="#L-4528"><span class="linenos">4528</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
</span><span id="L-4529"><a href="#L-4529"><span class="linenos">4529</span></a> <span class="n">limit_options</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_options</span><span class="p">(),</span>
</span><span id="L-4530"><a href="#L-4530"><span class="linenos">4530</span></a> <span class="p">)</span>
</span><span id="L-4531"><a href="#L-4531"><span class="linenos">4531</span></a>
</span><span id="L-4532"><a href="#L-4532"><span class="linenos">4532</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4533"><a href="#L-4533"><span class="linenos">4533</span></a>
</span><span id="L-4534"><a href="#L-4534"><span class="linenos">4534</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_offset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">=</span> <span class="kc">None</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4535"><a href="#L-4535"><span class="linenos">4535</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
</span><span id="L-4536"><a href="#L-4536"><span class="linenos">4536</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4537"><a href="#L-4537"><span class="linenos">4537</span></a>
</span><span id="L-4538"><a href="#L-4538"><span class="linenos">4538</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="L-4539"><a href="#L-4539"><span class="linenos">4539</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
</span><span id="L-4540"><a href="#L-4540"><span class="linenos">4540</span></a>
</span><span id="L-4541"><a href="#L-4541"><span class="linenos">4541</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4542"><a href="#L-4542"><span class="linenos">4542</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</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">count</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_by</span><span class="p">()</span>
</span><span id="L-4543"><a href="#L-4543"><span class="linenos">4543</span></a> <span class="p">)</span>
</span><span id="L-4544"><a href="#L-4544"><span class="linenos">4544</span></a>
</span><span id="L-4545"><a href="#L-4545"><span class="linenos">4545</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_can_parse_limit_or_offset</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="L-4546"><a href="#L-4546"><span class="linenos">4546</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AMBIGUOUS_ALIAS_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-4547"><a href="#L-4547"><span class="linenos">4547</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="L-4548"><a href="#L-4548"><span class="linenos">4548</span></a>
</span><span id="L-4549"><a href="#L-4549"><span class="linenos">4549</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-4550"><a href="#L-4550"><span class="linenos">4550</span></a> <span class="n">result</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span>
</span><span id="L-4551"><a href="#L-4551"><span class="linenos">4551</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_try_parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">,</span> <span class="n">retreat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-4552"><a href="#L-4552"><span class="linenos">4552</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_try_parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_offset</span><span class="p">,</span> <span class="n">retreat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-4553"><a href="#L-4553"><span class="linenos">4553</span></a> <span class="p">)</span>
</span><span id="L-4554"><a href="#L-4554"><span class="linenos">4554</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-4555"><a href="#L-4555"><span class="linenos">4555</span></a> <span class="k">return</span> <span class="n">result</span>
</span><span id="L-4556"><a href="#L-4556"><span class="linenos">4556</span></a>
</span><span id="L-4557"><a href="#L-4557"><span class="linenos">4557</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_limit_by</span><span class="p">(</span><span class="bp">self</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">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><span id="L-4558"><a href="#L-4558"><span class="linenos">4558</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="L-4559"><a href="#L-4559"><span class="linenos">4559</span></a>
</span><span id="L-4560"><a href="#L-4560"><span class="linenos">4560</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_locks</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
</span><span id="L-4561"><a href="#L-4561"><span class="linenos">4561</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-4562"><a href="#L-4562"><span class="linenos">4562</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-4563"><a href="#L-4563"><span class="linenos">4563</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">):</span>
</span><span id="L-4564"><a href="#L-4564"><span class="linenos">4564</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-4565"><a href="#L-4565"><span class="linenos">4565</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
</span><span id="L-4566"><a href="#L-4566"><span class="linenos">4566</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
</span><span id="L-4567"><a href="#L-4567"><span class="linenos">4567</span></a> <span class="p">):</span>
</span><span id="L-4568"><a href="#L-4568"><span class="linenos">4568</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-4569"><a href="#L-4569"><span class="linenos">4569</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4570"><a href="#L-4570"><span class="linenos">4570</span></a> <span class="k">break</span>
</span><span id="L-4571"><a href="#L-4571"><span class="linenos">4571</span></a>
</span><span id="L-4572"><a href="#L-4572"><span class="linenos">4572</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4573"><a href="#L-4573"><span class="linenos">4573</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OF&quot;</span><span class="p">):</span>
</span><span id="L-4574"><a href="#L-4574"><span class="linenos">4574</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="L-4575"><a href="#L-4575"><span class="linenos">4575</span></a>
</span><span id="L-4576"><a href="#L-4576"><span class="linenos">4576</span></a> <span class="n">wait</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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4577"><a href="#L-4577"><span class="linenos">4577</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOWAIT&quot;</span><span class="p">):</span>
</span><span id="L-4578"><a href="#L-4578"><span class="linenos">4578</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-4579"><a href="#L-4579"><span class="linenos">4579</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WAIT&quot;</span><span class="p">):</span>
</span><span id="L-4580"><a href="#L-4580"><span class="linenos">4580</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="L-4581"><a href="#L-4581"><span class="linenos">4581</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
</span><span id="L-4582"><a href="#L-4582"><span class="linenos">4582</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-4583"><a href="#L-4583"><span class="linenos">4583</span></a>
</span><span id="L-4584"><a href="#L-4584"><span class="linenos">4584</span></a> <span class="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="L-4585"><a href="#L-4585"><span class="linenos">4585</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
</span><span id="L-4586"><a href="#L-4586"><span class="linenos">4586</span></a> <span class="p">)</span>
</span><span id="L-4587"><a href="#L-4587"><span class="linenos">4587</span></a>
</span><span id="L-4588"><a href="#L-4588"><span class="linenos">4588</span></a> <span class="k">return</span> <span class="n">locks</span>
</span><span id="L-4589"><a href="#L-4589"><span class="linenos">4589</span></a>
</span><span id="L-4590"><a href="#L-4590"><span class="linenos">4590</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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-4591"><a href="#L-4591"><span class="linenos">4591</span></a> <span class="k">while</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_OPERATIONS</span><span class="p">):</span>
</span><span id="L-4592"><a href="#L-4592"><span class="linenos">4592</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="L-4593"><a href="#L-4593"><span class="linenos">4593</span></a>
</span><span id="L-4594"><a href="#L-4594"><span class="linenos">4594</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">:</span>
</span><span id="L-4595"><a href="#L-4595"><span class="linenos">4595</span></a> <span class="n">operation</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">exp</span><span class="o">.</span><span class="n">SetOperation</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
</span><span id="L-4596"><a href="#L-4596"><span class="linenos">4596</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">:</span>
</span><span id="L-4597"><a href="#L-4597"><span class="linenos">4597</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
</span><span id="L-4598"><a href="#L-4598"><span class="linenos">4598</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4599"><a href="#L-4599"><span class="linenos">4599</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span>
</span><span id="L-4600"><a href="#L-4600"><span class="linenos">4600</span></a>
</span><span id="L-4601"><a href="#L-4601"><span class="linenos">4601</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">comments</span>
</span><span id="L-4602"><a href="#L-4602"><span class="linenos">4602</span></a>
</span><span id="L-4603"><a href="#L-4603"><span class="linenos">4603</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
</span><span id="L-4604"><a href="#L-4604"><span class="linenos">4604</span></a> <span class="n">distinct</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="p">]</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-4605"><a href="#L-4605"><span class="linenos">4605</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
</span><span id="L-4606"><a href="#L-4606"><span class="linenos">4606</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-4607"><a href="#L-4607"><span class="linenos">4607</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4608"><a href="#L-4608"><span class="linenos">4608</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SET_OP_DISTINCT_BY_DEFAULT</span><span class="p">[</span><span class="n">operation</span><span class="p">]</span>
</span><span id="L-4609"><a href="#L-4609"><span class="linenos">4609</span></a> <span class="k">if</span> <span class="n">distinct</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-4610"><a href="#L-4610"><span class="linenos">4610</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected DISTINCT or ALL for </span><span class="si">{</span><span class="n">operation</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-4611"><a href="#L-4611"><span class="linenos">4611</span></a>
</span><span id="L-4612"><a href="#L-4612"><span class="linenos">4612</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">)</span>
</span><span id="L-4613"><a href="#L-4613"><span class="linenos">4613</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_set_operation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-4614"><a href="#L-4614"><span class="linenos">4614</span></a>
</span><span id="L-4615"><a href="#L-4615"><span class="linenos">4615</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4616"><a href="#L-4616"><span class="linenos">4616</span></a> <span class="n">operation</span><span class="p">,</span>
</span><span id="L-4617"><a href="#L-4617"><span class="linenos">4617</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="L-4618"><a href="#L-4618"><span class="linenos">4618</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-4619"><a href="#L-4619"><span class="linenos">4619</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
</span><span id="L-4620"><a href="#L-4620"><span class="linenos">4620</span></a> <span class="n">by_name</span><span class="o">=</span><span class="n">by_name</span><span class="p">,</span>
</span><span id="L-4621"><a href="#L-4621"><span class="linenos">4621</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="L-4622"><a href="#L-4622"><span class="linenos">4622</span></a> <span class="p">)</span>
</span><span id="L-4623"><a href="#L-4623"><span class="linenos">4623</span></a>
</span><span id="L-4624"><a href="#L-4624"><span class="linenos">4624</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">SetOperation</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">MODIFIERS_ATTACHED_TO_SET_OP</span><span class="p">:</span>
</span><span id="L-4625"><a href="#L-4625"><span class="linenos">4625</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">expression</span>
</span><span id="L-4626"><a href="#L-4626"><span class="linenos">4626</span></a>
</span><span id="L-4627"><a href="#L-4627"><span class="linenos">4627</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="L-4628"><a href="#L-4628"><span class="linenos">4628</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_OP_MODIFIERS</span><span class="p">:</span>
</span><span id="L-4629"><a href="#L-4629"><span class="linenos">4629</span></a> <span class="n">expr</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="n">arg</span><span class="p">)</span>
</span><span id="L-4630"><a href="#L-4630"><span class="linenos">4630</span></a> <span class="k">if</span> <span class="n">expr</span><span class="p">:</span>
</span><span id="L-4631"><a href="#L-4631"><span class="linenos">4631</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
</span><span id="L-4632"><a href="#L-4632"><span class="linenos">4632</span></a>
</span><span id="L-4633"><a href="#L-4633"><span class="linenos">4633</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4634"><a href="#L-4634"><span class="linenos">4634</span></a>
</span><span id="L-4635"><a href="#L-4635"><span class="linenos">4635</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_expression</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4636"><a href="#L-4636"><span class="linenos">4636</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">())</span>
</span><span id="L-4637"><a href="#L-4637"><span class="linenos">4637</span></a>
</span><span id="L-4638"><a href="#L-4638"><span class="linenos">4638</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_assignment</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4639"><a href="#L-4639"><span class="linenos">4639</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_disjunction</span><span class="p">()</span>
</span><span id="L-4640"><a href="#L-4640"><span class="linenos">4640</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ASSIGNMENT</span><span class="p">:</span>
</span><span id="L-4641"><a href="#L-4641"><span class="linenos">4641</span></a> <span class="c1"># This allows us to parse &lt;non-identifier token&gt; := &lt;expr&gt;</span>
</span><span id="L-4642"><a href="#L-4642"><span class="linenos">4642</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span>
</span><span id="L-4643"><a href="#L-4643"><span class="linenos">4643</span></a> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">(</span><span class="n">ignore_reserved</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-4644"><a href="#L-4644"><span class="linenos">4644</span></a> <span class="p">)</span>
</span><span id="L-4645"><a href="#L-4645"><span class="linenos">4645</span></a>
</span><span id="L-4646"><a href="#L-4646"><span class="linenos">4646</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ASSIGNMENT</span><span class="p">):</span>
</span><span id="L-4647"><a href="#L-4647"><span class="linenos">4647</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-4648"><a href="#L-4648"><span class="linenos">4648</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-4649"><a href="#L-4649"><span class="linenos">4649</span></a>
</span><span id="L-4650"><a href="#L-4650"><span class="linenos">4650</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4651"><a href="#L-4651"><span class="linenos">4651</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">ASSIGNMENT</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
</span><span id="L-4652"><a href="#L-4652"><span class="linenos">4652</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-4653"><a href="#L-4653"><span class="linenos">4653</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
</span><span id="L-4654"><a href="#L-4654"><span class="linenos">4654</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span>
</span><span id="L-4655"><a href="#L-4655"><span class="linenos">4655</span></a> <span class="p">)</span>
</span><span id="L-4656"><a href="#L-4656"><span class="linenos">4656</span></a>
</span><span id="L-4657"><a href="#L-4657"><span class="linenos">4657</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4658"><a href="#L-4658"><span class="linenos">4658</span></a>
</span><span id="L-4659"><a href="#L-4659"><span class="linenos">4659</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_disjunction</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4660"><a href="#L-4660"><span class="linenos">4660</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">DISJUNCTION</span><span class="p">)</span>
</span><span id="L-4661"><a href="#L-4661"><span class="linenos">4661</span></a>
</span><span id="L-4662"><a href="#L-4662"><span class="linenos">4662</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_conjunction</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4663"><a href="#L-4663"><span class="linenos">4663</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONJUNCTION</span><span class="p">)</span>
</span><span id="L-4664"><a href="#L-4664"><span class="linenos">4664</span></a>
</span><span id="L-4665"><a href="#L-4665"><span class="linenos">4665</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_equality</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4666"><a href="#L-4666"><span class="linenos">4666</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_comparison</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EQUALITY</span><span class="p">)</span>
</span><span id="L-4667"><a href="#L-4667"><span class="linenos">4667</span></a>
</span><span id="L-4668"><a href="#L-4668"><span class="linenos">4668</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_comparison</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4669"><a href="#L-4669"><span class="linenos">4669</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_range</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPARISON</span><span class="p">)</span>
</span><span id="L-4670"><a href="#L-4670"><span class="linenos">4670</span></a>
</span><span id="L-4671"><a href="#L-4671"><span class="linenos">4671</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">=</span> <span class="kc">None</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4672"><a href="#L-4672"><span class="linenos">4672</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-4673"><a href="#L-4673"><span class="linenos">4673</span></a> <span class="n">negate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
</span><span id="L-4674"><a href="#L-4674"><span class="linenos">4674</span></a>
</span><span id="L-4675"><a href="#L-4675"><span class="linenos">4675</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">):</span>
</span><span id="L-4676"><a href="#L-4676"><span class="linenos">4676</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
</span><span id="L-4677"><a href="#L-4677"><span class="linenos">4677</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="L-4678"><a href="#L-4678"><span class="linenos">4678</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4679"><a href="#L-4679"><span class="linenos">4679</span></a>
</span><span id="L-4680"><a href="#L-4680"><span class="linenos">4680</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
</span><span id="L-4681"><a href="#L-4681"><span class="linenos">4681</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">):</span>
</span><span id="L-4682"><a href="#L-4682"><span class="linenos">4682</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</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">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
</span><span id="L-4683"><a href="#L-4683"><span class="linenos">4683</span></a>
</span><span id="L-4684"><a href="#L-4684"><span class="linenos">4684</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
</span><span id="L-4685"><a href="#L-4685"><span class="linenos">4685</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
</span><span id="L-4686"><a href="#L-4686"><span class="linenos">4686</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOTNULL</span><span class="p">):</span>
</span><span id="L-4687"><a href="#L-4687"><span class="linenos">4687</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</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">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
</span><span id="L-4688"><a href="#L-4688"><span class="linenos">4688</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</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-4689"><a href="#L-4689"><span class="linenos">4689</span></a>
</span><span id="L-4690"><a href="#L-4690"><span class="linenos">4690</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
</span><span id="L-4691"><a href="#L-4691"><span class="linenos">4691</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_negate_range</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-4692"><a href="#L-4692"><span class="linenos">4692</span></a>
</span><span id="L-4693"><a href="#L-4693"><span class="linenos">4693</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">):</span>
</span><span id="L-4694"><a href="#L-4694"><span class="linenos">4694</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_is</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-4695"><a href="#L-4695"><span class="linenos">4695</span></a>
</span><span id="L-4696"><a href="#L-4696"><span class="linenos">4696</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4697"><a href="#L-4697"><span class="linenos">4697</span></a>
</span><span id="L-4698"><a href="#L-4698"><span class="linenos">4698</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_negate_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">=</span> <span class="kc">None</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4699"><a href="#L-4699"><span class="linenos">4699</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="L-4700"><a href="#L-4700"><span class="linenos">4700</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4701"><a href="#L-4701"><span class="linenos">4701</span></a>
</span><span id="L-4702"><a href="#L-4702"><span class="linenos">4702</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</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-4703"><a href="#L-4703"><span class="linenos">4703</span></a>
</span><span id="L-4704"><a href="#L-4704"><span class="linenos">4704</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_is</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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-4705"><a href="#L-4705"><span class="linenos">4705</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
</span><span id="L-4706"><a href="#L-4706"><span class="linenos">4706</span></a> <span class="n">negate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
</span><span id="L-4707"><a href="#L-4707"><span class="linenos">4707</span></a>
</span><span id="L-4708"><a href="#L-4708"><span class="linenos">4708</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
</span><span id="L-4709"><a href="#L-4709"><span class="linenos">4709</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span>
</span><span id="L-4710"><a href="#L-4710"><span class="linenos">4710</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">klass</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-4711"><a href="#L-4711"><span class="linenos">4711</span></a>
</span><span id="L-4712"><a href="#L-4712"><span class="linenos">4712</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
</span><span id="L-4713"><a href="#L-4713"><span class="linenos">4713</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">IS_JSON_PREDICATE_KIND</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-4714"><a href="#L-4714"><span class="linenos">4714</span></a>
</span><span id="L-4715"><a href="#L-4715"><span class="linenos">4715</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">):</span>
</span><span id="L-4716"><a href="#L-4716"><span class="linenos">4716</span></a> <span class="n">_with</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-4717"><a href="#L-4717"><span class="linenos">4717</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">):</span>
</span><span id="L-4718"><a href="#L-4718"><span class="linenos">4718</span></a> <span class="n">_with</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-4719"><a href="#L-4719"><span class="linenos">4719</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4720"><a href="#L-4720"><span class="linenos">4720</span></a> <span class="n">_with</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4721"><a href="#L-4721"><span class="linenos">4721</span></a>
</span><span id="L-4722"><a href="#L-4722"><span class="linenos">4722</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">)</span>
</span><span id="L-4723"><a href="#L-4723"><span class="linenos">4723</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEYS&quot;</span><span class="p">)</span>
</span><span id="L-4724"><a href="#L-4724"><span class="linenos">4724</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4725"><a href="#L-4725"><span class="linenos">4725</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSON</span><span class="p">,</span> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="n">kind</span><span class="p">,</span> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="n">_with</span><span class="p">,</span> <span class="s2">&quot;unique&quot;</span><span class="p">:</span> <span class="n">unique</span><span class="p">}</span>
</span><span id="L-4726"><a href="#L-4726"><span class="linenos">4726</span></a> <span class="p">)</span>
</span><span id="L-4727"><a href="#L-4727"><span class="linenos">4727</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4728"><a href="#L-4728"><span class="linenos">4728</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_null</span><span class="p">()</span>
</span><span id="L-4729"><a href="#L-4729"><span class="linenos">4729</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="L-4730"><a href="#L-4730"><span class="linenos">4730</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-4731"><a href="#L-4731"><span class="linenos">4731</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4732"><a href="#L-4732"><span class="linenos">4732</span></a>
</span><span id="L-4733"><a href="#L-4733"><span class="linenos">4733</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</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">expression</span><span class="p">)</span>
</span><span id="L-4734"><a href="#L-4734"><span class="linenos">4734</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</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="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">this</span>
</span><span id="L-4735"><a href="#L-4735"><span class="linenos">4735</span></a>
</span><span id="L-4736"><a href="#L-4736"><span class="linenos">4736</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="n">alias</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">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
</span><span id="L-4737"><a href="#L-4737"><span class="linenos">4737</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-4738"><a href="#L-4738"><span class="linenos">4738</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
</span><span id="L-4739"><a href="#L-4739"><span class="linenos">4739</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</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">unnest</span><span class="o">=</span><span class="n">unnest</span><span class="p">)</span>
</span><span id="L-4740"><a href="#L-4740"><span class="linenos">4740</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)):</span>
</span><span id="L-4741"><a href="#L-4741"><span class="linenos">4741</span></a> <span class="n">matched_l_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span>
</span><span id="L-4742"><a href="#L-4742"><span class="linenos">4742</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
</span><span id="L-4743"><a href="#L-4743"><span class="linenos">4743</span></a>
</span><span id="L-4744"><a href="#L-4744"><span class="linenos">4744</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">):</span>
</span><span id="L-4745"><a href="#L-4745"><span class="linenos">4745</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</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">query</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
</span><span id="L-4746"><a href="#L-4746"><span class="linenos">4746</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4747"><a href="#L-4747"><span class="linenos">4747</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-4748"><a href="#L-4748"><span class="linenos">4748</span></a>
</span><span id="L-4749"><a href="#L-4749"><span class="linenos">4749</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
</span><span id="L-4750"><a href="#L-4750"><span class="linenos">4750</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-4751"><a href="#L-4751"><span class="linenos">4751</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</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-4752"><a href="#L-4752"><span class="linenos">4752</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting ]&quot;</span><span class="p">)</span>
</span><span id="L-4753"><a href="#L-4753"><span class="linenos">4753</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4754"><a href="#L-4754"><span class="linenos">4754</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</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">field</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">())</span>
</span><span id="L-4755"><a href="#L-4755"><span class="linenos">4755</span></a>
</span><span id="L-4756"><a href="#L-4756"><span class="linenos">4756</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4757"><a href="#L-4757"><span class="linenos">4757</span></a>
</span><span id="L-4758"><a href="#L-4758"><span class="linenos">4758</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_between</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">:</span>
</span><span id="L-4759"><a href="#L-4759"><span class="linenos">4759</span></a> <span class="n">low</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-4760"><a href="#L-4760"><span class="linenos">4760</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span>
</span><span id="L-4761"><a href="#L-4761"><span class="linenos">4761</span></a> <span class="n">high</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-4762"><a href="#L-4762"><span class="linenos">4762</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Between</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">low</span><span class="o">=</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="n">high</span><span class="p">)</span>
</span><span id="L-4763"><a href="#L-4763"><span class="linenos">4763</span></a>
</span><span id="L-4764"><a href="#L-4764"><span class="linenos">4764</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_escape</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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-4765"><a href="#L-4765"><span class="linenos">4765</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">):</span>
</span><span id="L-4766"><a href="#L-4766"><span class="linenos">4766</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4767"><a href="#L-4767"><span class="linenos">4767</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Escape</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="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
</span><span id="L-4768"><a href="#L-4768"><span class="linenos">4768</span></a>
</span><span id="L-4769"><a href="#L-4769"><span class="linenos">4769</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_interval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_interval</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">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">Add</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">]:</span>
</span><span id="L-4770"><a href="#L-4770"><span class="linenos">4770</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-4771"><a href="#L-4771"><span class="linenos">4771</span></a>
</span><span id="L-4772"><a href="#L-4772"><span class="linenos">4772</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span> <span class="ow">and</span> <span class="n">match_interval</span><span class="p">:</span>
</span><span id="L-4773"><a href="#L-4773"><span class="linenos">4773</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4774"><a href="#L-4774"><span class="linenos">4774</span></a>
</span><span id="L-4775"><a href="#L-4775"><span class="linenos">4775</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-4776"><a href="#L-4776"><span class="linenos">4776</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="L-4777"><a href="#L-4777"><span class="linenos">4777</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4778"><a href="#L-4778"><span class="linenos">4778</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="L-4779"><a href="#L-4779"><span class="linenos">4779</span></a>
</span><span id="L-4780"><a href="#L-4780"><span class="linenos">4780</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="p">(</span>
</span><span id="L-4781"><a href="#L-4781"><span class="linenos">4781</span></a> <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">Column</span><span class="p">)</span>
</span><span id="L-4782"><a href="#L-4782"><span class="linenos">4782</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">table</span>
</span><span id="L-4783"><a href="#L-4783"><span class="linenos">4783</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span>
</span><span id="L-4784"><a href="#L-4784"><span class="linenos">4784</span></a> <span class="ow">and</span> <span class="n">this</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="o">==</span> <span class="s2">&quot;IS&quot;</span>
</span><span id="L-4785"><a href="#L-4785"><span class="linenos">4785</span></a> <span class="p">):</span>
</span><span id="L-4786"><a href="#L-4786"><span class="linenos">4786</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-4787"><a href="#L-4787"><span class="linenos">4787</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4788"><a href="#L-4788"><span class="linenos">4788</span></a>
</span><span id="L-4789"><a href="#L-4789"><span class="linenos">4789</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="p">(</span>
</span><span id="L-4790"><a href="#L-4790"><span class="linenos">4790</span></a> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-4791"><a href="#L-4791"><span class="linenos">4791</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-4792"><a href="#L-4792"><span class="linenos">4792</span></a> <span class="p">)</span>
</span><span id="L-4793"><a href="#L-4793"><span class="linenos">4793</span></a>
</span><span id="L-4794"><a href="#L-4794"><span class="linenos">4794</span></a> <span class="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
</span><span id="L-4795"><a href="#L-4795"><span class="linenos">4795</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
</span><span id="L-4796"><a href="#L-4796"><span class="linenos">4796</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
</span><span id="L-4797"><a href="#L-4797"><span class="linenos">4797</span></a> <span class="n">this</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">this</span><span class="o">.</span><span class="n">to_py</span><span class="p">())</span>
</span><span id="L-4798"><a href="#L-4798"><span class="linenos">4798</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
</span><span id="L-4799"><a href="#L-4799"><span class="linenos">4799</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">INTERVAL_STRING_RE</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="L-4800"><a href="#L-4800"><span class="linenos">4800</span></a> <span class="k">if</span> <span class="n">parts</span> <span class="ow">and</span> <span class="n">unit</span><span class="p">:</span>
</span><span id="L-4801"><a href="#L-4801"><span class="linenos">4801</span></a> <span class="c1"># Unconsume the eagerly-parsed unit, since the real unit was part of the string</span>
</span><span id="L-4802"><a href="#L-4802"><span class="linenos">4802</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4803"><a href="#L-4803"><span class="linenos">4803</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-4804"><a href="#L-4804"><span class="linenos">4804</span></a>
</span><span id="L-4805"><a href="#L-4805"><span class="linenos">4805</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-4806"><a href="#L-4806"><span class="linenos">4806</span></a> <span class="n">this</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">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>
</span><span id="L-4807"><a href="#L-4807"><span class="linenos">4807</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-4808"><a href="#L-4808"><span class="linenos">4808</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">INTERVAL_SPANS</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
</span><span id="L-4809"><a href="#L-4809"><span class="linenos">4809</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4810"><a href="#L-4810"><span class="linenos">4810</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntervalSpan</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-4811"><a href="#L-4811"><span class="linenos">4811</span></a> <span class="p">)</span>
</span><span id="L-4812"><a href="#L-4812"><span class="linenos">4812</span></a>
</span><span id="L-4813"><a href="#L-4813"><span class="linenos">4813</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</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-4814"><a href="#L-4814"><span class="linenos">4814</span></a>
</span><span id="L-4815"><a href="#L-4815"><span class="linenos">4815</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-4816"><a href="#L-4816"><span class="linenos">4816</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">)</span>
</span><span id="L-4817"><a href="#L-4817"><span class="linenos">4817</span></a>
</span><span id="L-4818"><a href="#L-4818"><span class="linenos">4818</span></a> <span class="c1"># Convert INTERVAL &#39;val_1&#39; unit_1 [+] ... [+] &#39;val_n&#39; unit_n into a sum of intervals</span>
</span><span id="L-4819"><a href="#L-4819"><span class="linenos">4819</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-4820"><a href="#L-4820"><span class="linenos">4820</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4821"><a href="#L-4821"><span class="linenos">4821</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">(</span><span class="n">match_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-4822"><a href="#L-4822"><span class="linenos">4822</span></a> <span class="p">)</span>
</span><span id="L-4823"><a href="#L-4823"><span class="linenos">4823</span></a>
</span><span id="L-4824"><a href="#L-4824"><span class="linenos">4824</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-4825"><a href="#L-4825"><span class="linenos">4825</span></a> <span class="k">return</span> <span class="n">interval</span>
</span><span id="L-4826"><a href="#L-4826"><span class="linenos">4826</span></a>
</span><span id="L-4827"><a href="#L-4827"><span class="linenos">4827</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_bitwise</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4828"><a href="#L-4828"><span class="linenos">4828</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="L-4829"><a href="#L-4829"><span class="linenos">4829</span></a>
</span><span id="L-4830"><a href="#L-4830"><span class="linenos">4830</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-4831"><a href="#L-4831"><span class="linenos">4831</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">):</span>
</span><span id="L-4832"><a href="#L-4832"><span class="linenos">4832</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4833"><a href="#L-4833"><span class="linenos">4833</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
</span><span id="L-4834"><a href="#L-4834"><span class="linenos">4834</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-4835"><a href="#L-4835"><span class="linenos">4835</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
</span><span id="L-4836"><a href="#L-4836"><span class="linenos">4836</span></a> <span class="p">)</span>
</span><span id="L-4837"><a href="#L-4837"><span class="linenos">4837</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">):</span>
</span><span id="L-4838"><a href="#L-4838"><span class="linenos">4838</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4839"><a href="#L-4839"><span class="linenos">4839</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">,</span>
</span><span id="L-4840"><a href="#L-4840"><span class="linenos">4840</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-4841"><a href="#L-4841"><span class="linenos">4841</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
</span><span id="L-4842"><a href="#L-4842"><span class="linenos">4842</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
</span><span id="L-4843"><a href="#L-4843"><span class="linenos">4843</span></a> <span class="p">)</span>
</span><span id="L-4844"><a href="#L-4844"><span class="linenos">4844</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">):</span>
</span><span id="L-4845"><a href="#L-4845"><span class="linenos">4845</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4846"><a href="#L-4846"><span class="linenos">4846</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</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">expressions</span><span class="o">=</span><span class="n">ensure_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
</span><span id="L-4847"><a href="#L-4847"><span class="linenos">4847</span></a> <span class="p">)</span>
</span><span id="L-4848"><a href="#L-4848"><span class="linenos">4848</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
</span><span id="L-4849"><a href="#L-4849"><span class="linenos">4849</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4850"><a href="#L-4850"><span class="linenos">4850</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="L-4851"><a href="#L-4851"><span class="linenos">4851</span></a> <span class="p">)</span>
</span><span id="L-4852"><a href="#L-4852"><span class="linenos">4852</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
</span><span id="L-4853"><a href="#L-4853"><span class="linenos">4853</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4854"><a href="#L-4854"><span class="linenos">4854</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="L-4855"><a href="#L-4855"><span class="linenos">4855</span></a> <span class="p">)</span>
</span><span id="L-4856"><a href="#L-4856"><span class="linenos">4856</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-4857"><a href="#L-4857"><span class="linenos">4857</span></a> <span class="k">break</span>
</span><span id="L-4858"><a href="#L-4858"><span class="linenos">4858</span></a>
</span><span id="L-4859"><a href="#L-4859"><span class="linenos">4859</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4860"><a href="#L-4860"><span class="linenos">4860</span></a>
</span><span id="L-4861"><a href="#L-4861"><span class="linenos">4861</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_term</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4862"><a href="#L-4862"><span class="linenos">4862</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
</span><span id="L-4863"><a href="#L-4863"><span class="linenos">4863</span></a>
</span><span id="L-4864"><a href="#L-4864"><span class="linenos">4864</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TERM</span><span class="p">):</span>
</span><span id="L-4865"><a href="#L-4865"><span class="linenos">4865</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TERM</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">]</span>
</span><span id="L-4866"><a href="#L-4866"><span class="linenos">4866</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="L-4867"><a href="#L-4867"><span class="linenos">4867</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
</span><span id="L-4868"><a href="#L-4868"><span class="linenos">4868</span></a>
</span><span id="L-4869"><a href="#L-4869"><span class="linenos">4869</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">klass</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">comments</span><span class="o">=</span><span class="n">comments</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-4870"><a href="#L-4870"><span class="linenos">4870</span></a>
</span><span id="L-4871"><a href="#L-4871"><span class="linenos">4871</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">Collate</span><span class="p">):</span>
</span><span id="L-4872"><a href="#L-4872"><span class="linenos">4872</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">expression</span>
</span><span id="L-4873"><a href="#L-4873"><span class="linenos">4873</span></a>
</span><span id="L-4874"><a href="#L-4874"><span class="linenos">4874</span></a> <span class="c1"># Preserve collations such as pg_catalog.&quot;default&quot; (Postgres) as columns, otherwise</span>
</span><span id="L-4875"><a href="#L-4875"><span class="linenos">4875</span></a> <span class="c1"># fallback to Identifier / Var</span>
</span><span id="L-4876"><a href="#L-4876"><span class="linenos">4876</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expr</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-4877"><a href="#L-4877"><span class="linenos">4877</span></a> <span class="n">ident</span> <span class="o">=</span> <span class="n">expr</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-4878"><a href="#L-4878"><span class="linenos">4878</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ident</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-4879"><a href="#L-4879"><span class="linenos">4879</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="n">ident</span> <span class="k">if</span> <span class="n">ident</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">ident</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
</span><span id="L-4880"><a href="#L-4880"><span class="linenos">4880</span></a>
</span><span id="L-4881"><a href="#L-4881"><span class="linenos">4881</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4882"><a href="#L-4882"><span class="linenos">4882</span></a>
</span><span id="L-4883"><a href="#L-4883"><span class="linenos">4883</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_factor</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4884"><a href="#L-4884"><span class="linenos">4884</span></a> <span class="n">parse_method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exponent</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span>
</span><span id="L-4885"><a href="#L-4885"><span class="linenos">4885</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="L-4886"><a href="#L-4886"><span class="linenos">4886</span></a>
</span><span id="L-4887"><a href="#L-4887"><span class="linenos">4887</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">):</span>
</span><span id="L-4888"><a href="#L-4888"><span class="linenos">4888</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">]</span>
</span><span id="L-4889"><a href="#L-4889"><span class="linenos">4889</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="L-4890"><a href="#L-4890"><span class="linenos">4890</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="L-4891"><a href="#L-4891"><span class="linenos">4891</span></a>
</span><span id="L-4892"><a href="#L-4892"><span class="linenos">4892</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">klass</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">isalpha</span><span class="p">():</span>
</span><span id="L-4893"><a href="#L-4893"><span class="linenos">4893</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-4894"><a href="#L-4894"><span class="linenos">4894</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4895"><a href="#L-4895"><span class="linenos">4895</span></a>
</span><span id="L-4896"><a href="#L-4896"><span class="linenos">4896</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">klass</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">comments</span><span class="o">=</span><span class="n">comments</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-4897"><a href="#L-4897"><span class="linenos">4897</span></a>
</span><span id="L-4898"><a href="#L-4898"><span class="linenos">4898</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">Div</span><span class="p">):</span>
</span><span id="L-4899"><a href="#L-4899"><span class="linenos">4899</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;typed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span>
</span><span id="L-4900"><a href="#L-4900"><span class="linenos">4900</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;safe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span>
</span><span id="L-4901"><a href="#L-4901"><span class="linenos">4901</span></a>
</span><span id="L-4902"><a href="#L-4902"><span class="linenos">4902</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4903"><a href="#L-4903"><span class="linenos">4903</span></a>
</span><span id="L-4904"><a href="#L-4904"><span class="linenos">4904</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_exponent</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4905"><a href="#L-4905"><span class="linenos">4905</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
</span><span id="L-4906"><a href="#L-4906"><span class="linenos">4906</span></a>
</span><span id="L-4907"><a href="#L-4907"><span class="linenos">4907</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unary</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-4908"><a href="#L-4908"><span class="linenos">4908</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">):</span>
</span><span id="L-4909"><a href="#L-4909"><span class="linenos">4909</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-4910"><a href="#L-4910"><span class="linenos">4910</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">())</span>
</span><span id="L-4911"><a href="#L-4911"><span class="linenos">4911</span></a>
</span><span id="L-4912"><a href="#L-4912"><span class="linenos">4912</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_type</span><span class="p">(</span>
</span><span id="L-4913"><a href="#L-4913"><span class="linenos">4913</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_interval</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="n">fallback_to_identifier</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-4914"><a href="#L-4914"><span class="linenos">4914</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-4915"><a href="#L-4915"><span class="linenos">4915</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">parse_interval</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">()</span>
</span><span id="L-4916"><a href="#L-4916"><span class="linenos">4916</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
</span><span id="L-4917"><a href="#L-4917"><span class="linenos">4917</span></a> <span class="k">return</span> <span class="n">interval</span>
</span><span id="L-4918"><a href="#L-4918"><span class="linenos">4918</span></a>
</span><span id="L-4919"><a href="#L-4919"><span class="linenos">4919</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-4920"><a href="#L-4920"><span class="linenos">4920</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-4921"><a href="#L-4921"><span class="linenos">4921</span></a>
</span><span id="L-4922"><a href="#L-4922"><span class="linenos">4922</span></a> <span class="c1"># parse_types() returns a Cast if we parsed BQ&#39;s inline constructor &lt;type&gt;(&lt;values&gt;) e.g.</span>
</span><span id="L-4923"><a href="#L-4923"><span class="linenos">4923</span></a> <span class="c1"># STRUCT&lt;a INT, b STRING&gt;(1, &#39;foo&#39;), which is canonicalized to CAST(&lt;values&gt; AS &lt;type&gt;)</span>
</span><span id="L-4924"><a href="#L-4924"><span class="linenos">4924</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data_type</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
</span><span id="L-4925"><a href="#L-4925"><span class="linenos">4925</span></a> <span class="c1"># This constructor can contain ops directly after it, for instance struct unnesting:</span>
</span><span id="L-4926"><a href="#L-4926"><span class="linenos">4926</span></a> <span class="c1"># STRUCT&lt;a INT, b STRING&gt;(1, &#39;foo&#39;).* --&gt; CAST(STRUCT(1, &#39;foo&#39;) AS STRUCT&lt;a iNT, b STRING).*</span>
</span><span id="L-4927"><a href="#L-4927"><span class="linenos">4927</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
</span><span id="L-4928"><a href="#L-4928"><span class="linenos">4928</span></a>
</span><span id="L-4929"><a href="#L-4929"><span class="linenos">4929</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
</span><span id="L-4930"><a href="#L-4930"><span class="linenos">4930</span></a> <span class="n">index2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-4931"><a href="#L-4931"><span class="linenos">4931</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="L-4932"><a href="#L-4932"><span class="linenos">4932</span></a>
</span><span id="L-4933"><a href="#L-4933"><span class="linenos">4933</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">Literal</span><span class="p">):</span>
</span><span id="L-4934"><a href="#L-4934"><span class="linenos">4934</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_LITERAL_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">data_type</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-4935"><a href="#L-4935"><span class="linenos">4935</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
</span><span id="L-4936"><a href="#L-4936"><span class="linenos">4936</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">data_type</span><span class="p">)</span>
</span><span id="L-4937"><a href="#L-4937"><span class="linenos">4937</span></a>
</span><span id="L-4938"><a href="#L-4938"><span class="linenos">4938</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</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">to</span><span class="o">=</span><span class="n">data_type</span><span class="p">)</span>
</span><span id="L-4939"><a href="#L-4939"><span class="linenos">4939</span></a>
</span><span id="L-4940"><a href="#L-4940"><span class="linenos">4940</span></a> <span class="c1"># The expressions arg gets set by the parser when we have something like DECIMAL(38, 0)</span>
</span><span id="L-4941"><a href="#L-4941"><span class="linenos">4941</span></a> <span class="c1"># in the input SQL. In that case, we&#39;ll produce these tokens: DECIMAL ( 38 , 0 )</span>
</span><span id="L-4942"><a href="#L-4942"><span class="linenos">4942</span></a> <span class="c1">#</span>
</span><span id="L-4943"><a href="#L-4943"><span class="linenos">4943</span></a> <span class="c1"># If the index difference here is greater than 1, that means the parser itself must have</span>
</span><span id="L-4944"><a href="#L-4944"><span class="linenos">4944</span></a> <span class="c1"># consumed additional tokens such as the DECIMAL scale and precision in the above example.</span>
</span><span id="L-4945"><a href="#L-4945"><span class="linenos">4945</span></a> <span class="c1">#</span>
</span><span id="L-4946"><a href="#L-4946"><span class="linenos">4946</span></a> <span class="c1"># If it&#39;s not greater than 1, then it must be 1, because we&#39;ve consumed at least the type</span>
</span><span id="L-4947"><a href="#L-4947"><span class="linenos">4947</span></a> <span class="c1"># keyword, meaning that the expressions arg of the DataType must have gotten set by a</span>
</span><span id="L-4948"><a href="#L-4948"><span class="linenos">4948</span></a> <span class="c1"># callable in the TYPE_CONVERTERS mapping. For example, Snowflake converts DECIMAL to</span>
</span><span id="L-4949"><a href="#L-4949"><span class="linenos">4949</span></a> <span class="c1"># DECIMAL(38, 0)) in order to facilitate the data type&#39;s transpilation.</span>
</span><span id="L-4950"><a href="#L-4950"><span class="linenos">4950</span></a> <span class="c1">#</span>
</span><span id="L-4951"><a href="#L-4951"><span class="linenos">4951</span></a> <span class="c1"># In these cases, we don&#39;t really want to return the converted type, but instead retreat</span>
</span><span id="L-4952"><a href="#L-4952"><span class="linenos">4952</span></a> <span class="c1"># and try to parse a Column or Identifier in the section below.</span>
</span><span id="L-4953"><a href="#L-4953"><span class="linenos">4953</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">index2</span> <span class="o">-</span> <span class="n">index</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-4954"><a href="#L-4954"><span class="linenos">4954</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index2</span><span class="p">)</span>
</span><span id="L-4955"><a href="#L-4955"><span class="linenos">4955</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
</span><span id="L-4956"><a href="#L-4956"><span class="linenos">4956</span></a>
</span><span id="L-4957"><a href="#L-4957"><span class="linenos">4957</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-4958"><a href="#L-4958"><span class="linenos">4958</span></a>
</span><span id="L-4959"><a href="#L-4959"><span class="linenos">4959</span></a> <span class="k">if</span> <span class="n">fallback_to_identifier</span><span class="p">:</span>
</span><span id="L-4960"><a href="#L-4960"><span class="linenos">4960</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-4961"><a href="#L-4961"><span class="linenos">4961</span></a>
</span><span id="L-4962"><a href="#L-4962"><span class="linenos">4962</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-4963"><a href="#L-4963"><span class="linenos">4963</span></a> <span class="k">return</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-4964"><a href="#L-4964"><span class="linenos">4964</span></a>
</span><span id="L-4965"><a href="#L-4965"><span class="linenos">4965</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_type_size</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">]:</span>
</span><span id="L-4966"><a href="#L-4966"><span class="linenos">4966</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="L-4967"><a href="#L-4967"><span class="linenos">4967</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="L-4968"><a href="#L-4968"><span class="linenos">4968</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4969"><a href="#L-4969"><span class="linenos">4969</span></a>
</span><span id="L-4970"><a href="#L-4970"><span class="linenos">4970</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
</span><span id="L-4971"><a href="#L-4971"><span class="linenos">4971</span></a> <span class="n">this</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">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-4972"><a href="#L-4972"><span class="linenos">4972</span></a>
</span><span id="L-4973"><a href="#L-4973"><span class="linenos">4973</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-4974"><a href="#L-4974"><span class="linenos">4974</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</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="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-4975"><a href="#L-4975"><span class="linenos">4975</span></a> <span class="p">)</span>
</span><span id="L-4976"><a href="#L-4976"><span class="linenos">4976</span></a>
</span><span id="L-4977"><a href="#L-4977"><span class="linenos">4977</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_types</span><span class="p">(</span>
</span><span id="L-4978"><a href="#L-4978"><span class="linenos">4978</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</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="n">schema</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="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-4979"><a href="#L-4979"><span class="linenos">4979</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-4980"><a href="#L-4980"><span class="linenos">4980</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-4981"><a href="#L-4981"><span class="linenos">4981</span></a>
</span><span id="L-4982"><a href="#L-4982"><span class="linenos">4982</span></a> <span class="n">this</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 class="o">=</span> <span class="kc">None</span>
</span><span id="L-4983"><a href="#L-4983"><span class="linenos">4983</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SYSUDTLIB&quot;</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">)</span>
</span><span id="L-4984"><a href="#L-4984"><span class="linenos">4984</span></a>
</span><span id="L-4985"><a href="#L-4985"><span class="linenos">4985</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">):</span>
</span><span id="L-4986"><a href="#L-4986"><span class="linenos">4986</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">allow_identifiers</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
</span><span id="L-4987"><a href="#L-4987"><span class="linenos">4987</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
</span><span id="L-4988"><a href="#L-4988"><span class="linenos">4988</span></a> <span class="p">)</span>
</span><span id="L-4989"><a href="#L-4989"><span class="linenos">4989</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">identifier</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-4990"><a href="#L-4990"><span class="linenos">4990</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">identifier</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="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">))</span>
</span><span id="L-4991"><a href="#L-4991"><span class="linenos">4991</span></a>
</span><span id="L-4992"><a href="#L-4992"><span class="linenos">4992</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-4993"><a href="#L-4993"><span class="linenos">4993</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected identifier&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-4994"><a href="#L-4994"><span class="linenos">4994</span></a>
</span><span id="L-4995"><a href="#L-4995"><span class="linenos">4995</span></a> <span class="k">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">:</span>
</span><span id="L-4996"><a href="#L-4996"><span class="linenos">4996</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-4997"><a href="#L-4997"><span class="linenos">4997</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span><span class="p">:</span>
</span><span id="L-4998"><a href="#L-4998"><span class="linenos">4998</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
</span><span id="L-4999"><a href="#L-4999"><span class="linenos">4999</span></a>
</span><span id="L-5000"><a href="#L-5000"><span class="linenos">5000</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
</span><span id="L-5001"><a href="#L-5001"><span class="linenos">5001</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_name</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">_advance_any</span><span class="p">()</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-5002"><a href="#L-5002"><span class="linenos">5002</span></a>
</span><span id="L-5003"><a href="#L-5003"><span class="linenos">5003</span></a> <span class="n">this</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">build</span><span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-5004"><a href="#L-5004"><span class="linenos">5004</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5005"><a href="#L-5005"><span class="linenos">5005</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-5006"><a href="#L-5006"><span class="linenos">5006</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5007"><a href="#L-5007"><span class="linenos">5007</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5008"><a href="#L-5008"><span class="linenos">5008</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5009"><a href="#L-5009"><span class="linenos">5009</span></a>
</span><span id="L-5010"><a href="#L-5010"><span class="linenos">5010</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="L-5011"><a href="#L-5011"><span class="linenos">5011</span></a>
</span><span id="L-5012"><a href="#L-5012"><span class="linenos">5012</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">:</span>
</span><span id="L-5013"><a href="#L-5013"><span class="linenos">5013</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PseudoType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-5014"><a href="#L-5014"><span class="linenos">5014</span></a>
</span><span id="L-5015"><a href="#L-5015"><span class="linenos">5015</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">:</span>
</span><span id="L-5016"><a href="#L-5016"><span class="linenos">5016</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ObjectIdentifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-5017"><a href="#L-5017"><span class="linenos">5017</span></a>
</span><span id="L-5018"><a href="#L-5018"><span class="linenos">5018</span></a> <span class="c1"># https://materialize.com/docs/sql/types/map/</span>
</span><span id="L-5019"><a href="#L-5019"><span class="linenos">5019</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">):</span>
</span><span id="L-5020"><a href="#L-5020"><span class="linenos">5020</span></a> <span class="n">key_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
</span><span id="L-5021"><a href="#L-5021"><span class="linenos">5021</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
</span><span id="L-5022"><a href="#L-5022"><span class="linenos">5022</span></a> <span class="p">)</span>
</span><span id="L-5023"><a href="#L-5023"><span class="linenos">5023</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">):</span>
</span><span id="L-5024"><a href="#L-5024"><span class="linenos">5024</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-5025"><a href="#L-5025"><span class="linenos">5025</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5026"><a href="#L-5026"><span class="linenos">5026</span></a>
</span><span id="L-5027"><a href="#L-5027"><span class="linenos">5027</span></a> <span class="n">value_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
</span><span id="L-5028"><a href="#L-5028"><span class="linenos">5028</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
</span><span id="L-5029"><a href="#L-5029"><span class="linenos">5029</span></a> <span class="p">)</span>
</span><span id="L-5030"><a href="#L-5030"><span class="linenos">5030</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">):</span>
</span><span id="L-5031"><a href="#L-5031"><span class="linenos">5031</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-5032"><a href="#L-5032"><span class="linenos">5032</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5033"><a href="#L-5033"><span class="linenos">5033</span></a>
</span><span id="L-5034"><a href="#L-5034"><span class="linenos">5034</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
</span><span id="L-5035"><a href="#L-5035"><span class="linenos">5035</span></a> <span class="n">this</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">MAP</span><span class="p">,</span>
</span><span id="L-5036"><a href="#L-5036"><span class="linenos">5036</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">key_type</span><span class="p">,</span> <span class="n">value_type</span><span class="p">],</span>
</span><span id="L-5037"><a href="#L-5037"><span class="linenos">5037</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="L-5038"><a href="#L-5038"><span class="linenos">5038</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
</span><span id="L-5039"><a href="#L-5039"><span class="linenos">5039</span></a> <span class="p">)</span>
</span><span id="L-5040"><a href="#L-5040"><span class="linenos">5040</span></a>
</span><span id="L-5041"><a href="#L-5041"><span class="linenos">5041</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPE_TOKENS</span>
</span><span id="L-5042"><a href="#L-5042"><span class="linenos">5042</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_TYPE_TOKENS</span>
</span><span id="L-5043"><a href="#L-5043"><span class="linenos">5043</span></a> <span class="n">is_aggregate</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_TYPE_TOKENS</span>
</span><span id="L-5044"><a href="#L-5044"><span class="linenos">5044</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5045"><a href="#L-5045"><span class="linenos">5045</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-5046"><a href="#L-5046"><span class="linenos">5046</span></a>
</span><span id="L-5047"><a href="#L-5047"><span class="linenos">5047</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-5048"><a href="#L-5048"><span class="linenos">5048</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
</span><span id="L-5049"><a href="#L-5049"><span class="linenos">5049</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">(</span><span class="n">type_required</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="L-5050"><a href="#L-5050"><span class="linenos">5050</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
</span><span id="L-5051"><a href="#L-5051"><span class="linenos">5051</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="L-5052"><a href="#L-5052"><span class="linenos">5052</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
</span><span id="L-5053"><a href="#L-5053"><span class="linenos">5053</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
</span><span id="L-5054"><a href="#L-5054"><span class="linenos">5054</span></a> <span class="p">)</span>
</span><span id="L-5055"><a href="#L-5055"><span class="linenos">5055</span></a> <span class="p">)</span>
</span><span id="L-5056"><a href="#L-5056"><span class="linenos">5056</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLABLE</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-5057"><a href="#L-5057"><span class="linenos">5057</span></a> <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-5058"><a href="#L-5058"><span class="linenos">5058</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;nullable&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
</span><span id="L-5059"><a href="#L-5059"><span class="linenos">5059</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-5060"><a href="#L-5060"><span class="linenos">5060</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-5061"><a href="#L-5061"><span class="linenos">5061</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
</span><span id="L-5062"><a href="#L-5062"><span class="linenos">5062</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
</span><span id="L-5063"><a href="#L-5063"><span class="linenos">5063</span></a> <span class="k">elif</span> <span class="n">is_aggregate</span><span class="p">:</span>
</span><span id="L-5064"><a href="#L-5064"><span class="linenos">5064</span></a> <span class="n">func_or_ident</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
</span><span id="L-5065"><a href="#L-5065"><span class="linenos">5065</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">)</span>
</span><span id="L-5066"><a href="#L-5066"><span class="linenos">5066</span></a> <span class="p">)</span>
</span><span id="L-5067"><a href="#L-5067"><span class="linenos">5067</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">func_or_ident</span><span class="p">:</span>
</span><span id="L-5068"><a href="#L-5068"><span class="linenos">5068</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5069"><a href="#L-5069"><span class="linenos">5069</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">func_or_ident</span><span class="p">]</span>
</span><span id="L-5070"><a href="#L-5070"><span class="linenos">5070</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="L-5071"><a href="#L-5071"><span class="linenos">5071</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
</span><span id="L-5072"><a href="#L-5072"><span class="linenos">5072</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="L-5073"><a href="#L-5073"><span class="linenos">5073</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
</span><span id="L-5074"><a href="#L-5074"><span class="linenos">5074</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span>
</span><span id="L-5075"><a href="#L-5075"><span class="linenos">5075</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
</span><span id="L-5076"><a href="#L-5076"><span class="linenos">5076</span></a> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span><span class="p">,</span>
</span><span id="L-5077"><a href="#L-5077"><span class="linenos">5077</span></a> <span class="p">)</span>
</span><span id="L-5078"><a href="#L-5078"><span class="linenos">5078</span></a> <span class="p">)</span>
</span><span id="L-5079"><a href="#L-5079"><span class="linenos">5079</span></a> <span class="p">)</span>
</span><span id="L-5080"><a href="#L-5080"><span class="linenos">5080</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5081"><a href="#L-5081"><span class="linenos">5081</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type_size</span><span class="p">)</span>
</span><span id="L-5082"><a href="#L-5082"><span class="linenos">5082</span></a>
</span><span id="L-5083"><a href="#L-5083"><span class="linenos">5083</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/data-types-vector</span>
</span><span id="L-5084"><a href="#L-5084"><span class="linenos">5084</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VECTOR</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
</span><span id="L-5085"><a href="#L-5085"><span class="linenos">5085</span></a> <span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="L-5086"><a href="#L-5086"><span class="linenos">5086</span></a>
</span><span id="L-5087"><a href="#L-5087"><span class="linenos">5087</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
</span><span id="L-5088"><a href="#L-5088"><span class="linenos">5088</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-5089"><a href="#L-5089"><span class="linenos">5089</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5090"><a href="#L-5090"><span class="linenos">5090</span></a>
</span><span id="L-5091"><a href="#L-5091"><span class="linenos">5091</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-5092"><a href="#L-5092"><span class="linenos">5092</span></a>
</span><span id="L-5093"><a href="#L-5093"><span class="linenos">5093</span></a> <span class="n">values</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">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="o">=</span> <span class="kc">None</span>
</span><span id="L-5094"><a href="#L-5094"><span class="linenos">5094</span></a>
</span><span id="L-5095"><a href="#L-5095"><span class="linenos">5095</span></a> <span class="k">if</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
</span><span id="L-5096"><a href="#L-5096"><span class="linenos">5096</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
</span><span id="L-5097"><a href="#L-5097"><span class="linenos">5097</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">(</span><span class="n">type_required</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="L-5098"><a href="#L-5098"><span class="linenos">5098</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5099"><a href="#L-5099"><span class="linenos">5099</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="L-5100"><a href="#L-5100"><span class="linenos">5100</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
</span><span id="L-5101"><a href="#L-5101"><span class="linenos">5101</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
</span><span id="L-5102"><a href="#L-5102"><span class="linenos">5102</span></a> <span class="p">)</span>
</span><span id="L-5103"><a href="#L-5103"><span class="linenos">5103</span></a> <span class="p">)</span>
</span><span id="L-5104"><a href="#L-5104"><span class="linenos">5104</span></a>
</span><span id="L-5105"><a href="#L-5105"><span class="linenos">5105</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
</span><span id="L-5106"><a href="#L-5106"><span class="linenos">5106</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting &gt;&quot;</span><span class="p">)</span>
</span><span id="L-5107"><a href="#L-5107"><span class="linenos">5107</span></a>
</span><span id="L-5108"><a href="#L-5108"><span class="linenos">5108</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)):</span>
</span><span id="L-5109"><a href="#L-5109"><span class="linenos">5109</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span>
</span><span id="L-5110"><a href="#L-5110"><span class="linenos">5110</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span> <span class="ow">and</span> <span class="n">is_struct</span><span class="p">:</span>
</span><span id="L-5111"><a href="#L-5111"><span class="linenos">5111</span></a> <span class="n">values</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5112"><a href="#L-5112"><span class="linenos">5112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-5113"><a href="#L-5113"><span class="linenos">5113</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5114"><a href="#L-5114"><span class="linenos">5114</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">))</span>
</span><span id="L-5115"><a href="#L-5115"><span class="linenos">5115</span></a>
</span><span id="L-5116"><a href="#L-5116"><span class="linenos">5116</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMESTAMPS</span><span class="p">:</span>
</span><span id="L-5117"><a href="#L-5117"><span class="linenos">5117</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
</span><span id="L-5118"><a href="#L-5118"><span class="linenos">5118</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-5119"><a href="#L-5119"><span class="linenos">5119</span></a> <span class="n">tz_type</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-5120"><a href="#L-5120"><span class="linenos">5120</span></a> <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">TIMETZ</span>
</span><span id="L-5121"><a href="#L-5121"><span class="linenos">5121</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMES</span>
</span><span id="L-5122"><a href="#L-5122"><span class="linenos">5122</span></a> <span class="k">else</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">TIMESTAMPTZ</span>
</span><span id="L-5123"><a href="#L-5123"><span class="linenos">5123</span></a> <span class="p">)</span>
</span><span id="L-5124"><a href="#L-5124"><span class="linenos">5124</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">tz_type</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-5125"><a href="#L-5125"><span class="linenos">5125</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
</span><span id="L-5126"><a href="#L-5126"><span class="linenos">5126</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-5127"><a href="#L-5127"><span class="linenos">5127</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-5128"><a href="#L-5128"><span class="linenos">5128</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
</span><span id="L-5129"><a href="#L-5129"><span class="linenos">5129</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-5130"><a href="#L-5130"><span class="linenos">5130</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
</span><span id="L-5131"><a href="#L-5131"><span class="linenos">5131</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-5132"><a href="#L-5132"><span class="linenos">5132</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
</span><span id="L-5133"><a href="#L-5133"><span class="linenos">5133</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
</span><span id="L-5134"><a href="#L-5134"><span class="linenos">5134</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntervalSpan</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="L-5135"><a href="#L-5135"><span class="linenos">5135</span></a>
</span><span id="L-5136"><a href="#L-5136"><span class="linenos">5136</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</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-5137"><a href="#L-5137"><span class="linenos">5137</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5138"><a href="#L-5138"><span class="linenos">5138</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span>
</span><span id="L-5139"><a href="#L-5139"><span class="linenos">5139</span></a>
</span><span id="L-5140"><a href="#L-5140"><span class="linenos">5140</span></a> <span class="k">if</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
</span><span id="L-5141"><a href="#L-5141"><span class="linenos">5141</span></a> <span class="n">index2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-5142"><a href="#L-5142"><span class="linenos">5142</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-5143"><a href="#L-5143"><span class="linenos">5143</span></a>
</span><span id="L-5144"><a href="#L-5144"><span class="linenos">5144</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">peek</span><span class="p">:</span>
</span><span id="L-5145"><a href="#L-5145"><span class="linenos">5145</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-5146"><a href="#L-5146"><span class="linenos">5146</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5147"><a href="#L-5147"><span class="linenos">5147</span></a>
</span><span id="L-5148"><a href="#L-5148"><span class="linenos">5148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index2</span><span class="p">)</span>
</span><span id="L-5149"><a href="#L-5149"><span class="linenos">5149</span></a>
</span><span id="L-5150"><a href="#L-5150"><span class="linenos">5150</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="L-5151"><a href="#L-5151"><span class="linenos">5151</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNSIGNED&quot;</span><span class="p">):</span>
</span><span id="L-5152"><a href="#L-5152"><span class="linenos">5152</span></a> <span class="n">unsigned_type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SIGNED_TO_UNSIGNED_TYPE_TOKEN</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_token</span><span class="p">)</span>
</span><span id="L-5153"><a href="#L-5153"><span class="linenos">5153</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unsigned_type_token</span><span class="p">:</span>
</span><span id="L-5154"><a href="#L-5154"><span class="linenos">5154</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot convert </span><span class="si">{</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2"> to unsigned.&quot;</span><span class="p">)</span>
</span><span id="L-5155"><a href="#L-5155"><span class="linenos">5155</span></a>
</span><span id="L-5156"><a href="#L-5156"><span class="linenos">5156</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="n">unsigned_type_token</span> <span class="ow">or</span> <span class="n">type_token</span>
</span><span id="L-5157"><a href="#L-5157"><span class="linenos">5157</span></a>
</span><span id="L-5158"><a href="#L-5158"><span class="linenos">5158</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
</span><span id="L-5159"><a href="#L-5159"><span class="linenos">5159</span></a> <span class="n">this</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="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
</span><span id="L-5160"><a href="#L-5160"><span class="linenos">5160</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-5161"><a href="#L-5161"><span class="linenos">5161</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
</span><span id="L-5162"><a href="#L-5162"><span class="linenos">5162</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
</span><span id="L-5163"><a href="#L-5163"><span class="linenos">5163</span></a> <span class="p">)</span>
</span><span id="L-5164"><a href="#L-5164"><span class="linenos">5164</span></a>
</span><span id="L-5165"><a href="#L-5165"><span class="linenos">5165</span></a> <span class="c1"># Empty arrays/structs are allowed</span>
</span><span id="L-5166"><a href="#L-5166"><span class="linenos">5166</span></a> <span class="k">if</span> <span class="n">values</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-5167"><a href="#L-5167"><span class="linenos">5167</span></a> <span class="bp">cls</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span> <span class="k">if</span> <span class="n">is_struct</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span>
</span><span id="L-5168"><a href="#L-5168"><span class="linenos">5168</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="bp">cls</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">values</span><span class="p">),</span> <span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-5169"><a href="#L-5169"><span class="linenos">5169</span></a>
</span><span id="L-5170"><a href="#L-5170"><span class="linenos">5170</span></a> <span class="k">elif</span> <span class="n">expressions</span><span class="p">:</span>
</span><span id="L-5171"><a href="#L-5171"><span class="linenos">5171</span></a> <span class="n">this</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="n">expressions</span><span class="p">)</span>
</span><span id="L-5172"><a href="#L-5172"><span class="linenos">5172</span></a>
</span><span id="L-5173"><a href="#L-5173"><span class="linenos">5173</span></a> <span class="c1"># https://materialize.com/docs/sql/types/list/#type-name</span>
</span><span id="L-5174"><a href="#L-5174"><span class="linenos">5174</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LIST</span><span class="p">):</span>
</span><span id="L-5175"><a href="#L-5175"><span class="linenos">5175</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LIST</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-5176"><a href="#L-5176"><span class="linenos">5176</span></a>
</span><span id="L-5177"><a href="#L-5177"><span class="linenos">5177</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-5178"><a href="#L-5178"><span class="linenos">5178</span></a>
</span><span id="L-5179"><a href="#L-5179"><span class="linenos">5179</span></a> <span class="c1"># Postgres supports the INT ARRAY[3] syntax as a synonym for INT[3]</span>
</span><span id="L-5180"><a href="#L-5180"><span class="linenos">5180</span></a> <span class="n">matched_array</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">)</span>
</span><span id="L-5181"><a href="#L-5181"><span class="linenos">5181</span></a>
</span><span id="L-5182"><a href="#L-5182"><span class="linenos">5182</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-5183"><a href="#L-5183"><span class="linenos">5183</span></a> <span class="n">datatype_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="L-5184"><a href="#L-5184"><span class="linenos">5184</span></a> <span class="n">matched_l_bracket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)</span>
</span><span id="L-5185"><a href="#L-5185"><span class="linenos">5185</span></a>
</span><span id="L-5186"><a href="#L-5186"><span class="linenos">5186</span></a> <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">matched_l_bracket</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">matched_array</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
</span><span id="L-5187"><a href="#L-5187"><span class="linenos">5187</span></a> <span class="n">datatype_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">)</span>
</span><span id="L-5188"><a href="#L-5188"><span class="linenos">5188</span></a> <span class="p">):</span>
</span><span id="L-5189"><a href="#L-5189"><span class="linenos">5189</span></a> <span class="c1"># Postgres allows casting empty arrays such as ARRAY[]::INT[],</span>
</span><span id="L-5190"><a href="#L-5190"><span class="linenos">5190</span></a> <span class="c1"># not to be confused with the fixed size array parsing</span>
</span><span id="L-5191"><a href="#L-5191"><span class="linenos">5191</span></a> <span class="k">break</span>
</span><span id="L-5192"><a href="#L-5192"><span class="linenos">5192</span></a>
</span><span id="L-5193"><a href="#L-5193"><span class="linenos">5193</span></a> <span class="n">matched_array</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-5194"><a href="#L-5194"><span class="linenos">5194</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="L-5195"><a href="#L-5195"><span class="linenos">5195</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="L-5196"><a href="#L-5196"><span class="linenos">5196</span></a> <span class="n">values</span>
</span><span id="L-5197"><a href="#L-5197"><span class="linenos">5197</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">schema</span>
</span><span id="L-5198"><a href="#L-5198"><span class="linenos">5198</span></a> <span class="ow">and</span> <span class="p">(</span>
</span><span id="L-5199"><a href="#L-5199"><span class="linenos">5199</span></a> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_FIXED_SIZE_ARRAYS</span> <span class="ow">or</span> <span class="n">datatype_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span>
</span><span id="L-5200"><a href="#L-5200"><span class="linenos">5200</span></a> <span class="p">)</span>
</span><span id="L-5201"><a href="#L-5201"><span class="linenos">5201</span></a> <span class="p">):</span>
</span><span id="L-5202"><a href="#L-5202"><span class="linenos">5202</span></a> <span class="c1"># Retreating here means that we should not parse the following values as part of the data type, e.g. in DuckDB</span>
</span><span id="L-5203"><a href="#L-5203"><span class="linenos">5203</span></a> <span class="c1"># ARRAY[1] should retreat and instead be parsed into exp.Array in contrast to INT[x][y] which denotes a fixed-size array data type</span>
</span><span id="L-5204"><a href="#L-5204"><span class="linenos">5204</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-5205"><a href="#L-5205"><span class="linenos">5205</span></a> <span class="k">break</span>
</span><span id="L-5206"><a href="#L-5206"><span class="linenos">5206</span></a>
</span><span id="L-5207"><a href="#L-5207"><span class="linenos">5207</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
</span><span id="L-5208"><a href="#L-5208"><span class="linenos">5208</span></a> <span class="n">this</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">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span>
</span><span id="L-5209"><a href="#L-5209"><span class="linenos">5209</span></a> <span class="p">)</span>
</span><span id="L-5210"><a href="#L-5210"><span class="linenos">5210</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">)</span>
</span><span id="L-5211"><a href="#L-5211"><span class="linenos">5211</span></a>
</span><span id="L-5212"><a href="#L-5212"><span class="linenos">5212</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_CONVERTERS</span> <span class="ow">and</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">):</span>
</span><span id="L-5213"><a href="#L-5213"><span class="linenos">5213</span></a> <span class="n">converter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_CONVERTERS</span><span class="o">.</span><span class="n">get</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-5214"><a href="#L-5214"><span class="linenos">5214</span></a> <span class="k">if</span> <span class="n">converter</span><span class="p">:</span>
</span><span id="L-5215"><a href="#L-5215"><span class="linenos">5215</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">converter</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="p">))</span>
</span><span id="L-5216"><a href="#L-5216"><span class="linenos">5216</span></a>
</span><span id="L-5217"><a href="#L-5217"><span class="linenos">5217</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-5218"><a href="#L-5218"><span class="linenos">5218</span></a>
</span><span id="L-5219"><a href="#L-5219"><span class="linenos">5219</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_required</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">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-5220"><a href="#L-5220"><span class="linenos">5220</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-5221"><a href="#L-5221"><span class="linenos">5221</span></a>
</span><span id="L-5222"><a href="#L-5222"><span class="linenos">5222</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="L-5223"><a href="#L-5223"><span class="linenos">5223</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="L-5224"><a href="#L-5224"><span class="linenos">5224</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
</span><span id="L-5225"><a href="#L-5225"><span class="linenos">5225</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span>
</span><span id="L-5226"><a href="#L-5226"><span class="linenos">5226</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span>
</span><span id="L-5227"><a href="#L-5227"><span class="linenos">5227</span></a> <span class="p">):</span>
</span><span id="L-5228"><a href="#L-5228"><span class="linenos">5228</span></a> <span class="c1"># Takes care of special cases like `STRUCT&lt;list ARRAY&lt;...&gt;&gt;` where the identifier is also a</span>
</span><span id="L-5229"><a href="#L-5229"><span class="linenos">5229</span></a> <span class="c1"># type token. Without this, the list will be parsed as a type and we&#39;ll eventually crash</span>
</span><span id="L-5230"><a href="#L-5230"><span class="linenos">5230</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-5231"><a href="#L-5231"><span class="linenos">5231</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5232"><a href="#L-5232"><span class="linenos">5232</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-5233"><a href="#L-5233"><span class="linenos">5233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">(</span><span class="n">parse_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">fallback_to_identifier</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-5234"><a href="#L-5234"><span class="linenos">5234</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-5235"><a href="#L-5235"><span class="linenos">5235</span></a> <span class="p">)</span>
</span><span id="L-5236"><a href="#L-5236"><span class="linenos">5236</span></a>
</span><span id="L-5237"><a href="#L-5237"><span class="linenos">5237</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span>
</span><span id="L-5238"><a href="#L-5238"><span class="linenos">5238</span></a>
</span><span id="L-5239"><a href="#L-5239"><span class="linenos">5239</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="L-5240"><a href="#L-5240"><span class="linenos">5240</span></a> <span class="n">type_required</span>
</span><span id="L-5241"><a href="#L-5241"><span class="linenos">5241</span></a> <span class="ow">and</span> <span class="ow">not</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">DataType</span><span class="p">)</span>
</span><span id="L-5242"><a href="#L-5242"><span class="linenos">5242</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-5243"><a href="#L-5243"><span class="linenos">5243</span></a> <span class="p">):</span>
</span><span id="L-5244"><a href="#L-5244"><span class="linenos">5244</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-5245"><a href="#L-5245"><span class="linenos">5245</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="L-5246"><a href="#L-5246"><span class="linenos">5246</span></a>
</span><span id="L-5247"><a href="#L-5247"><span class="linenos">5247</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-5248"><a href="#L-5248"><span class="linenos">5248</span></a>
</span><span id="L-5249"><a href="#L-5249"><span class="linenos">5249</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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-5250"><a href="#L-5250"><span class="linenos">5250</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
</span><span id="L-5251"><a href="#L-5251"><span class="linenos">5251</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-5252"><a href="#L-5252"><span class="linenos">5252</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</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">zone</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">())</span>
</span><span id="L-5253"><a href="#L-5253"><span class="linenos">5253</span></a>
</span><span id="L-5254"><a href="#L-5254"><span class="linenos">5254</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5255"><a href="#L-5255"><span class="linenos">5255</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">()</span>
</span><span id="L-5256"><a href="#L-5256"><span class="linenos">5256</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-5257"><a href="#L-5257"><span class="linenos">5257</span></a>
</span><span id="L-5258"><a href="#L-5258"><span class="linenos">5258</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_COLUMN_JOIN_MARKS</span> <span class="ow">and</span> <span class="n">column</span><span class="p">:</span>
</span><span id="L-5259"><a href="#L-5259"><span class="linenos">5259</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
</span><span id="L-5260"><a href="#L-5260"><span class="linenos">5260</span></a>
</span><span id="L-5261"><a href="#L-5261"><span class="linenos">5261</span></a> <span class="k">return</span> <span class="n">column</span>
</span><span id="L-5262"><a href="#L-5262"><span class="linenos">5262</span></a>
</span><span id="L-5263"><a href="#L-5263"><span class="linenos">5263</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_column_reference</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5264"><a href="#L-5264"><span class="linenos">5264</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
</span><span id="L-5265"><a href="#L-5265"><span class="linenos">5265</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="L-5266"><a href="#L-5266"><span class="linenos">5266</span></a> <span class="ow">not</span> <span class="n">this</span>
</span><span id="L-5267"><a href="#L-5267"><span class="linenos">5267</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-5268"><a href="#L-5268"><span class="linenos">5268</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_FOLLOWED_BY_PAREN</span>
</span><span id="L-5269"><a href="#L-5269"><span class="linenos">5269</span></a> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="L-5270"><a href="#L-5270"><span class="linenos">5270</span></a> <span class="p">):</span>
</span><span id="L-5271"><a href="#L-5271"><span class="linenos">5271</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-5272"><a href="#L-5272"><span class="linenos">5272</span></a>
</span><span id="L-5273"><a href="#L-5273"><span class="linenos">5273</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">Identifier</span><span class="p">):</span>
</span><span id="L-5274"><a href="#L-5274"><span class="linenos">5274</span></a> <span class="c1"># We bubble up comments from the Identifier to the Column</span>
</span><span id="L-5275"><a href="#L-5275"><span class="linenos">5275</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">pop_comments</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-5276"><a href="#L-5276"><span class="linenos">5276</span></a>
</span><span id="L-5277"><a href="#L-5277"><span class="linenos">5277</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-5278"><a href="#L-5278"><span class="linenos">5278</span></a>
</span><span id="L-5279"><a href="#L-5279"><span class="linenos">5279</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_colon_as_variant_extract</span><span class="p">(</span>
</span><span id="L-5280"><a href="#L-5280"><span class="linenos">5280</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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-5281"><a href="#L-5281"><span class="linenos">5281</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-5282"><a href="#L-5282"><span class="linenos">5282</span></a> <span class="n">casts</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-5283"><a href="#L-5283"><span class="linenos">5283</span></a> <span class="n">json_path</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-5284"><a href="#L-5284"><span class="linenos">5284</span></a> <span class="n">escape</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5285"><a href="#L-5285"><span class="linenos">5285</span></a>
</span><span id="L-5286"><a href="#L-5286"><span class="linenos">5286</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">):</span>
</span><span id="L-5287"><a href="#L-5287"><span class="linenos">5287</span></a> <span class="n">start_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-5288"><a href="#L-5288"><span class="linenos">5288</span></a>
</span><span id="L-5289"><a href="#L-5289"><span class="linenos">5289</span></a> <span class="c1"># Snowflake allows reserved keywords as json keys but advance_any() excludes TokenType.SELECT from any_tokens=True</span>
</span><span id="L-5290"><a href="#L-5290"><span class="linenos">5290</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span>
</span><span id="L-5291"><a href="#L-5291"><span class="linenos">5291</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,))</span>
</span><span id="L-5292"><a href="#L-5292"><span class="linenos">5292</span></a> <span class="p">)</span>
</span><span id="L-5293"><a href="#L-5293"><span class="linenos">5293</span></a>
</span><span id="L-5294"><a href="#L-5294"><span class="linenos">5294</span></a> <span class="c1"># The cast :: operator has a lower precedence than the extraction operator :, so</span>
</span><span id="L-5295"><a href="#L-5295"><span class="linenos">5295</span></a> <span class="c1"># we rearrange the AST appropriately to avoid casting the JSON path</span>
</span><span id="L-5296"><a href="#L-5296"><span class="linenos">5296</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
</span><span id="L-5297"><a href="#L-5297"><span class="linenos">5297</span></a> <span class="n">casts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">to</span><span class="p">)</span>
</span><span id="L-5298"><a href="#L-5298"><span class="linenos">5298</span></a> <span class="n">path</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-5299"><a href="#L-5299"><span class="linenos">5299</span></a>
</span><span id="L-5300"><a href="#L-5300"><span class="linenos">5300</span></a> <span class="k">if</span> <span class="n">casts</span><span class="p">:</span>
</span><span id="L-5301"><a href="#L-5301"><span class="linenos">5301</span></a> <span class="n">dcolon_offset</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span>
</span><span id="L-5302"><a href="#L-5302"><span class="linenos">5302</span></a> <span class="n">i</span>
</span><span id="L-5303"><a href="#L-5303"><span class="linenos">5303</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="n">start_index</span><span class="p">:])</span>
</span><span id="L-5304"><a href="#L-5304"><span class="linenos">5304</span></a> <span class="k">if</span> <span class="n">t</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span>
</span><span id="L-5305"><a href="#L-5305"><span class="linenos">5305</span></a> <span class="p">)</span>
</span><span id="L-5306"><a href="#L-5306"><span class="linenos">5306</span></a> <span class="n">end_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="n">start_index</span> <span class="o">+</span> <span class="n">dcolon_offset</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
</span><span id="L-5307"><a href="#L-5307"><span class="linenos">5307</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5308"><a href="#L-5308"><span class="linenos">5308</span></a> <span class="n">end_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-5309"><a href="#L-5309"><span class="linenos">5309</span></a>
</span><span id="L-5310"><a href="#L-5310"><span class="linenos">5310</span></a> <span class="k">if</span> <span class="n">path</span><span class="p">:</span>
</span><span id="L-5311"><a href="#L-5311"><span class="linenos">5311</span></a> <span class="c1"># Escape single quotes from Snowflake&#39;s colon extraction (e.g. col:&quot;a&#39;b&quot;) as</span>
</span><span id="L-5312"><a href="#L-5312"><span class="linenos">5312</span></a> <span class="c1"># it&#39;ll roundtrip to a string literal in GET_PATH</span>
</span><span id="L-5313"><a href="#L-5313"><span class="linenos">5313</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</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="ow">and</span> <span class="n">path</span><span class="o">.</span><span class="n">quoted</span><span class="p">:</span>
</span><span id="L-5314"><a href="#L-5314"><span class="linenos">5314</span></a> <span class="n">escape</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-5315"><a href="#L-5315"><span class="linenos">5315</span></a>
</span><span id="L-5316"><a href="#L-5316"><span class="linenos">5316</span></a> <span class="n">json_path</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">_find_sql</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="n">start_index</span><span class="p">],</span> <span class="n">end_token</span><span class="p">))</span>
</span><span id="L-5317"><a href="#L-5317"><span class="linenos">5317</span></a>
</span><span id="L-5318"><a href="#L-5318"><span class="linenos">5318</span></a> <span class="c1"># The VARIANT extract in Snowflake/Databricks is parsed as a JSONExtract; Snowflake uses the json_path in GET_PATH() while</span>
</span><span id="L-5319"><a href="#L-5319"><span class="linenos">5319</span></a> <span class="c1"># Databricks transforms it back to the colon/dot notation</span>
</span><span id="L-5320"><a href="#L-5320"><span class="linenos">5320</span></a> <span class="k">if</span> <span class="n">json_path</span><span class="p">:</span>
</span><span id="L-5321"><a href="#L-5321"><span class="linenos">5321</span></a> <span class="n">json_path_expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">to_json_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">json_path</span><span class="p">)))</span>
</span><span id="L-5322"><a href="#L-5322"><span class="linenos">5322</span></a>
</span><span id="L-5323"><a href="#L-5323"><span class="linenos">5323</span></a> <span class="k">if</span> <span class="n">json_path_expr</span><span class="p">:</span>
</span><span id="L-5324"><a href="#L-5324"><span class="linenos">5324</span></a> <span class="n">json_path_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;escape&quot;</span><span class="p">,</span> <span class="n">escape</span><span class="p">)</span>
</span><span id="L-5325"><a href="#L-5325"><span class="linenos">5325</span></a>
</span><span id="L-5326"><a href="#L-5326"><span class="linenos">5326</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-5327"><a href="#L-5327"><span class="linenos">5327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
</span><span id="L-5328"><a href="#L-5328"><span class="linenos">5328</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-5329"><a href="#L-5329"><span class="linenos">5329</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">json_path_expr</span><span class="p">,</span>
</span><span id="L-5330"><a href="#L-5330"><span class="linenos">5330</span></a> <span class="n">variant_extract</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="L-5331"><a href="#L-5331"><span class="linenos">5331</span></a> <span class="p">)</span>
</span><span id="L-5332"><a href="#L-5332"><span class="linenos">5332</span></a>
</span><span id="L-5333"><a href="#L-5333"><span class="linenos">5333</span></a> <span class="k">while</span> <span class="n">casts</span><span class="p">:</span>
</span><span id="L-5334"><a href="#L-5334"><span class="linenos">5334</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</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">to</span><span class="o">=</span><span class="n">casts</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
</span><span id="L-5335"><a href="#L-5335"><span class="linenos">5335</span></a>
</span><span id="L-5336"><a href="#L-5336"><span class="linenos">5336</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-5337"><a href="#L-5337"><span class="linenos">5337</span></a>
</span><span id="L-5338"><a href="#L-5338"><span class="linenos">5338</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_dcolon</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5339"><a href="#L-5339"><span class="linenos">5339</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="L-5340"><a href="#L-5340"><span class="linenos">5340</span></a>
</span><span id="L-5341"><a href="#L-5341"><span class="linenos">5341</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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-5342"><a href="#L-5342"><span class="linenos">5342</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-5343"><a href="#L-5343"><span class="linenos">5343</span></a>
</span><span id="L-5344"><a href="#L-5344"><span class="linenos">5344</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="p">):</span>
</span><span id="L-5345"><a href="#L-5345"><span class="linenos">5345</span></a> <span class="n">op_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="L-5346"><a href="#L-5346"><span class="linenos">5346</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">op_token</span><span class="p">)</span>
</span><span id="L-5347"><a href="#L-5347"><span class="linenos">5347</span></a>
</span><span id="L-5348"><a href="#L-5348"><span class="linenos">5348</span></a> <span class="k">if</span> <span class="n">op_token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOTCOLON</span><span class="p">):</span>
</span><span id="L-5349"><a href="#L-5349"><span class="linenos">5349</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dcolon</span><span class="p">()</span>
</span><span id="L-5350"><a href="#L-5350"><span class="linenos">5350</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">field</span><span class="p">:</span>
</span><span id="L-5351"><a href="#L-5351"><span class="linenos">5351</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected type&quot;</span><span class="p">)</span>
</span><span id="L-5352"><a href="#L-5352"><span class="linenos">5352</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-5353"><a href="#L-5353"><span class="linenos">5353</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">()</span>
</span><span id="L-5354"><a href="#L-5354"><span class="linenos">5354</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-5355"><a href="#L-5355"><span class="linenos">5355</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
</span><span id="L-5356"><a href="#L-5356"><span class="linenos">5356</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5357"><a href="#L-5357"><span class="linenos">5357</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-5358"><a href="#L-5358"><span class="linenos">5358</span></a>
</span><span id="L-5359"><a href="#L-5359"><span class="linenos">5359</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</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="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">))</span> <span class="ow">and</span> <span class="n">this</span><span class="p">:</span>
</span><span id="L-5360"><a href="#L-5360"><span class="linenos">5360</span></a> <span class="c1"># BQ &amp; snowflake allow function calls like x.y.count(...), SAFE.SUBSTR(...) etc</span>
</span><span id="L-5361"><a href="#L-5361"><span class="linenos">5361</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
</span><span id="L-5362"><a href="#L-5362"><span class="linenos">5362</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">replace_tree</span><span class="p">(</span>
</span><span id="L-5363"><a href="#L-5363"><span class="linenos">5363</span></a> <span class="n">this</span><span class="p">,</span>
</span><span id="L-5364"><a href="#L-5364"><span class="linenos">5364</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="p">(</span>
</span><span id="L-5365"><a href="#L-5365"><span class="linenos">5365</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">n</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;table&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-5366"><a href="#L-5366"><span class="linenos">5366</span></a> <span class="k">if</span> <span class="n">n</span><span class="o">.</span><span class="n">table</span>
</span><span id="L-5367"><a href="#L-5367"><span class="linenos">5367</span></a> <span class="k">else</span> <span class="n">n</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-5368"><a href="#L-5368"><span class="linenos">5368</span></a> <span class="p">)</span>
</span><span id="L-5369"><a href="#L-5369"><span class="linenos">5369</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span>
</span><span id="L-5370"><a href="#L-5370"><span class="linenos">5370</span></a> <span class="k">else</span> <span class="n">n</span><span class="p">,</span>
</span><span id="L-5371"><a href="#L-5371"><span class="linenos">5371</span></a> <span class="p">)</span>
</span><span id="L-5372"><a href="#L-5372"><span class="linenos">5372</span></a>
</span><span id="L-5373"><a href="#L-5373"><span class="linenos">5373</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
</span><span id="L-5374"><a href="#L-5374"><span class="linenos">5374</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span>
</span><span id="L-5375"><a href="#L-5375"><span class="linenos">5375</span></a> <span class="k">elif</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</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;catalog&quot;</span><span class="p">):</span>
</span><span id="L-5376"><a href="#L-5376"><span class="linenos">5376</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-5377"><a href="#L-5377"><span class="linenos">5377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
</span><span id="L-5378"><a href="#L-5378"><span class="linenos">5378</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">comments</span><span class="p">,</span>
</span><span id="L-5379"><a href="#L-5379"><span class="linenos">5379</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
</span><span id="L-5380"><a href="#L-5380"><span class="linenos">5380</span></a> <span class="n">table</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-5381"><a href="#L-5381"><span class="linenos">5381</span></a> <span class="n">db</span><span class="o">=</span><span class="n">this</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;table&quot;</span><span class="p">),</span>
</span><span id="L-5382"><a href="#L-5382"><span class="linenos">5382</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">this</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;db&quot;</span><span class="p">),</span>
</span><span id="L-5383"><a href="#L-5383"><span class="linenos">5383</span></a> <span class="p">)</span>
</span><span id="L-5384"><a href="#L-5384"><span class="linenos">5384</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">):</span>
</span><span id="L-5385"><a href="#L-5385"><span class="linenos">5385</span></a> <span class="c1"># Move the exp.Dot&#39;s to the window&#39;s function</span>
</span><span id="L-5386"><a href="#L-5386"><span class="linenos">5386</span></a> <span class="n">window_func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</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">field</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-5387"><a href="#L-5387"><span class="linenos">5387</span></a> <span class="n">field</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">window_func</span><span class="p">)</span>
</span><span id="L-5388"><a href="#L-5388"><span class="linenos">5388</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">field</span>
</span><span id="L-5389"><a href="#L-5389"><span class="linenos">5389</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5390"><a href="#L-5390"><span class="linenos">5390</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</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">field</span><span class="p">)</span>
</span><span id="L-5391"><a href="#L-5391"><span class="linenos">5391</span></a>
</span><span id="L-5392"><a href="#L-5392"><span class="linenos">5392</span></a> <span class="k">if</span> <span class="n">field</span> <span class="ow">and</span> <span class="n">field</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
</span><span id="L-5393"><a href="#L-5393"><span class="linenos">5393</span></a> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">pop_comments</span><span class="p">())</span>
</span><span id="L-5394"><a href="#L-5394"><span class="linenos">5394</span></a>
</span><span id="L-5395"><a href="#L-5395"><span class="linenos">5395</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-5396"><a href="#L-5396"><span class="linenos">5396</span></a>
</span><span id="L-5397"><a href="#L-5397"><span class="linenos">5397</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_colon_as_variant_extract</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLON_IS_VARIANT_EXTRACT</span> <span class="k">else</span> <span class="n">this</span>
</span><span id="L-5398"><a href="#L-5398"><span class="linenos">5398</span></a>
</span><span id="L-5399"><a href="#L-5399"><span class="linenos">5399</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_primary</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5400"><a href="#L-5400"><span class="linenos">5400</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">):</span>
</span><span id="L-5401"><a href="#L-5401"><span class="linenos">5401</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="L-5402"><a href="#L-5402"><span class="linenos">5402</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-5403"><a href="#L-5403"><span class="linenos">5403</span></a>
</span><span id="L-5404"><a href="#L-5404"><span class="linenos">5404</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span>
</span><span id="L-5405"><a href="#L-5405"><span class="linenos">5405</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">primary</span><span class="p">]</span>
</span><span id="L-5406"><a href="#L-5406"><span class="linenos">5406</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">):</span>
</span><span id="L-5407"><a href="#L-5407"><span class="linenos">5407</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</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="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
</span><span id="L-5408"><a href="#L-5408"><span class="linenos">5408</span></a>
</span><span id="L-5409"><a href="#L-5409"><span class="linenos">5409</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-5410"><a href="#L-5410"><span class="linenos">5410</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-5411"><a href="#L-5411"><span class="linenos">5411</span></a>
</span><span id="L-5412"><a href="#L-5412"><span class="linenos">5412</span></a> <span class="k">return</span> <span class="n">primary</span>
</span><span id="L-5413"><a href="#L-5413"><span class="linenos">5413</span></a>
</span><span id="L-5414"><a href="#L-5414"><span class="linenos">5414</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
</span><span id="L-5415"><a href="#L-5415"><span class="linenos">5415</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">number</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;0.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-5416"><a href="#L-5416"><span class="linenos">5416</span></a>
</span><span id="L-5417"><a href="#L-5417"><span class="linenos">5417</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-5418"><a href="#L-5418"><span class="linenos">5418</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="L-5419"><a href="#L-5419"><span class="linenos">5419</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
</span><span id="L-5420"><a href="#L-5420"><span class="linenos">5420</span></a>
</span><span id="L-5421"><a href="#L-5421"><span class="linenos">5421</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
</span><span id="L-5422"><a href="#L-5422"><span class="linenos">5422</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">query</span><span class="p">]</span>
</span><span id="L-5423"><a href="#L-5423"><span class="linenos">5423</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5424"><a href="#L-5424"><span class="linenos">5424</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
</span><span id="L-5425"><a href="#L-5425"><span class="linenos">5425</span></a>
</span><span id="L-5426"><a href="#L-5426"><span class="linenos">5426</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
</span><span id="L-5427"><a href="#L-5427"><span class="linenos">5427</span></a>
</span><span id="L-5428"><a href="#L-5428"><span class="linenos">5428</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-5429"><a href="#L-5429"><span class="linenos">5429</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">)</span>
</span><span id="L-5430"><a href="#L-5430"><span class="linenos">5430</span></a> <span class="k">elif</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">UNWRAPPED_QUERIES</span><span class="p">):</span>
</span><span id="L-5431"><a href="#L-5431"><span class="linenos">5431</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</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">parse_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-5432"><a href="#L-5432"><span class="linenos">5432</span></a> <span class="k">elif</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">Subquery</span><span class="p">):</span>
</span><span id="L-5433"><a href="#L-5433"><span class="linenos">5433</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</span><span class="p">(</span>
</span><span id="L-5434"><a href="#L-5434"><span class="linenos">5434</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">),</span> <span class="n">parse_alias</span><span class="o">=</span><span class="kc">False</span>
</span><span id="L-5435"><a href="#L-5435"><span class="linenos">5435</span></a> <span class="p">)</span>
</span><span id="L-5436"><a href="#L-5436"><span class="linenos">5436</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">:</span>
</span><span id="L-5437"><a href="#L-5437"><span class="linenos">5437</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-5438"><a href="#L-5438"><span class="linenos">5438</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5439"><a href="#L-5439"><span class="linenos">5439</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Paren</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-5440"><a href="#L-5440"><span class="linenos">5440</span></a>
</span><span id="L-5441"><a href="#L-5441"><span class="linenos">5441</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
</span><span id="L-5442"><a href="#L-5442"><span class="linenos">5442</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
</span><span id="L-5443"><a href="#L-5443"><span class="linenos">5443</span></a>
</span><span id="L-5444"><a href="#L-5444"><span class="linenos">5444</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</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-5445"><a href="#L-5445"><span class="linenos">5445</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-5446"><a href="#L-5446"><span class="linenos">5446</span></a>
</span><span id="L-5447"><a href="#L-5447"><span class="linenos">5447</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5448"><a href="#L-5448"><span class="linenos">5448</span></a>
</span><span id="L-5449"><a href="#L-5449"><span class="linenos">5449</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_field</span><span class="p">(</span>
</span><span id="L-5450"><a href="#L-5450"><span class="linenos">5450</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-5451"><a href="#L-5451"><span class="linenos">5451</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-5452"><a href="#L-5452"><span class="linenos">5452</span></a> <span class="n">tokens</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">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-5453"><a href="#L-5453"><span class="linenos">5453</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-5454"><a href="#L-5454"><span class="linenos">5454</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-5455"><a href="#L-5455"><span class="linenos">5455</span></a> <span class="k">if</span> <span class="n">anonymous_func</span><span class="p">:</span>
</span><span id="L-5456"><a href="#L-5456"><span class="linenos">5456</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-5457"><a href="#L-5457"><span class="linenos">5457</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span><span class="p">)</span>
</span><span id="L-5458"><a href="#L-5458"><span class="linenos">5458</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="L-5459"><a href="#L-5459"><span class="linenos">5459</span></a> <span class="p">)</span>
</span><span id="L-5460"><a href="#L-5460"><span class="linenos">5460</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5461"><a href="#L-5461"><span class="linenos">5461</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
</span><span id="L-5462"><a href="#L-5462"><span class="linenos">5462</span></a> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span>
</span><span id="L-5463"><a href="#L-5463"><span class="linenos">5463</span></a> <span class="p">)</span>
</span><span id="L-5464"><a href="#L-5464"><span class="linenos">5464</span></a> <span class="k">return</span> <span class="n">field</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="n">tokens</span><span class="p">)</span>
</span><span id="L-5465"><a href="#L-5465"><span class="linenos">5465</span></a>
</span><span id="L-5466"><a href="#L-5466"><span class="linenos">5466</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_function</span><span class="p">(</span>
</span><span id="L-5467"><a href="#L-5467"><span class="linenos">5467</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-5468"><a href="#L-5468"><span class="linenos">5468</span></a> <span class="n">functions</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="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-5469"><a href="#L-5469"><span class="linenos">5469</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-5470"><a href="#L-5470"><span class="linenos">5470</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="L-5471"><a href="#L-5471"><span class="linenos">5471</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-5472"><a href="#L-5472"><span class="linenos">5472</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-5473"><a href="#L-5473"><span class="linenos">5473</span></a> <span class="c1"># This allows us to also parse {fn &lt;function&gt;} syntax (Snowflake, MySQL support this)</span>
</span><span id="L-5474"><a href="#L-5474"><span class="linenos">5474</span></a> <span class="c1"># See: https://community.snowflake.com/s/article/SQL-Escape-Sequences</span>
</span><span id="L-5475"><a href="#L-5475"><span class="linenos">5475</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-5476"><a href="#L-5476"><span class="linenos">5476</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="L-5477"><a href="#L-5477"><span class="linenos">5477</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-5478"><a href="#L-5478"><span class="linenos">5478</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
</span><span id="L-5479"><a href="#L-5479"><span class="linenos">5479</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;FN&quot;</span>
</span><span id="L-5480"><a href="#L-5480"><span class="linenos">5480</span></a> <span class="p">):</span>
</span><span id="L-5481"><a href="#L-5481"><span class="linenos">5481</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</span><span id="L-5482"><a href="#L-5482"><span class="linenos">5482</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-5483"><a href="#L-5483"><span class="linenos">5483</span></a>
</span><span id="L-5484"><a href="#L-5484"><span class="linenos">5484</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_call</span><span class="p">(</span>
</span><span id="L-5485"><a href="#L-5485"><span class="linenos">5485</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span>
</span><span id="L-5486"><a href="#L-5486"><span class="linenos">5486</span></a> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span>
</span><span id="L-5487"><a href="#L-5487"><span class="linenos">5487</span></a> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span><span class="p">,</span>
</span><span id="L-5488"><a href="#L-5488"><span class="linenos">5488</span></a> <span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span><span class="p">,</span>
</span><span id="L-5489"><a href="#L-5489"><span class="linenos">5489</span></a> <span class="p">)</span>
</span><span id="L-5490"><a href="#L-5490"><span class="linenos">5490</span></a>
</span><span id="L-5491"><a href="#L-5491"><span class="linenos">5491</span></a> <span class="k">if</span> <span class="n">fn_syntax</span><span class="p">:</span>
</span><span id="L-5492"><a href="#L-5492"><span class="linenos">5492</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span>
</span><span id="L-5493"><a href="#L-5493"><span class="linenos">5493</span></a>
</span><span id="L-5494"><a href="#L-5494"><span class="linenos">5494</span></a> <span class="k">return</span> <span class="n">func</span>
</span><span id="L-5495"><a href="#L-5495"><span class="linenos">5495</span></a>
</span><span id="L-5496"><a href="#L-5496"><span class="linenos">5496</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_function_call</span><span class="p">(</span>
</span><span id="L-5497"><a href="#L-5497"><span class="linenos">5497</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-5498"><a href="#L-5498"><span class="linenos">5498</span></a> <span class="n">functions</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="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-5499"><a href="#L-5499"><span class="linenos">5499</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-5500"><a href="#L-5500"><span class="linenos">5500</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="L-5501"><a href="#L-5501"><span class="linenos">5501</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-5502"><a href="#L-5502"><span class="linenos">5502</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-5503"><a href="#L-5503"><span class="linenos">5503</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-5504"><a href="#L-5504"><span class="linenos">5504</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5505"><a href="#L-5505"><span class="linenos">5505</span></a>
</span><span id="L-5506"><a href="#L-5506"><span class="linenos">5506</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">comments</span>
</span><span id="L-5507"><a href="#L-5507"><span class="linenos">5507</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="L-5508"><a href="#L-5508"><span class="linenos">5508</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-5509"><a href="#L-5509"><span class="linenos">5509</span></a> <span class="n">upper</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-5510"><a href="#L-5510"><span class="linenos">5510</span></a>
</span><span id="L-5511"><a href="#L-5511"><span class="linenos">5511</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
</span><span id="L-5512"><a href="#L-5512"><span class="linenos">5512</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVALID_FUNC_NAME_TOKENS</span><span class="p">:</span>
</span><span id="L-5513"><a href="#L-5513"><span class="linenos">5513</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-5514"><a href="#L-5514"><span class="linenos">5514</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
</span><span id="L-5515"><a href="#L-5515"><span class="linenos">5515</span></a>
</span><span id="L-5516"><a href="#L-5516"><span class="linenos">5516</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
</span><span id="L-5517"><a href="#L-5517"><span class="linenos">5517</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
</span><span id="L-5518"><a href="#L-5518"><span class="linenos">5518</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-5519"><a href="#L-5519"><span class="linenos">5519</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">[</span><span class="n">token_type</span><span class="p">])</span>
</span><span id="L-5520"><a href="#L-5520"><span class="linenos">5520</span></a>
</span><span id="L-5521"><a href="#L-5521"><span class="linenos">5521</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5522"><a href="#L-5522"><span class="linenos">5522</span></a>
</span><span id="L-5523"><a href="#L-5523"><span class="linenos">5523</span></a> <span class="k">if</span> <span class="n">any_token</span><span class="p">:</span>
</span><span id="L-5524"><a href="#L-5524"><span class="linenos">5524</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_TOKENS</span><span class="p">:</span>
</span><span id="L-5525"><a href="#L-5525"><span class="linenos">5525</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5526"><a href="#L-5526"><span class="linenos">5526</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNC_TOKENS</span><span class="p">:</span>
</span><span id="L-5527"><a href="#L-5527"><span class="linenos">5527</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5528"><a href="#L-5528"><span class="linenos">5528</span></a>
</span><span id="L-5529"><a href="#L-5529"><span class="linenos">5529</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</span><span id="L-5530"><a href="#L-5530"><span class="linenos">5530</span></a>
</span><span id="L-5531"><a href="#L-5531"><span class="linenos">5531</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
</span><span id="L-5532"><a href="#L-5532"><span class="linenos">5532</span></a> <span class="k">if</span> <span class="n">parser</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
</span><span id="L-5533"><a href="#L-5533"><span class="linenos">5533</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-5534"><a href="#L-5534"><span class="linenos">5534</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5535"><a href="#L-5535"><span class="linenos">5535</span></a> <span class="n">subquery_predicate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUBQUERY_PREDICATES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">)</span>
</span><span id="L-5536"><a href="#L-5536"><span class="linenos">5536</span></a>
</span><span id="L-5537"><a href="#L-5537"><span class="linenos">5537</span></a> <span class="k">if</span> <span class="n">subquery_predicate</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
</span><span id="L-5538"><a href="#L-5538"><span class="linenos">5538</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-5539"><a href="#L-5539"><span class="linenos">5539</span></a> <span class="n">subquery_predicate</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
</span><span id="L-5540"><a href="#L-5540"><span class="linenos">5540</span></a> <span class="p">)</span>
</span><span id="L-5541"><a href="#L-5541"><span class="linenos">5541</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-5542"><a href="#L-5542"><span class="linenos">5542</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-5543"><a href="#L-5543"><span class="linenos">5543</span></a>
</span><span id="L-5544"><a href="#L-5544"><span class="linenos">5544</span></a> <span class="k">if</span> <span class="n">functions</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-5545"><a href="#L-5545"><span class="linenos">5545</span></a> <span class="n">functions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS</span>
</span><span id="L-5546"><a href="#L-5546"><span class="linenos">5546</span></a>
</span><span id="L-5547"><a href="#L-5547"><span class="linenos">5547</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">functions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
</span><span id="L-5548"><a href="#L-5548"><span class="linenos">5548</span></a> <span class="n">known_function</span> <span class="o">=</span> <span class="n">function</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span>
</span><span id="L-5549"><a href="#L-5549"><span class="linenos">5549</span></a>
</span><span id="L-5550"><a href="#L-5550"><span class="linenos">5550</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">known_function</span> <span class="ow">or</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
</span><span id="L-5551"><a href="#L-5551"><span class="linenos">5551</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
</span><span id="L-5552"><a href="#L-5552"><span class="linenos">5552</span></a>
</span><span id="L-5553"><a href="#L-5553"><span class="linenos">5553</span></a> <span class="n">post_func_comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">comments</span>
</span><span id="L-5554"><a href="#L-5554"><span class="linenos">5554</span></a> <span class="k">if</span> <span class="n">known_function</span> <span class="ow">and</span> <span class="n">post_func_comments</span><span class="p">:</span>
</span><span id="L-5555"><a href="#L-5555"><span class="linenos">5555</span></a> <span class="c1"># If the user-inputted comment &quot;/* sqlglot.anonymous */&quot; is following the function</span>
</span><span id="L-5556"><a href="#L-5556"><span class="linenos">5556</span></a> <span class="c1"># call we&#39;ll construct it as exp.Anonymous, even if it&#39;s &quot;known&quot;</span>
</span><span id="L-5557"><a href="#L-5557"><span class="linenos">5557</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span>
</span><span id="L-5558"><a href="#L-5558"><span class="linenos">5558</span></a> <span class="n">comment</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SQLGLOT_ANONYMOUS</span><span class="p">)</span>
</span><span id="L-5559"><a href="#L-5559"><span class="linenos">5559</span></a> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">post_func_comments</span>
</span><span id="L-5560"><a href="#L-5560"><span class="linenos">5560</span></a> <span class="p">):</span>
</span><span id="L-5561"><a href="#L-5561"><span class="linenos">5561</span></a> <span class="n">known_function</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-5562"><a href="#L-5562"><span class="linenos">5562</span></a>
</span><span id="L-5563"><a href="#L-5563"><span class="linenos">5563</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="n">known_function</span><span class="p">:</span>
</span><span id="L-5564"><a href="#L-5564"><span class="linenos">5564</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_kv_to_prop_eq</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-5565"><a href="#L-5565"><span class="linenos">5565</span></a>
</span><span id="L-5566"><a href="#L-5566"><span class="linenos">5566</span></a> <span class="k">if</span> <span class="n">known_function</span><span class="p">:</span>
</span><span id="L-5567"><a href="#L-5567"><span class="linenos">5567</span></a> <span class="n">func_builder</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">function</span><span class="p">)</span>
</span><span id="L-5568"><a href="#L-5568"><span class="linenos">5568</span></a>
</span><span id="L-5569"><a href="#L-5569"><span class="linenos">5569</span></a> <span class="k">if</span> <span class="s2">&quot;dialect&quot;</span> <span class="ow">in</span> <span class="n">func_builder</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span><span class="p">:</span>
</span><span id="L-5570"><a href="#L-5570"><span class="linenos">5570</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">func_builder</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="L-5571"><a href="#L-5571"><span class="linenos">5571</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5572"><a href="#L-5572"><span class="linenos">5572</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">func_builder</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-5573"><a href="#L-5573"><span class="linenos">5573</span></a>
</span><span id="L-5574"><a href="#L-5574"><span class="linenos">5574</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
</span><span id="L-5575"><a href="#L-5575"><span class="linenos">5575</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">PRESERVE_ORIGINAL_NAMES</span><span class="p">:</span>
</span><span id="L-5576"><a href="#L-5576"><span class="linenos">5576</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
</span><span id="L-5577"><a href="#L-5577"><span class="linenos">5577</span></a>
</span><span id="L-5578"><a href="#L-5578"><span class="linenos">5578</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
</span><span id="L-5579"><a href="#L-5579"><span class="linenos">5579</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5580"><a href="#L-5580"><span class="linenos">5580</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">:</span>
</span><span id="L-5581"><a href="#L-5581"><span class="linenos">5581</span></a> <span class="n">this</span> <span class="o">=</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">this</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-5582"><a href="#L-5582"><span class="linenos">5582</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</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">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-5583"><a href="#L-5583"><span class="linenos">5583</span></a>
</span><span id="L-5584"><a href="#L-5584"><span class="linenos">5584</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">Expression</span><span class="p">):</span>
</span><span id="L-5585"><a href="#L-5585"><span class="linenos">5585</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
</span><span id="L-5586"><a href="#L-5586"><span class="linenos">5586</span></a>
</span><span id="L-5587"><a href="#L-5587"><span class="linenos">5587</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-5588"><a href="#L-5588"><span class="linenos">5588</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-5589"><a href="#L-5589"><span class="linenos">5589</span></a>
</span><span id="L-5590"><a href="#L-5590"><span class="linenos">5590</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_to_prop_eq</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">index</span><span class="p">:</span> <span class="nb">int</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-5591"><a href="#L-5591"><span class="linenos">5591</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="L-5592"><a href="#L-5592"><span class="linenos">5592</span></a>
</span><span id="L-5593"><a href="#L-5593"><span class="linenos">5593</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_kv_to_prop_eq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expressions</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="o">-&gt;</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><span id="L-5594"><a href="#L-5594"><span class="linenos">5594</span></a> <span class="n">transformed</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-5595"><a href="#L-5595"><span class="linenos">5595</span></a>
</span><span id="L-5596"><a href="#L-5596"><span class="linenos">5596</span></a> <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
</span><span id="L-5597"><a href="#L-5597"><span class="linenos">5597</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEY_VALUE_DEFINITIONS</span><span class="p">):</span>
</span><span id="L-5598"><a href="#L-5598"><span class="linenos">5598</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="L-5599"><a href="#L-5599"><span class="linenos">5599</span></a> <span class="n">e</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">e</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;alias&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-5600"><a href="#L-5600"><span class="linenos">5600</span></a>
</span><span id="L-5601"><a href="#L-5601"><span class="linenos">5601</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</span><span class="p">):</span>
</span><span id="L-5602"><a href="#L-5602"><span class="linenos">5602</span></a> <span class="n">e</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-5603"><a href="#L-5603"><span class="linenos">5603</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</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">to_identifier</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span>
</span><span id="L-5604"><a href="#L-5604"><span class="linenos">5604</span></a> <span class="p">)</span>
</span><span id="L-5605"><a href="#L-5605"><span class="linenos">5605</span></a>
</span><span id="L-5606"><a href="#L-5606"><span class="linenos">5606</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</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">Column</span><span class="p">):</span>
</span><span id="L-5607"><a href="#L-5607"><span class="linenos">5607</span></a> <span class="n">e</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">e</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-5608"><a href="#L-5608"><span class="linenos">5608</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5609"><a href="#L-5609"><span class="linenos">5609</span></a> <span class="n">e</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_to_prop_eq</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span>
</span><span id="L-5610"><a href="#L-5610"><span class="linenos">5610</span></a>
</span><span id="L-5611"><a href="#L-5611"><span class="linenos">5611</span></a> <span class="n">transformed</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="L-5612"><a href="#L-5612"><span class="linenos">5612</span></a>
</span><span id="L-5613"><a href="#L-5613"><span class="linenos">5613</span></a> <span class="k">return</span> <span class="n">transformed</span>
</span><span id="L-5614"><a href="#L-5614"><span class="linenos">5614</span></a>
</span><span id="L-5615"><a href="#L-5615"><span class="linenos">5615</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_user_defined_function_expression</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5616"><a href="#L-5616"><span class="linenos">5616</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="L-5617"><a href="#L-5617"><span class="linenos">5617</span></a>
</span><span id="L-5618"><a href="#L-5618"><span class="linenos">5618</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_function_parameter</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5619"><a href="#L-5619"><span class="linenos">5619</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span> <span class="n">computed_column</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-5620"><a href="#L-5620"><span class="linenos">5620</span></a>
</span><span id="L-5621"><a href="#L-5621"><span class="linenos">5621</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_user_defined_function</span><span class="p">(</span>
</span><span id="L-5622"><a href="#L-5622"><span class="linenos">5622</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5623"><a href="#L-5623"><span class="linenos">5623</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-5624"><a href="#L-5624"><span class="linenos">5624</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-5625"><a href="#L-5625"><span class="linenos">5625</span></a>
</span><span id="L-5626"><a href="#L-5626"><span class="linenos">5626</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-5627"><a href="#L-5627"><span class="linenos">5627</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-5628"><a href="#L-5628"><span class="linenos">5628</span></a>
</span><span id="L-5629"><a href="#L-5629"><span class="linenos">5629</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_parameter</span><span class="p">)</span>
</span><span id="L-5630"><a href="#L-5630"><span class="linenos">5630</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-5631"><a href="#L-5631"><span class="linenos">5631</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-5632"><a href="#L-5632"><span class="linenos">5632</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wrapped</span><span class="o">=</span><span class="kc">True</span>
</span><span id="L-5633"><a href="#L-5633"><span class="linenos">5633</span></a> <span class="p">)</span>
</span><span id="L-5634"><a href="#L-5634"><span class="linenos">5634</span></a>
</span><span id="L-5635"><a href="#L-5635"><span class="linenos">5635</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
</span><span id="L-5636"><a href="#L-5636"><span class="linenos">5636</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="L-5637"><a href="#L-5637"><span class="linenos">5637</span></a> <span class="k">if</span> <span class="n">literal</span><span class="p">:</span>
</span><span id="L-5638"><a href="#L-5638"><span class="linenos">5638</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">literal</span><span class="p">)</span>
</span><span id="L-5639"><a href="#L-5639"><span class="linenos">5639</span></a>
</span><span id="L-5640"><a href="#L-5640"><span class="linenos">5640</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-5641"><a href="#L-5641"><span class="linenos">5641</span></a>
</span><span id="L-5642"><a href="#L-5642"><span class="linenos">5642</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_session_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">:</span>
</span><span id="L-5643"><a href="#L-5643"><span class="linenos">5643</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5644"><a href="#L-5644"><span class="linenos">5644</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="L-5645"><a href="#L-5645"><span class="linenos">5645</span></a>
</span><span id="L-5646"><a href="#L-5646"><span class="linenos">5646</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
</span><span id="L-5647"><a href="#L-5647"><span class="linenos">5647</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
</span><span id="L-5648"><a href="#L-5648"><span class="linenos">5648</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="L-5649"><a href="#L-5649"><span class="linenos">5649</span></a>
</span><span id="L-5650"><a href="#L-5650"><span class="linenos">5650</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="L-5651"><a href="#L-5651"><span class="linenos">5651</span></a>
</span><span id="L-5652"><a href="#L-5652"><span class="linenos">5652</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_lambda_arg</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5653"><a href="#L-5653"><span class="linenos">5653</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-5654"><a href="#L-5654"><span class="linenos">5654</span></a>
</span><span id="L-5655"><a href="#L-5655"><span class="linenos">5655</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</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">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-5656"><a href="#L-5656"><span class="linenos">5656</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-5657"><a href="#L-5657"><span class="linenos">5657</span></a>
</span><span id="L-5658"><a href="#L-5658"><span class="linenos">5658</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-5659"><a href="#L-5659"><span class="linenos">5659</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
</span><span id="L-5660"><a href="#L-5660"><span class="linenos">5660</span></a> <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 class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda_arg</span><span class="p">)</span>
</span><span id="L-5661"><a href="#L-5661"><span class="linenos">5661</span></a> <span class="p">)</span>
</span><span id="L-5662"><a href="#L-5662"><span class="linenos">5662</span></a>
</span><span id="L-5663"><a href="#L-5663"><span class="linenos">5663</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
</span><span id="L-5664"><a href="#L-5664"><span class="linenos">5664</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-5665"><a href="#L-5665"><span class="linenos">5665</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5666"><a href="#L-5666"><span class="linenos">5666</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda_arg</span><span class="p">()]</span>
</span><span id="L-5667"><a href="#L-5667"><span class="linenos">5667</span></a>
</span><span id="L-5668"><a href="#L-5668"><span class="linenos">5668</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">):</span>
</span><span id="L-5669"><a href="#L-5669"><span class="linenos">5669</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">)</span>
</span><span id="L-5670"><a href="#L-5670"><span class="linenos">5670</span></a>
</span><span id="L-5671"><a href="#L-5671"><span class="linenos">5671</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-5672"><a href="#L-5672"><span class="linenos">5672</span></a>
</span><span id="L-5673"><a href="#L-5673"><span class="linenos">5673</span></a> <span class="n">this</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-5674"><a href="#L-5674"><span class="linenos">5674</span></a>
</span><span id="L-5675"><a href="#L-5675"><span class="linenos">5675</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
</span><span id="L-5676"><a href="#L-5676"><span class="linenos">5676</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-5677"><a href="#L-5677"><span class="linenos">5677</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span>
</span><span id="L-5678"><a href="#L-5678"><span class="linenos">5678</span></a> <span class="p">)</span>
</span><span id="L-5679"><a href="#L-5679"><span class="linenos">5679</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5680"><a href="#L-5680"><span class="linenos">5680</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
</span><span id="L-5681"><a href="#L-5681"><span class="linenos">5681</span></a>
</span><span id="L-5682"><a href="#L-5682"><span class="linenos">5682</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span>
</span><span id="L-5683"><a href="#L-5683"><span class="linenos">5683</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_having_max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)))</span>
</span><span id="L-5684"><a href="#L-5684"><span class="linenos">5684</span></a> <span class="p">)</span>
</span><span id="L-5685"><a href="#L-5685"><span class="linenos">5685</span></a>
</span><span id="L-5686"><a href="#L-5686"><span class="linenos">5686</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">=</span> <span class="kc">None</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5687"><a href="#L-5687"><span class="linenos">5687</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-5688"><a href="#L-5688"><span class="linenos">5688</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-5689"><a href="#L-5689"><span class="linenos">5689</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-5690"><a href="#L-5690"><span class="linenos">5690</span></a>
</span><span id="L-5691"><a href="#L-5691"><span class="linenos">5691</span></a> <span class="c1"># Disambiguate between schema and subquery/CTE, e.g. in INSERT INTO table (&lt;expr&gt;),</span>
</span><span id="L-5692"><a href="#L-5692"><span class="linenos">5692</span></a> <span class="c1"># expr can be of both types</span>
</span><span id="L-5693"><a href="#L-5693"><span class="linenos">5693</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SELECT_START_TOKENS</span><span class="p">):</span>
</span><span id="L-5694"><a href="#L-5694"><span class="linenos">5694</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-5695"><a href="#L-5695"><span class="linenos">5695</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-5696"><a href="#L-5696"><span class="linenos">5696</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">())</span>
</span><span id="L-5697"><a href="#L-5697"><span class="linenos">5697</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-5698"><a href="#L-5698"><span class="linenos">5698</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</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">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-5699"><a href="#L-5699"><span class="linenos">5699</span></a>
</span><span id="L-5700"><a href="#L-5700"><span class="linenos">5700</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_field_def</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5701"><a href="#L-5701"><span class="linenos">5701</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="L-5702"><a href="#L-5702"><span class="linenos">5702</span></a>
</span><span id="L-5703"><a href="#L-5703"><span class="linenos">5703</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_column_def</span><span class="p">(</span>
</span><span id="L-5704"><a href="#L-5704"><span class="linenos">5704</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="n">computed_column</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-5705"><a href="#L-5705"><span class="linenos">5705</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-5706"><a href="#L-5706"><span class="linenos">5706</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
</span><span id="L-5707"><a href="#L-5707"><span class="linenos">5707</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">Column</span><span class="p">):</span>
</span><span id="L-5708"><a href="#L-5708"><span class="linenos">5708</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-5709"><a href="#L-5709"><span class="linenos">5709</span></a>
</span><span id="L-5710"><a href="#L-5710"><span class="linenos">5710</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">computed_column</span><span class="p">:</span>
</span><span id="L-5711"><a href="#L-5711"><span class="linenos">5711</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="L-5712"><a href="#L-5712"><span class="linenos">5712</span></a>
</span><span id="L-5713"><a href="#L-5713"><span class="linenos">5713</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-5714"><a href="#L-5714"><span class="linenos">5714</span></a>
</span><span id="L-5715"><a href="#L-5715"><span class="linenos">5715</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">):</span>
</span><span id="L-5716"><a href="#L-5716"><span class="linenos">5716</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</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">ordinality</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-5717"><a href="#L-5717"><span class="linenos">5717</span></a>
</span><span id="L-5718"><a href="#L-5718"><span class="linenos">5718</span></a> <span class="n">constraints</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="o">=</span> <span class="p">[]</span>
</span><span id="L-5719"><a href="#L-5719"><span class="linenos">5719</span></a>
</span><span id="L-5720"><a href="#L-5720"><span class="linenos">5720</span></a> <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">))</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
</span><span id="L-5721"><a href="#L-5721"><span class="linenos">5721</span></a> <span class="p">(</span><span class="s2">&quot;ALIAS&quot;</span><span class="p">,</span> <span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">)</span>
</span><span id="L-5722"><a href="#L-5722"><span class="linenos">5722</span></a> <span class="p">):</span>
</span><span id="L-5723"><a href="#L-5723"><span class="linenos">5723</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;MATERIALIZED&quot;</span>
</span><span id="L-5724"><a href="#L-5724"><span class="linenos">5724</span></a> <span class="n">constraint_kind</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">(</span>
</span><span id="L-5725"><a href="#L-5725"><span class="linenos">5725</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span>
</span><span id="L-5726"><a href="#L-5726"><span class="linenos">5726</span></a> <span class="n">persisted</span><span class="o">=</span><span class="n">persisted</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PERSISTED&quot;</span><span class="p">),</span>
</span><span id="L-5727"><a href="#L-5727"><span class="linenos">5727</span></a> <span class="n">not_null</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
</span><span id="L-5728"><a href="#L-5728"><span class="linenos">5728</span></a> <span class="p">)</span>
</span><span id="L-5729"><a href="#L-5729"><span class="linenos">5729</span></a> <span class="n">constraints</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">constraint_kind</span><span class="p">))</span>
</span><span id="L-5730"><a href="#L-5730"><span class="linenos">5730</span></a> <span class="k">elif</span> <span class="p">(</span>
</span><span id="L-5731"><a href="#L-5731"><span class="linenos">5731</span></a> <span class="n">kind</span>
</span><span id="L-5732"><a href="#L-5732"><span class="linenos">5732</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-5733"><a href="#L-5733"><span class="linenos">5733</span></a> <span class="ow">and</span> <span class="p">(</span>
</span><span id="L-5734"><a href="#L-5734"><span class="linenos">5734</span></a> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">WRAPPED_TRANSFORM_COLUMN_CONSTRAINT</span>
</span><span id="L-5735"><a href="#L-5735"><span class="linenos">5735</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="L-5736"><a href="#L-5736"><span class="linenos">5736</span></a> <span class="p">)</span>
</span><span id="L-5737"><a href="#L-5737"><span class="linenos">5737</span></a> <span class="p">):</span>
</span><span id="L-5738"><a href="#L-5738"><span class="linenos">5738</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-5739"><a href="#L-5739"><span class="linenos">5739</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="L-5740"><a href="#L-5740"><span class="linenos">5740</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-5741"><a href="#L-5741"><span class="linenos">5741</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
</span><span id="L-5742"><a href="#L-5742"><span class="linenos">5742</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TransformColumnConstraint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_disjunction</span><span class="p">()),</span>
</span><span id="L-5743"><a href="#L-5743"><span class="linenos">5743</span></a> <span class="p">)</span>
</span><span id="L-5744"><a href="#L-5744"><span class="linenos">5744</span></a> <span class="p">)</span>
</span><span id="L-5745"><a href="#L-5745"><span class="linenos">5745</span></a>
</span><span id="L-5746"><a href="#L-5746"><span class="linenos">5746</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-5747"><a href="#L-5747"><span class="linenos">5747</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_constraint</span><span class="p">()</span>
</span><span id="L-5748"><a href="#L-5748"><span class="linenos">5748</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
</span><span id="L-5749"><a href="#L-5749"><span class="linenos">5749</span></a> <span class="k">break</span>
</span><span id="L-5750"><a href="#L-5750"><span class="linenos">5750</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
</span><span id="L-5751"><a href="#L-5751"><span class="linenos">5751</span></a>
</span><span id="L-5752"><a href="#L-5752"><span class="linenos">5752</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">constraints</span><span class="p">:</span>
</span><span id="L-5753"><a href="#L-5753"><span class="linenos">5753</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-5754"><a href="#L-5754"><span class="linenos">5754</span></a>
</span><span id="L-5755"><a href="#L-5755"><span class="linenos">5755</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span><span class="p">)</span>
</span><span id="L-5756"><a href="#L-5756"><span class="linenos">5756</span></a>
</span><span id="L-5757"><a href="#L-5757"><span class="linenos">5757</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_auto_increment</span><span class="p">(</span>
</span><span id="L-5758"><a href="#L-5758"><span class="linenos">5758</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-5759"><a href="#L-5759"><span class="linenos">5759</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
</span><span id="L-5760"><a href="#L-5760"><span class="linenos">5760</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5761"><a href="#L-5761"><span class="linenos">5761</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5762"><a href="#L-5762"><span class="linenos">5762</span></a>
</span><span id="L-5763"><a href="#L-5763"><span class="linenos">5763</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-5764"><a href="#L-5764"><span class="linenos">5764</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="L-5765"><a href="#L-5765"><span class="linenos">5765</span></a> <span class="n">start</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-5766"><a href="#L-5766"><span class="linenos">5766</span></a> <span class="n">increment</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-5767"><a href="#L-5767"><span class="linenos">5767</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">):</span>
</span><span id="L-5768"><a href="#L-5768"><span class="linenos">5768</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-5769"><a href="#L-5769"><span class="linenos">5769</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">)</span>
</span><span id="L-5770"><a href="#L-5770"><span class="linenos">5770</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-5771"><a href="#L-5771"><span class="linenos">5771</span></a>
</span><span id="L-5772"><a href="#L-5772"><span class="linenos">5772</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">increment</span><span class="p">:</span>
</span><span id="L-5773"><a href="#L-5773"><span class="linenos">5773</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span>
</span><span id="L-5774"><a href="#L-5774"><span class="linenos">5774</span></a> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">increment</span><span class="o">=</span><span class="n">increment</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span>
</span><span id="L-5775"><a href="#L-5775"><span class="linenos">5775</span></a> <span class="p">)</span>
</span><span id="L-5776"><a href="#L-5776"><span class="linenos">5776</span></a>
</span><span id="L-5777"><a href="#L-5777"><span class="linenos">5777</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">()</span>
</span><span id="L-5778"><a href="#L-5778"><span class="linenos">5778</span></a>
</span><span id="L-5779"><a href="#L-5779"><span class="linenos">5779</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_auto_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">]:</span>
</span><span id="L-5780"><a href="#L-5780"><span class="linenos">5780</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;REFRESH&quot;</span><span class="p">):</span>
</span><span id="L-5781"><a href="#L-5781"><span class="linenos">5781</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-5782"><a href="#L-5782"><span class="linenos">5782</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5783"><a href="#L-5783"><span class="linenos">5783</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="L-5784"><a href="#L-5784"><span class="linenos">5784</span></a>
</span><span id="L-5785"><a href="#L-5785"><span class="linenos">5785</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_compress</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">:</span>
</span><span id="L-5786"><a href="#L-5786"><span class="linenos">5786</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-5787"><a href="#L-5787"><span class="linenos">5787</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-5788"><a href="#L-5788"><span class="linenos">5788</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="L-5789"><a href="#L-5789"><span class="linenos">5789</span></a> <span class="p">)</span>
</span><span id="L-5790"><a href="#L-5790"><span class="linenos">5790</span></a>
</span><span id="L-5791"><a href="#L-5791"><span class="linenos">5791</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-5792"><a href="#L-5792"><span class="linenos">5792</span></a>
</span><span id="L-5793"><a href="#L-5793"><span class="linenos">5793</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_generated_as_identity</span><span class="p">(</span>
</span><span id="L-5794"><a href="#L-5794"><span class="linenos">5794</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-5795"><a href="#L-5795"><span class="linenos">5795</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="p">(</span>
</span><span id="L-5796"><a href="#L-5796"><span class="linenos">5796</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
</span><span id="L-5797"><a href="#L-5797"><span class="linenos">5797</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span>
</span><span id="L-5798"><a href="#L-5798"><span class="linenos">5798</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span>
</span><span id="L-5799"><a href="#L-5799"><span class="linenos">5799</span></a> <span class="p">):</span>
</span><span id="L-5800"><a href="#L-5800"><span class="linenos">5800</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
</span><span id="L-5801"><a href="#L-5801"><span class="linenos">5801</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
</span><span id="L-5802"><a href="#L-5802"><span class="linenos">5802</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-5803"><a href="#L-5803"><span class="linenos">5803</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
</span><span id="L-5804"><a href="#L-5804"><span class="linenos">5804</span></a> <span class="p">)</span>
</span><span id="L-5805"><a href="#L-5805"><span class="linenos">5805</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5806"><a href="#L-5806"><span class="linenos">5806</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
</span><span id="L-5807"><a href="#L-5807"><span class="linenos">5807</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-5808"><a href="#L-5808"><span class="linenos">5808</span></a>
</span><span id="L-5809"><a href="#L-5809"><span class="linenos">5809</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="L-5810"><a href="#L-5810"><span class="linenos">5810</span></a>
</span><span id="L-5811"><a href="#L-5811"><span class="linenos">5811</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
</span><span id="L-5812"><a href="#L-5812"><span class="linenos">5812</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">)</span>
</span><span id="L-5813"><a href="#L-5813"><span class="linenos">5813</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span>
</span><span id="L-5814"><a href="#L-5814"><span class="linenos">5814</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
</span><span id="L-5815"><a href="#L-5815"><span class="linenos">5815</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HIDDEN&quot;</span><span class="p">)</span>
</span><span id="L-5816"><a href="#L-5816"><span class="linenos">5816</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">hidden</span><span class="o">=</span><span class="n">hidden</span><span class="p">)</span>
</span><span id="L-5817"><a href="#L-5817"><span class="linenos">5817</span></a>
</span><span id="L-5818"><a href="#L-5818"><span class="linenos">5818</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
</span><span id="L-5819"><a href="#L-5819"><span class="linenos">5819</span></a>
</span><span id="L-5820"><a href="#L-5820"><span class="linenos">5820</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-5821"><a href="#L-5821"><span class="linenos">5821</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
</span><span id="L-5822"><a href="#L-5822"><span class="linenos">5822</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-5823"><a href="#L-5823"><span class="linenos">5823</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="L-5824"><a href="#L-5824"><span class="linenos">5824</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-5825"><a href="#L-5825"><span class="linenos">5825</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</span><span class="p">):</span>
</span><span id="L-5826"><a href="#L-5826"><span class="linenos">5826</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-5827"><a href="#L-5827"><span class="linenos">5827</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAXVALUE&quot;</span><span class="p">):</span>
</span><span id="L-5828"><a href="#L-5828"><span class="linenos">5828</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-5829"><a href="#L-5829"><span class="linenos">5829</span></a>
</span><span id="L-5830"><a href="#L-5830"><span class="linenos">5830</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
</span><span id="L-5831"><a href="#L-5831"><span class="linenos">5831</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
</span><span id="L-5832"><a href="#L-5832"><span class="linenos">5832</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
</span><span id="L-5833"><a href="#L-5833"><span class="linenos">5833</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="L-5834"><a href="#L-5834"><span class="linenos">5834</span></a>
</span><span id="L-5835"><a href="#L-5835"><span class="linenos">5835</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identity</span><span class="p">:</span>
</span><span id="L-5836"><a href="#L-5836"><span class="linenos">5836</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_range</span><span class="p">())</span>
</span><span id="L-5837"><a href="#L-5837"><span class="linenos">5837</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</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;start&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-5838"><a href="#L-5838"><span class="linenos">5838</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="L-5839"><a href="#L-5839"><span class="linenos">5839</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</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-5840"><a href="#L-5840"><span class="linenos">5840</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</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-5841"><a href="#L-5841"><span class="linenos">5841</span></a>
</span><span id="L-5842"><a href="#L-5842"><span class="linenos">5842</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-5843"><a href="#L-5843"><span class="linenos">5843</span></a>
</span><span id="L-5844"><a href="#L-5844"><span class="linenos">5844</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-5845"><a href="#L-5845"><span class="linenos">5845</span></a>
</span><span id="L-5846"><a href="#L-5846"><span class="linenos">5846</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_inline</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">:</span>
</span><span id="L-5847"><a href="#L-5847"><span class="linenos">5847</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">)</span>
</span><span id="L-5848"><a href="#L-5848"><span class="linenos">5848</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-5849"><a href="#L-5849"><span class="linenos">5849</span></a>
</span><span id="L-5850"><a href="#L-5850"><span class="linenos">5850</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_not_constraint</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5851"><a href="#L-5851"><span class="linenos">5851</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
</span><span id="L-5852"><a href="#L-5852"><span class="linenos">5852</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">)</span>
</span><span id="L-5853"><a href="#L-5853"><span class="linenos">5853</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASESPECIFIC&quot;</span><span class="p">):</span>
</span><span id="L-5854"><a href="#L-5854"><span class="linenos">5854</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-5855"><a href="#L-5855"><span class="linenos">5855</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLICATION&quot;</span><span class="p">):</span>
</span><span id="L-5856"><a href="#L-5856"><span class="linenos">5856</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotForReplicationColumnConstraint</span><span class="p">)</span>
</span><span id="L-5857"><a href="#L-5857"><span class="linenos">5857</span></a>
</span><span id="L-5858"><a href="#L-5858"><span class="linenos">5858</span></a> <span class="c1"># Unconsume the `NOT` token</span>
</span><span id="L-5859"><a href="#L-5859"><span class="linenos">5859</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-5860"><a href="#L-5860"><span class="linenos">5860</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5861"><a href="#L-5861"><span class="linenos">5861</span></a>
</span><span id="L-5862"><a href="#L-5862"><span class="linenos">5862</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_column_constraint</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5863"><a href="#L-5863"><span class="linenos">5863</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-5864"><a href="#L-5864"><span class="linenos">5864</span></a>
</span><span id="L-5865"><a href="#L-5865"><span class="linenos">5865</span></a> <span class="n">procedure_option_follows</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-5866"><a href="#L-5866"><span class="linenos">5866</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-5867"><a href="#L-5867"><span class="linenos">5867</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
</span><span id="L-5868"><a href="#L-5868"><span class="linenos">5868</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROCEDURE_OPTIONS</span>
</span><span id="L-5869"><a href="#L-5869"><span class="linenos">5869</span></a> <span class="p">)</span>
</span><span id="L-5870"><a href="#L-5870"><span class="linenos">5870</span></a>
</span><span id="L-5871"><a href="#L-5871"><span class="linenos">5871</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">procedure_option_follows</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">):</span>
</span><span id="L-5872"><a href="#L-5872"><span class="linenos">5872</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-5873"><a href="#L-5873"><span class="linenos">5873</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
</span><span id="L-5874"><a href="#L-5874"><span class="linenos">5874</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-5875"><a href="#L-5875"><span class="linenos">5875</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">),</span>
</span><span id="L-5876"><a href="#L-5876"><span class="linenos">5876</span></a> <span class="p">)</span>
</span><span id="L-5877"><a href="#L-5877"><span class="linenos">5877</span></a>
</span><span id="L-5878"><a href="#L-5878"><span class="linenos">5878</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-5879"><a href="#L-5879"><span class="linenos">5879</span></a>
</span><span id="L-5880"><a href="#L-5880"><span class="linenos">5880</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_constraint</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5881"><a href="#L-5881"><span class="linenos">5881</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
</span><span id="L-5882"><a href="#L-5882"><span class="linenos">5882</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">)</span>
</span><span id="L-5883"><a href="#L-5883"><span class="linenos">5883</span></a>
</span><span id="L-5884"><a href="#L-5884"><span class="linenos">5884</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-5885"><a href="#L-5885"><span class="linenos">5885</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Constraint</span><span class="p">,</span>
</span><span id="L-5886"><a href="#L-5886"><span class="linenos">5886</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span>
</span><span id="L-5887"><a href="#L-5887"><span class="linenos">5887</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraints</span><span class="p">(),</span>
</span><span id="L-5888"><a href="#L-5888"><span class="linenos">5888</span></a> <span class="p">)</span>
</span><span id="L-5889"><a href="#L-5889"><span class="linenos">5889</span></a>
</span><span id="L-5890"><a href="#L-5890"><span class="linenos">5890</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unnamed_constraints</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5891"><a href="#L-5891"><span class="linenos">5891</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-5892"><a href="#L-5892"><span class="linenos">5892</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-5893"><a href="#L-5893"><span class="linenos">5893</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
</span><span id="L-5894"><a href="#L-5894"><span class="linenos">5894</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
</span><span id="L-5895"><a href="#L-5895"><span class="linenos">5895</span></a> <span class="k">break</span>
</span><span id="L-5896"><a href="#L-5896"><span class="linenos">5896</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
</span><span id="L-5897"><a href="#L-5897"><span class="linenos">5897</span></a>
</span><span id="L-5898"><a href="#L-5898"><span class="linenos">5898</span></a> <span class="k">return</span> <span class="n">constraints</span>
</span><span id="L-5899"><a href="#L-5899"><span class="linenos">5899</span></a>
</span><span id="L-5900"><a href="#L-5900"><span class="linenos">5900</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
</span><span id="L-5901"><a href="#L-5901"><span class="linenos">5901</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">constraints</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">Collection</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-5902"><a href="#L-5902"><span class="linenos">5902</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-5903"><a href="#L-5903"><span class="linenos">5903</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
</span><span id="L-5904"><a href="#L-5904"><span class="linenos">5904</span></a> <span class="n">constraints</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span>
</span><span id="L-5905"><a href="#L-5905"><span class="linenos">5905</span></a> <span class="p">):</span>
</span><span id="L-5906"><a href="#L-5906"><span class="linenos">5906</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5907"><a href="#L-5907"><span class="linenos">5907</span></a>
</span><span id="L-5908"><a href="#L-5908"><span class="linenos">5908</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-5909"><a href="#L-5909"><span class="linenos">5909</span></a> <span class="k">if</span> <span class="n">constraint</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">:</span>
</span><span id="L-5910"><a href="#L-5910"><span class="linenos">5910</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser found for schema constraint </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
</span><span id="L-5911"><a href="#L-5911"><span class="linenos">5911</span></a>
</span><span id="L-5912"><a href="#L-5912"><span class="linenos">5912</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="n">constraint</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-5913"><a href="#L-5913"><span class="linenos">5913</span></a>
</span><span id="L-5914"><a href="#L-5914"><span class="linenos">5914</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unique_key</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-5915"><a href="#L-5915"><span class="linenos">5915</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-5916"><a href="#L-5916"><span class="linenos">5916</span></a>
</span><span id="L-5917"><a href="#L-5917"><span class="linenos">5917</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unique</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">:</span>
</span><span id="L-5918"><a href="#L-5918"><span class="linenos">5918</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
</span><span id="L-5919"><a href="#L-5919"><span class="linenos">5919</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-5920"><a href="#L-5920"><span class="linenos">5920</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">,</span>
</span><span id="L-5921"><a href="#L-5921"><span class="linenos">5921</span></a> <span class="n">nulls</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;DISTINCT&quot;</span><span class="p">),</span>
</span><span id="L-5922"><a href="#L-5922"><span class="linenos">5922</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unique_key</span><span class="p">()),</span>
</span><span id="L-5923"><a href="#L-5923"><span class="linenos">5923</span></a> <span class="n">index_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
</span><span id="L-5924"><a href="#L-5924"><span class="linenos">5924</span></a> <span class="n">on_conflict</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_conflict</span><span class="p">(),</span>
</span><span id="L-5925"><a href="#L-5925"><span class="linenos">5925</span></a> <span class="p">)</span>
</span><span id="L-5926"><a href="#L-5926"><span class="linenos">5926</span></a>
</span><span id="L-5927"><a href="#L-5927"><span class="linenos">5927</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_key_constraint_options</span><span class="p">(</span><span class="bp">self</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-5928"><a href="#L-5928"><span class="linenos">5928</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-5929"><a href="#L-5929"><span class="linenos">5929</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-5930"><a href="#L-5930"><span class="linenos">5930</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-5931"><a href="#L-5931"><span class="linenos">5931</span></a> <span class="k">break</span>
</span><span id="L-5932"><a href="#L-5932"><span class="linenos">5932</span></a>
</span><span id="L-5933"><a href="#L-5933"><span class="linenos">5933</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
</span><span id="L-5934"><a href="#L-5934"><span class="linenos">5934</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5935"><a href="#L-5935"><span class="linenos">5935</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-5936"><a href="#L-5936"><span class="linenos">5936</span></a>
</span><span id="L-5937"><a href="#L-5937"><span class="linenos">5937</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
</span><span id="L-5938"><a href="#L-5938"><span class="linenos">5938</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
</span><span id="L-5939"><a href="#L-5939"><span class="linenos">5939</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">):</span>
</span><span id="L-5940"><a href="#L-5940"><span class="linenos">5940</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
</span><span id="L-5941"><a href="#L-5941"><span class="linenos">5941</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESTRICT&quot;</span><span class="p">):</span>
</span><span id="L-5942"><a href="#L-5942"><span class="linenos">5942</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;RESTRICT&quot;</span>
</span><span id="L-5943"><a href="#L-5943"><span class="linenos">5943</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">):</span>
</span><span id="L-5944"><a href="#L-5944"><span class="linenos">5944</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
</span><span id="L-5945"><a href="#L-5945"><span class="linenos">5945</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="L-5946"><a href="#L-5946"><span class="linenos">5946</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
</span><span id="L-5947"><a href="#L-5947"><span class="linenos">5947</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5948"><a href="#L-5948"><span class="linenos">5948</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Invalid key constraint&quot;</span><span class="p">)</span>
</span><span id="L-5949"><a href="#L-5949"><span class="linenos">5949</span></a>
</span><span id="L-5950"><a href="#L-5950"><span class="linenos">5950</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-5951"><a href="#L-5951"><span class="linenos">5951</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5952"><a href="#L-5952"><span class="linenos">5952</span></a> <span class="n">var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span>
</span><span id="L-5953"><a href="#L-5953"><span class="linenos">5953</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">KEY_CONSTRAINT_OPTIONS</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="o">=</span><span class="kc">False</span>
</span><span id="L-5954"><a href="#L-5954"><span class="linenos">5954</span></a> <span class="p">)</span>
</span><span id="L-5955"><a href="#L-5955"><span class="linenos">5955</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">var</span><span class="p">:</span>
</span><span id="L-5956"><a href="#L-5956"><span class="linenos">5956</span></a> <span class="k">break</span>
</span><span id="L-5957"><a href="#L-5957"><span class="linenos">5957</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">var</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="L-5958"><a href="#L-5958"><span class="linenos">5958</span></a>
</span><span id="L-5959"><a href="#L-5959"><span class="linenos">5959</span></a> <span class="k">return</span> <span class="n">options</span>
</span><span id="L-5960"><a href="#L-5960"><span class="linenos">5960</span></a>
</span><span id="L-5961"><a href="#L-5961"><span class="linenos">5961</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</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">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">Reference</span><span class="p">]:</span>
</span><span id="L-5962"><a href="#L-5962"><span class="linenos">5962</span></a> <span class="k">if</span> <span class="n">match</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">):</span>
</span><span id="L-5963"><a href="#L-5963"><span class="linenos">5963</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5964"><a href="#L-5964"><span class="linenos">5964</span></a>
</span><span id="L-5965"><a href="#L-5965"><span class="linenos">5965</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5966"><a href="#L-5966"><span class="linenos">5966</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-5967"><a href="#L-5967"><span class="linenos">5967</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
</span><span id="L-5968"><a href="#L-5968"><span class="linenos">5968</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
</span><span id="L-5969"><a href="#L-5969"><span class="linenos">5969</span></a>
</span><span id="L-5970"><a href="#L-5970"><span class="linenos">5970</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_foreign_key</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">:</span>
</span><span id="L-5971"><a href="#L-5971"><span class="linenos">5971</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
</span><span id="L-5972"><a href="#L-5972"><span class="linenos">5972</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_references</span><span class="p">()</span>
</span><span id="L-5973"><a href="#L-5973"><span class="linenos">5973</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-5974"><a href="#L-5974"><span class="linenos">5974</span></a>
</span><span id="L-5975"><a href="#L-5975"><span class="linenos">5975</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
</span><span id="L-5976"><a href="#L-5976"><span class="linenos">5976</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">)):</span>
</span><span id="L-5977"><a href="#L-5977"><span class="linenos">5977</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected DELETE or UPDATE&quot;</span><span class="p">)</span>
</span><span id="L-5978"><a href="#L-5978"><span class="linenos">5978</span></a>
</span><span id="L-5979"><a href="#L-5979"><span class="linenos">5979</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
</span><span id="L-5980"><a href="#L-5980"><span class="linenos">5980</span></a>
</span><span id="L-5981"><a href="#L-5981"><span class="linenos">5981</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
</span><span id="L-5982"><a href="#L-5982"><span class="linenos">5982</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
</span><span id="L-5983"><a href="#L-5983"><span class="linenos">5983</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">):</span>
</span><span id="L-5984"><a href="#L-5984"><span class="linenos">5984</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">))</span>
</span><span id="L-5985"><a href="#L-5985"><span class="linenos">5985</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-5986"><a href="#L-5986"><span class="linenos">5986</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-5987"><a href="#L-5987"><span class="linenos">5987</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-5988"><a href="#L-5988"><span class="linenos">5988</span></a> <span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-5989"><a href="#L-5989"><span class="linenos">5989</span></a>
</span><span id="L-5990"><a href="#L-5990"><span class="linenos">5990</span></a> <span class="n">options</span><span class="p">[</span><span class="n">kind</span><span class="p">]</span> <span class="o">=</span> <span class="n">action</span>
</span><span id="L-5991"><a href="#L-5991"><span class="linenos">5991</span></a>
</span><span id="L-5992"><a href="#L-5992"><span class="linenos">5992</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-5993"><a href="#L-5993"><span class="linenos">5993</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">,</span>
</span><span id="L-5994"><a href="#L-5994"><span class="linenos">5994</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-5995"><a href="#L-5995"><span class="linenos">5995</span></a> <span class="n">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span>
</span><span id="L-5996"><a href="#L-5996"><span class="linenos">5996</span></a> <span class="o">**</span><span class="n">options</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="L-5997"><a href="#L-5997"><span class="linenos">5997</span></a> <span class="p">)</span>
</span><span id="L-5998"><a href="#L-5998"><span class="linenos">5998</span></a>
</span><span id="L-5999"><a href="#L-5999"><span class="linenos">5999</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_primary_key_part</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6000"><a href="#L-6000"><span class="linenos">6000</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
</span><span id="L-6001"><a href="#L-6001"><span class="linenos">6001</span></a>
</span><span id="L-6002"><a href="#L-6002"><span class="linenos">6002</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_period_for_system_time</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">]:</span>
</span><span id="L-6003"><a href="#L-6003"><span class="linenos">6003</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
</span><span id="L-6004"><a href="#L-6004"><span class="linenos">6004</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-6005"><a href="#L-6005"><span class="linenos">6005</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-6006"><a href="#L-6006"><span class="linenos">6006</span></a>
</span><span id="L-6007"><a href="#L-6007"><span class="linenos">6007</span></a> <span class="n">id_vars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
</span><span id="L-6008"><a href="#L-6008"><span class="linenos">6008</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6009"><a href="#L-6009"><span class="linenos">6009</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">,</span>
</span><span id="L-6010"><a href="#L-6010"><span class="linenos">6010</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="L-6011"><a href="#L-6011"><span class="linenos">6011</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="L-6012"><a href="#L-6012"><span class="linenos">6012</span></a> <span class="p">)</span>
</span><span id="L-6013"><a href="#L-6013"><span class="linenos">6013</span></a>
</span><span id="L-6014"><a href="#L-6014"><span class="linenos">6014</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_primary_key</span><span class="p">(</span>
</span><span id="L-6015"><a href="#L-6015"><span class="linenos">6015</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</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="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-6016"><a href="#L-6016"><span class="linenos">6016</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
</span><span id="L-6017"><a href="#L-6017"><span class="linenos">6017</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-6018"><a href="#L-6018"><span class="linenos">6018</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">))</span>
</span><span id="L-6019"><a href="#L-6019"><span class="linenos">6019</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span>
</span><span id="L-6020"><a href="#L-6020"><span class="linenos">6020</span></a> <span class="p">)</span>
</span><span id="L-6021"><a href="#L-6021"><span class="linenos">6021</span></a>
</span><span id="L-6022"><a href="#L-6022"><span class="linenos">6022</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-6023"><a href="#L-6023"><span class="linenos">6023</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">)</span>
</span><span id="L-6024"><a href="#L-6024"><span class="linenos">6024</span></a>
</span><span id="L-6025"><a href="#L-6025"><span class="linenos">6025</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span>
</span><span id="L-6026"><a href="#L-6026"><span class="linenos">6026</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key_part</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span>
</span><span id="L-6027"><a href="#L-6027"><span class="linenos">6027</span></a> <span class="p">)</span>
</span><span id="L-6028"><a href="#L-6028"><span class="linenos">6028</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
</span><span id="L-6029"><a href="#L-6029"><span class="linenos">6029</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
</span><span id="L-6030"><a href="#L-6030"><span class="linenos">6030</span></a>
</span><span id="L-6031"><a href="#L-6031"><span class="linenos">6031</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_bracket_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">is_map</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">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-6032"><a href="#L-6032"><span class="linenos">6032</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span> <span class="n">explicit</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="L-6033"><a href="#L-6033"><span class="linenos">6033</span></a>
</span><span id="L-6034"><a href="#L-6034"><span class="linenos">6034</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_odbc_datetime_literal</span><span class="p">(</span><span class="bp">self</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-6035"><a href="#L-6035"><span class="linenos">6035</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-6036"><a href="#L-6036"><span class="linenos">6036</span></a><span class="sd"> Parses a datetime column in ODBC format. We parse the column into the corresponding</span>
</span><span id="L-6037"><a href="#L-6037"><span class="linenos">6037</span></a><span class="sd"> types, for example `{d&#39;yyyy-mm-dd&#39;}` will be parsed as a `Date` column, exactly the</span>
</span><span id="L-6038"><a href="#L-6038"><span class="linenos">6038</span></a><span class="sd"> same as we did for `DATE(&#39;yyyy-mm-dd&#39;)`.</span>
</span><span id="L-6039"><a href="#L-6039"><span class="linenos">6039</span></a>
</span><span id="L-6040"><a href="#L-6040"><span class="linenos">6040</span></a><span class="sd"> Reference:</span>
</span><span id="L-6041"><a href="#L-6041"><span class="linenos">6041</span></a><span class="sd"> https://learn.microsoft.com/en-us/sql/odbc/reference/develop-app/date-time-and-timestamp-literals</span>
</span><span id="L-6042"><a href="#L-6042"><span class="linenos">6042</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-6043"><a href="#L-6043"><span class="linenos">6043</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
</span><span id="L-6044"><a href="#L-6044"><span class="linenos">6044</span></a> <span class="n">exp_class</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ODBC_DATETIME_LITERALS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span>
</span><span id="L-6045"><a href="#L-6045"><span class="linenos">6045</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp_class</span><span class="o">=</span><span class="n">exp_class</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
</span><span id="L-6046"><a href="#L-6046"><span class="linenos">6046</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">):</span>
</span><span id="L-6047"><a href="#L-6047"><span class="linenos">6047</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected }&quot;</span><span class="p">)</span>
</span><span id="L-6048"><a href="#L-6048"><span class="linenos">6048</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="L-6049"><a href="#L-6049"><span class="linenos">6049</span></a>
</span><span id="L-6050"><a href="#L-6050"><span class="linenos">6050</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_bracket</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">=</span> <span class="kc">None</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6051"><a href="#L-6051"><span class="linenos">6051</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)):</span>
</span><span id="L-6052"><a href="#L-6052"><span class="linenos">6052</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-6053"><a href="#L-6053"><span class="linenos">6053</span></a>
</span><span id="L-6054"><a href="#L-6054"><span class="linenos">6054</span></a> <span class="n">bracket_kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="L-6055"><a href="#L-6055"><span class="linenos">6055</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="L-6056"><a href="#L-6056"><span class="linenos">6056</span></a> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span>
</span><span id="L-6057"><a href="#L-6057"><span class="linenos">6057</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="L-6058"><a href="#L-6058"><span class="linenos">6058</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
</span><span id="L-6059"><a href="#L-6059"><span class="linenos">6059</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ODBC_DATETIME_LITERALS</span>
</span><span id="L-6060"><a href="#L-6060"><span class="linenos">6060</span></a> <span class="p">):</span>
</span><span id="L-6061"><a href="#L-6061"><span class="linenos">6061</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_odbc_datetime_literal</span><span class="p">()</span>
</span><span id="L-6062"><a href="#L-6062"><span class="linenos">6062</span></a>
</span><span id="L-6063"><a href="#L-6063"><span class="linenos">6063</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="L-6064"><a href="#L-6064"><span class="linenos">6064</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket_key_value</span><span class="p">(</span><span class="n">is_map</span><span class="o">=</span><span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
</span><span id="L-6065"><a href="#L-6065"><span class="linenos">6065</span></a> <span class="p">)</span>
</span><span id="L-6066"><a href="#L-6066"><span class="linenos">6066</span></a>
</span><span id="L-6067"><a href="#L-6067"><span class="linenos">6067</span></a> <span class="k">if</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">):</span>
</span><span id="L-6068"><a href="#L-6068"><span class="linenos">6068</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected ]&quot;</span><span class="p">)</span>
</span><span id="L-6069"><a href="#L-6069"><span class="linenos">6069</span></a> <span class="k">elif</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">):</span>
</span><span id="L-6070"><a href="#L-6070"><span class="linenos">6070</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected }&quot;</span><span class="p">)</span>
</span><span id="L-6071"><a href="#L-6071"><span class="linenos">6071</span></a>
</span><span id="L-6072"><a href="#L-6072"><span class="linenos">6072</span></a> <span class="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
</span><span id="L-6073"><a href="#L-6073"><span class="linenos">6073</span></a> <span class="k">if</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
</span><span id="L-6074"><a href="#L-6074"><span class="linenos">6074</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_kv_to_prop_eq</span><span class="p">(</span><span class="n">expressions</span><span class="p">))</span>
</span><span id="L-6075"><a href="#L-6075"><span class="linenos">6075</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="L-6076"><a href="#L-6076"><span class="linenos">6076</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">build_array_constructor</span><span class="p">(</span>
</span><span id="L-6077"><a href="#L-6077"><span class="linenos">6077</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">bracket_kind</span><span class="o">=</span><span class="n">bracket_kind</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
</span><span id="L-6078"><a href="#L-6078"><span class="linenos">6078</span></a> <span class="p">)</span>
</span><span id="L-6079"><a href="#L-6079"><span class="linenos">6079</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6080"><a href="#L-6080"><span class="linenos">6080</span></a> <span class="n">constructor_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ARRAY_CONSTRUCTORS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-6081"><a href="#L-6081"><span class="linenos">6081</span></a> <span class="k">if</span> <span class="n">constructor_type</span><span class="p">:</span>
</span><span id="L-6082"><a href="#L-6082"><span class="linenos">6082</span></a> <span class="k">return</span> <span class="n">build_array_constructor</span><span class="p">(</span>
</span><span id="L-6083"><a href="#L-6083"><span class="linenos">6083</span></a> <span class="n">constructor_type</span><span class="p">,</span>
</span><span id="L-6084"><a href="#L-6084"><span class="linenos">6084</span></a> <span class="n">args</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-6085"><a href="#L-6085"><span class="linenos">6085</span></a> <span class="n">bracket_kind</span><span class="o">=</span><span class="n">bracket_kind</span><span class="p">,</span>
</span><span id="L-6086"><a href="#L-6086"><span class="linenos">6086</span></a> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
</span><span id="L-6087"><a href="#L-6087"><span class="linenos">6087</span></a> <span class="p">)</span>
</span><span id="L-6088"><a href="#L-6088"><span class="linenos">6088</span></a>
</span><span id="L-6089"><a href="#L-6089"><span class="linenos">6089</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</span><span class="p">)</span>
</span><span id="L-6090"><a href="#L-6090"><span class="linenos">6090</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Bracket</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-6091"><a href="#L-6091"><span class="linenos">6091</span></a>
</span><span id="L-6092"><a href="#L-6092"><span class="linenos">6092</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-6093"><a href="#L-6093"><span class="linenos">6093</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-6094"><a href="#L-6094"><span class="linenos">6094</span></a>
</span><span id="L-6095"><a href="#L-6095"><span class="linenos">6095</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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-6096"><a href="#L-6096"><span class="linenos">6096</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">):</span>
</span><span id="L-6097"><a href="#L-6097"><span class="linenos">6097</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Slice</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="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">())</span>
</span><span id="L-6098"><a href="#L-6098"><span class="linenos">6098</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-6099"><a href="#L-6099"><span class="linenos">6099</span></a>
</span><span id="L-6100"><a href="#L-6100"><span class="linenos">6100</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_case</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6101"><a href="#L-6101"><span class="linenos">6101</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-6102"><a href="#L-6102"><span class="linenos">6102</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6103"><a href="#L-6103"><span class="linenos">6103</span></a>
</span><span id="L-6104"><a href="#L-6104"><span class="linenos">6104</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="L-6105"><a href="#L-6105"><span class="linenos">6105</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-6106"><a href="#L-6106"><span class="linenos">6106</span></a>
</span><span id="L-6107"><a href="#L-6107"><span class="linenos">6107</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
</span><span id="L-6108"><a href="#L-6108"><span class="linenos">6108</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-6109"><a href="#L-6109"><span class="linenos">6109</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
</span><span id="L-6110"><a href="#L-6110"><span class="linenos">6110</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-6111"><a href="#L-6111"><span class="linenos">6111</span></a> <span class="n">ifs</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">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="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">then</span><span class="p">))</span>
</span><span id="L-6112"><a href="#L-6112"><span class="linenos">6112</span></a>
</span><span id="L-6113"><a href="#L-6113"><span class="linenos">6113</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">):</span>
</span><span id="L-6114"><a href="#L-6114"><span class="linenos">6114</span></a> <span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-6115"><a href="#L-6115"><span class="linenos">6115</span></a>
</span><span id="L-6116"><a href="#L-6116"><span class="linenos">6116</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">):</span>
</span><span id="L-6117"><a href="#L-6117"><span class="linenos">6117</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="ow">and</span> <span class="n">default</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;END&quot;</span><span class="p">:</span>
</span><span id="L-6118"><a href="#L-6118"><span class="linenos">6118</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;interval&quot;</span><span class="p">)</span>
</span><span id="L-6119"><a href="#L-6119"><span class="linenos">6119</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6120"><a href="#L-6120"><span class="linenos">6120</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected END after CASE&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-6121"><a href="#L-6121"><span class="linenos">6121</span></a>
</span><span id="L-6122"><a href="#L-6122"><span class="linenos">6122</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6123"><a href="#L-6123"><span class="linenos">6123</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span>
</span><span id="L-6124"><a href="#L-6124"><span class="linenos">6124</span></a> <span class="p">)</span>
</span><span id="L-6125"><a href="#L-6125"><span class="linenos">6125</span></a>
</span><span id="L-6126"><a href="#L-6126"><span class="linenos">6126</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_if</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6127"><a href="#L-6127"><span class="linenos">6127</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-6128"><a href="#L-6128"><span class="linenos">6128</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span>
</span><span id="L-6129"><a href="#L-6129"><span class="linenos">6129</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
</span><span id="L-6130"><a href="#L-6130"><span class="linenos">6130</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-6131"><a href="#L-6131"><span class="linenos">6131</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6132"><a href="#L-6132"><span class="linenos">6132</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
</span><span id="L-6133"><a href="#L-6133"><span class="linenos">6133</span></a>
</span><span id="L-6134"><a href="#L-6134"><span class="linenos">6134</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_IF_COMMANDS</span> <span class="ow">and</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-6135"><a href="#L-6135"><span class="linenos">6135</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-6136"><a href="#L-6136"><span class="linenos">6136</span></a>
</span><span id="L-6137"><a href="#L-6137"><span class="linenos">6137</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-6138"><a href="#L-6138"><span class="linenos">6138</span></a>
</span><span id="L-6139"><a href="#L-6139"><span class="linenos">6139</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">condition</span><span class="p">:</span>
</span><span id="L-6140"><a href="#L-6140"><span class="linenos">6140</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-6141"><a href="#L-6141"><span class="linenos">6141</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-6142"><a href="#L-6142"><span class="linenos">6142</span></a>
</span><span id="L-6143"><a href="#L-6143"><span class="linenos">6143</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
</span><span id="L-6144"><a href="#L-6144"><span class="linenos">6144</span></a> <span class="n">true</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-6145"><a href="#L-6145"><span class="linenos">6145</span></a> <span class="n">false</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-6146"><a href="#L-6146"><span class="linenos">6146</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
</span><span id="L-6147"><a href="#L-6147"><span class="linenos">6147</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">true</span><span class="p">,</span> <span class="n">false</span><span class="o">=</span><span class="n">false</span><span class="p">)</span>
</span><span id="L-6148"><a href="#L-6148"><span class="linenos">6148</span></a>
</span><span id="L-6149"><a href="#L-6149"><span class="linenos">6149</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-6150"><a href="#L-6150"><span class="linenos">6150</span></a>
</span><span id="L-6151"><a href="#L-6151"><span class="linenos">6151</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_next_value_for</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6152"><a href="#L-6152"><span class="linenos">6152</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
</span><span id="L-6153"><a href="#L-6153"><span class="linenos">6153</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-6154"><a href="#L-6154"><span class="linenos">6154</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-6155"><a href="#L-6155"><span class="linenos">6155</span></a>
</span><span id="L-6156"><a href="#L-6156"><span class="linenos">6156</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6157"><a href="#L-6157"><span class="linenos">6157</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
</span><span id="L-6158"><a href="#L-6158"><span class="linenos">6158</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
</span><span id="L-6159"><a href="#L-6159"><span class="linenos">6159</span></a> <span class="n">order</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OVER</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">),</span>
</span><span id="L-6160"><a href="#L-6160"><span class="linenos">6160</span></a> <span class="p">)</span>
</span><span id="L-6161"><a href="#L-6161"><span class="linenos">6161</span></a>
</span><span id="L-6162"><a href="#L-6162"><span class="linenos">6162</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_extract</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">:</span>
</span><span id="L-6163"><a href="#L-6163"><span class="linenos">6163</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-6164"><a href="#L-6164"><span class="linenos">6164</span></a>
</span><span id="L-6165"><a href="#L-6165"><span class="linenos">6165</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
</span><span id="L-6166"><a href="#L-6166"><span class="linenos">6166</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Extract</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-6167"><a href="#L-6167"><span class="linenos">6167</span></a>
</span><span id="L-6168"><a href="#L-6168"><span class="linenos">6168</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="L-6169"><a href="#L-6169"><span class="linenos">6169</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected FROM or comma after EXTRACT&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-6170"><a href="#L-6170"><span class="linenos">6170</span></a>
</span><span id="L-6171"><a href="#L-6171"><span class="linenos">6171</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Extract</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-6172"><a href="#L-6172"><span class="linenos">6172</span></a>
</span><span id="L-6173"><a href="#L-6173"><span class="linenos">6173</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_gap_fill</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GapFill</span><span class="p">:</span>
</span><span id="L-6174"><a href="#L-6174"><span class="linenos">6174</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="L-6175"><a href="#L-6175"><span class="linenos">6175</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="L-6176"><a href="#L-6176"><span class="linenos">6176</span></a>
</span><span id="L-6177"><a href="#L-6177"><span class="linenos">6177</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="L-6178"><a href="#L-6178"><span class="linenos">6178</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">)]</span>
</span><span id="L-6179"><a href="#L-6179"><span class="linenos">6179</span></a>
</span><span id="L-6180"><a href="#L-6180"><span class="linenos">6180</span></a> <span class="n">gap_fill</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">GapFill</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-6181"><a href="#L-6181"><span class="linenos">6181</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">gap_fill</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
</span><span id="L-6182"><a href="#L-6182"><span class="linenos">6182</span></a>
</span><span id="L-6183"><a href="#L-6183"><span class="linenos">6183</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">safe</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="p">]</span> <span class="o">=</span> <span class="kc">None</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-6184"><a href="#L-6184"><span class="linenos">6184</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-6185"><a href="#L-6185"><span class="linenos">6185</span></a>
</span><span id="L-6186"><a href="#L-6186"><span class="linenos">6186</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
</span><span id="L-6187"><a href="#L-6187"><span class="linenos">6187</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="L-6188"><a href="#L-6188"><span class="linenos">6188</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</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">to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
</span><span id="L-6189"><a href="#L-6189"><span class="linenos">6189</span></a>
</span><span id="L-6190"><a href="#L-6190"><span class="linenos">6190</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected AS after CAST&quot;</span><span class="p">)</span>
</span><span id="L-6191"><a href="#L-6191"><span class="linenos">6191</span></a>
</span><span id="L-6192"><a href="#L-6192"><span class="linenos">6192</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6193"><a href="#L-6193"><span class="linenos">6193</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="L-6194"><a href="#L-6194"><span class="linenos">6194</span></a>
</span><span id="L-6195"><a href="#L-6195"><span class="linenos">6195</span></a> <span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">)</span>
</span><span id="L-6196"><a href="#L-6196"><span class="linenos">6196</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
</span><span id="L-6197"><a href="#L-6197"><span class="linenos">6197</span></a> <span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-6198"><a href="#L-6198"><span class="linenos">6198</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONVERSION&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">)</span>
</span><span id="L-6199"><a href="#L-6199"><span class="linenos">6199</span></a>
</span><span id="L-6200"><a href="#L-6200"><span class="linenos">6200</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)):</span>
</span><span id="L-6201"><a href="#L-6201"><span class="linenos">6201</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-6202"><a href="#L-6202"><span class="linenos">6202</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
</span><span id="L-6203"><a href="#L-6203"><span class="linenos">6203</span></a>
</span><span id="L-6204"><a href="#L-6204"><span class="linenos">6204</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
</span><span id="L-6205"><a href="#L-6205"><span class="linenos">6205</span></a> <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">build</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
</span><span id="L-6206"><a href="#L-6206"><span class="linenos">6206</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
</span><span id="L-6207"><a href="#L-6207"><span class="linenos">6207</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6208"><a href="#L-6208"><span class="linenos">6208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</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">DATE</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
</span><span id="L-6209"><a href="#L-6209"><span class="linenos">6209</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-6210"><a href="#L-6210"><span class="linenos">6210</span></a> <span class="nb">format</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><span id="L-6211"><a href="#L-6211"><span class="linenos">6211</span></a> <span class="n">format_time</span><span class="p">(</span>
</span><span id="L-6212"><a href="#L-6212"><span class="linenos">6212</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
</span><span id="L-6213"><a href="#L-6213"><span class="linenos">6213</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
</span><span id="L-6214"><a href="#L-6214"><span class="linenos">6214</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">,</span>
</span><span id="L-6215"><a href="#L-6215"><span class="linenos">6215</span></a> <span class="p">)</span>
</span><span id="L-6216"><a href="#L-6216"><span class="linenos">6216</span></a> <span class="p">),</span>
</span><span id="L-6217"><a href="#L-6217"><span class="linenos">6217</span></a> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">,</span>
</span><span id="L-6218"><a href="#L-6218"><span class="linenos">6218</span></a> <span class="p">)</span>
</span><span id="L-6219"><a href="#L-6219"><span class="linenos">6219</span></a>
</span><span id="L-6220"><a href="#L-6220"><span class="linenos">6220</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</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">StrToTime</span><span class="p">):</span>
</span><span id="L-6221"><a href="#L-6221"><span class="linenos">6221</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
</span><span id="L-6222"><a href="#L-6222"><span class="linenos">6222</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-6223"><a href="#L-6223"><span class="linenos">6223</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
</span><span id="L-6224"><a href="#L-6224"><span class="linenos">6224</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected TYPE after CAST&quot;</span><span class="p">)</span>
</span><span id="L-6225"><a href="#L-6225"><span class="linenos">6225</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to</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-6226"><a href="#L-6226"><span class="linenos">6226</span></a> <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">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-6227"><a href="#L-6227"><span class="linenos">6227</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</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">CHAR</span><span class="p">:</span>
</span><span id="L-6228"><a href="#L-6228"><span class="linenos">6228</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CHARACTER_SET</span><span class="p">):</span>
</span><span id="L-6229"><a href="#L-6229"><span class="linenos">6229</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">())</span>
</span><span id="L-6230"><a href="#L-6230"><span class="linenos">6230</span></a>
</span><span id="L-6231"><a href="#L-6231"><span class="linenos">6231</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6232"><a href="#L-6232"><span class="linenos">6232</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
</span><span id="L-6233"><a href="#L-6233"><span class="linenos">6233</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-6234"><a href="#L-6234"><span class="linenos">6234</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
</span><span id="L-6235"><a href="#L-6235"><span class="linenos">6235</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">,</span>
</span><span id="L-6236"><a href="#L-6236"><span class="linenos">6236</span></a> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">,</span>
</span><span id="L-6237"><a href="#L-6237"><span class="linenos">6237</span></a> <span class="n">action</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CAST_ACTIONS</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="L-6238"><a href="#L-6238"><span class="linenos">6238</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
</span><span id="L-6239"><a href="#L-6239"><span class="linenos">6239</span></a> <span class="p">)</span>
</span><span id="L-6240"><a href="#L-6240"><span class="linenos">6240</span></a>
</span><span id="L-6241"><a href="#L-6241"><span class="linenos">6241</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_string_agg</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span>
</span><span id="L-6242"><a href="#L-6242"><span class="linenos">6242</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
</span><span id="L-6243"><a href="#L-6243"><span class="linenos">6243</span></a> <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="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 class="o">=</span> <span class="p">[</span>
</span><span id="L-6244"><a href="#L-6244"><span class="linenos">6244</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()])</span>
</span><span id="L-6245"><a href="#L-6245"><span class="linenos">6245</span></a> <span class="p">]</span>
</span><span id="L-6246"><a href="#L-6246"><span class="linenos">6246</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="L-6247"><a href="#L-6247"><span class="linenos">6247</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">))</span>
</span><span id="L-6248"><a href="#L-6248"><span class="linenos">6248</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6249"><a href="#L-6249"><span class="linenos">6249</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="L-6250"><a href="#L-6250"><span class="linenos">6250</span></a>
</span><span id="L-6251"><a href="#L-6251"><span class="linenos">6251</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;OVERFLOW&quot;</span><span class="p">):</span>
</span><span id="L-6252"><a href="#L-6252"><span class="linenos">6252</span></a> <span class="c1"># trino: LISTAGG(expression [, separator] [ON OVERFLOW overflow_behavior])</span>
</span><span id="L-6253"><a href="#L-6253"><span class="linenos">6253</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">):</span>
</span><span id="L-6254"><a href="#L-6254"><span class="linenos">6254</span></a> <span class="n">on_overflow</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 class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">)</span>
</span><span id="L-6255"><a href="#L-6255"><span class="linenos">6255</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6256"><a href="#L-6256"><span class="linenos">6256</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRUNCATE&quot;</span><span class="p">)</span>
</span><span id="L-6257"><a href="#L-6257"><span class="linenos">6257</span></a> <span class="n">on_overflow</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6258"><a href="#L-6258"><span class="linenos">6258</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OverflowTruncateBehavior</span><span class="p">,</span>
</span><span id="L-6259"><a href="#L-6259"><span class="linenos">6259</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="L-6260"><a href="#L-6260"><span class="linenos">6260</span></a> <span class="n">with_count</span><span class="o">=</span><span class="p">(</span>
</span><span id="L-6261"><a href="#L-6261"><span class="linenos">6261</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;COUNT&quot;</span><span class="p">)</span>
</span><span id="L-6262"><a href="#L-6262"><span class="linenos">6262</span></a> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;COUNT&quot;</span><span class="p">)</span>
</span><span id="L-6263"><a href="#L-6263"><span class="linenos">6263</span></a> <span class="p">),</span>
</span><span id="L-6264"><a href="#L-6264"><span class="linenos">6264</span></a> <span class="p">)</span>
</span><span id="L-6265"><a href="#L-6265"><span class="linenos">6265</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6266"><a href="#L-6266"><span class="linenos">6266</span></a> <span class="n">on_overflow</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6267"><a href="#L-6267"><span class="linenos">6267</span></a>
</span><span id="L-6268"><a href="#L-6268"><span class="linenos">6268</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-6269"><a href="#L-6269"><span class="linenos">6269</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
</span><span id="L-6270"><a href="#L-6270"><span class="linenos">6270</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
</span><span id="L-6271"><a href="#L-6271"><span class="linenos">6271</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
</span><span id="L-6272"><a href="#L-6272"><span class="linenos">6272</span></a> <span class="c1"># The order is parsed through `this` as a canonicalization for WITHIN GROUPs</span>
</span><span id="L-6273"><a href="#L-6273"><span class="linenos">6273</span></a> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><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><span id="L-6274"><a href="#L-6274"><span class="linenos">6274</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span> <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">separator</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-6275"><a href="#L-6275"><span class="linenos">6275</span></a>
</span><span id="L-6276"><a href="#L-6276"><span class="linenos">6276</span></a> <span class="c1"># Checks if we can parse an order clause: WITHIN GROUP (ORDER BY &lt;order_by_expression_list&gt; [ASC | DESC]).</span>
</span><span id="L-6277"><a href="#L-6277"><span class="linenos">6277</span></a> <span class="c1"># This is done &quot;manually&quot;, instead of letting _parse_window parse it into an exp.WithinGroup node, so that</span>
</span><span id="L-6278"><a href="#L-6278"><span class="linenos">6278</span></a> <span class="c1"># the STRING_AGG call is parsed like in MySQL / SQLite and can thus be transpiled more easily to them.</span>
</span><span id="L-6279"><a href="#L-6279"><span class="linenos">6279</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
</span><span id="L-6280"><a href="#L-6280"><span class="linenos">6280</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-6281"><a href="#L-6281"><span class="linenos">6281</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
</span><span id="L-6282"><a href="#L-6282"><span class="linenos">6282</span></a>
</span><span id="L-6283"><a href="#L-6283"><span class="linenos">6283</span></a> <span class="c1"># The corresponding match_r_paren will be called in parse_function (caller)</span>
</span><span id="L-6284"><a href="#L-6284"><span class="linenos">6284</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="L-6285"><a href="#L-6285"><span class="linenos">6285</span></a>
</span><span id="L-6286"><a href="#L-6286"><span class="linenos">6286</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6287"><a href="#L-6287"><span class="linenos">6287</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span>
</span><span id="L-6288"><a href="#L-6288"><span class="linenos">6288</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</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><span id="L-6289"><a href="#L-6289"><span class="linenos">6289</span></a> <span class="n">separator</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-6290"><a href="#L-6290"><span class="linenos">6290</span></a> <span class="n">on_overflow</span><span class="o">=</span><span class="n">on_overflow</span><span class="p">,</span>
</span><span id="L-6291"><a href="#L-6291"><span class="linenos">6291</span></a> <span class="p">)</span>
</span><span id="L-6292"><a href="#L-6292"><span class="linenos">6292</span></a>
</span><span id="L-6293"><a href="#L-6293"><span class="linenos">6293</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_convert</span><span class="p">(</span>
</span><span id="L-6294"><a href="#L-6294"><span class="linenos">6294</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">safe</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="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6295"><a href="#L-6295"><span class="linenos">6295</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-6296"><a href="#L-6296"><span class="linenos">6296</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-6297"><a href="#L-6297"><span class="linenos">6297</span></a>
</span><span id="L-6298"><a href="#L-6298"><span class="linenos">6298</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
</span><span id="L-6299"><a href="#L-6299"><span class="linenos">6299</span></a> <span class="n">to</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 class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6300"><a href="#L-6300"><span class="linenos">6300</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
</span><span id="L-6301"><a href="#L-6301"><span class="linenos">6301</span></a> <span class="p">)</span>
</span><span id="L-6302"><a href="#L-6302"><span class="linenos">6302</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="L-6303"><a href="#L-6303"><span class="linenos">6303</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="L-6304"><a href="#L-6304"><span class="linenos">6304</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6305"><a href="#L-6305"><span class="linenos">6305</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6306"><a href="#L-6306"><span class="linenos">6306</span></a>
</span><span id="L-6307"><a href="#L-6307"><span class="linenos">6307</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</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">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
</span><span id="L-6308"><a href="#L-6308"><span class="linenos">6308</span></a>
</span><span id="L-6309"><a href="#L-6309"><span class="linenos">6309</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_xml_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">:</span>
</span><span id="L-6310"><a href="#L-6310"><span class="linenos">6310</span></a> <span class="n">namespaces</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6311"><a href="#L-6311"><span class="linenos">6311</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6312"><a href="#L-6312"><span class="linenos">6312</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6313"><a href="#L-6313"><span class="linenos">6313</span></a>
</span><span id="L-6314"><a href="#L-6314"><span class="linenos">6314</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;XMLNAMESPACES&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">):</span>
</span><span id="L-6315"><a href="#L-6315"><span class="linenos">6315</span></a> <span class="n">namespaces</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_xml_namespace</span><span class="p">()</span>
</span><span id="L-6316"><a href="#L-6316"><span class="linenos">6316</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="s2">&quot;,&quot;</span><span class="p">)</span>
</span><span id="L-6317"><a href="#L-6317"><span class="linenos">6317</span></a>
</span><span id="L-6318"><a href="#L-6318"><span class="linenos">6318</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-6319"><a href="#L-6319"><span class="linenos">6319</span></a>
</span><span id="L-6320"><a href="#L-6320"><span class="linenos">6320</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PASSING&quot;</span><span class="p">):</span>
</span><span id="L-6321"><a href="#L-6321"><span class="linenos">6321</span></a> <span class="c1"># The BY VALUE keywords are optional and are provided for semantic clarity</span>
</span><span id="L-6322"><a href="#L-6322"><span class="linenos">6322</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
</span><span id="L-6323"><a href="#L-6323"><span class="linenos">6323</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="L-6324"><a href="#L-6324"><span class="linenos">6324</span></a>
</span><span id="L-6325"><a href="#L-6325"><span class="linenos">6325</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">,</span> <span class="s2">&quot;SEQUENCE&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;REF&quot;</span><span class="p">)</span>
</span><span id="L-6326"><a href="#L-6326"><span class="linenos">6326</span></a>
</span><span id="L-6327"><a href="#L-6327"><span class="linenos">6327</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">):</span>
</span><span id="L-6328"><a href="#L-6328"><span class="linenos">6328</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">)</span>
</span><span id="L-6329"><a href="#L-6329"><span class="linenos">6329</span></a>
</span><span id="L-6330"><a href="#L-6330"><span class="linenos">6330</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6331"><a href="#L-6331"><span class="linenos">6331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">,</span>
</span><span id="L-6332"><a href="#L-6332"><span class="linenos">6332</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-6333"><a href="#L-6333"><span class="linenos">6333</span></a> <span class="n">namespaces</span><span class="o">=</span><span class="n">namespaces</span><span class="p">,</span>
</span><span id="L-6334"><a href="#L-6334"><span class="linenos">6334</span></a> <span class="n">passing</span><span class="o">=</span><span class="n">passing</span><span class="p">,</span>
</span><span id="L-6335"><a href="#L-6335"><span class="linenos">6335</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
</span><span id="L-6336"><a href="#L-6336"><span class="linenos">6336</span></a> <span class="n">by_ref</span><span class="o">=</span><span class="n">by_ref</span><span class="p">,</span>
</span><span id="L-6337"><a href="#L-6337"><span class="linenos">6337</span></a> <span class="p">)</span>
</span><span id="L-6338"><a href="#L-6338"><span class="linenos">6338</span></a>
</span><span id="L-6339"><a href="#L-6339"><span class="linenos">6339</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_xml_namespace</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">XMLNamespace</span><span class="p">]:</span>
</span><span id="L-6340"><a href="#L-6340"><span class="linenos">6340</span></a> <span class="n">namespaces</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-6341"><a href="#L-6341"><span class="linenos">6341</span></a>
</span><span id="L-6342"><a href="#L-6342"><span class="linenos">6342</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-6343"><a href="#L-6343"><span class="linenos">6343</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="L-6344"><a href="#L-6344"><span class="linenos">6344</span></a> <span class="n">uri</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-6345"><a href="#L-6345"><span class="linenos">6345</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6346"><a href="#L-6346"><span class="linenos">6346</span></a> <span class="n">uri</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
</span><span id="L-6347"><a href="#L-6347"><span class="linenos">6347</span></a> <span class="n">namespaces</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">XMLNamespace</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">uri</span><span class="p">))</span>
</span><span id="L-6348"><a href="#L-6348"><span class="linenos">6348</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="L-6349"><a href="#L-6349"><span class="linenos">6349</span></a> <span class="k">break</span>
</span><span id="L-6350"><a href="#L-6350"><span class="linenos">6350</span></a>
</span><span id="L-6351"><a href="#L-6351"><span class="linenos">6351</span></a> <span class="k">return</span> <span class="n">namespaces</span>
</span><span id="L-6352"><a href="#L-6352"><span class="linenos">6352</span></a>
</span><span id="L-6353"><a href="#L-6353"><span class="linenos">6353</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_decode</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
</span><span id="L-6354"><a href="#L-6354"><span class="linenos">6354</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-6355"><a href="#L-6355"><span class="linenos">6355</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
</span><span id="L-6356"><a href="#L-6356"><span class="linenos">6356</span></a>
</span><span id="L-6357"><a href="#L-6357"><span class="linenos">6357</span></a><span class="sd"> - DECODE(bin, charset)</span>
</span><span id="L-6358"><a href="#L-6358"><span class="linenos">6358</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
</span><span id="L-6359"><a href="#L-6359"><span class="linenos">6359</span></a>
</span><span id="L-6360"><a href="#L-6360"><span class="linenos">6360</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
</span><span id="L-6361"><a href="#L-6361"><span class="linenos">6361</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
</span><span id="L-6362"><a href="#L-6362"><span class="linenos">6362</span></a><span class="sd"> instead of relying on pattern matching.</span>
</span><span id="L-6363"><a href="#L-6363"><span class="linenos">6363</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-6364"><a href="#L-6364"><span class="linenos">6364</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span>
</span><span id="L-6365"><a href="#L-6365"><span class="linenos">6365</span></a>
</span><span id="L-6366"><a href="#L-6366"><span class="linenos">6366</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">3</span><span class="p">:</span>
</span><span id="L-6367"><a href="#L-6367"><span class="linenos">6367</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</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">charset</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-6368"><a href="#L-6368"><span class="linenos">6368</span></a>
</span><span id="L-6369"><a href="#L-6369"><span class="linenos">6369</span></a> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">args</span>
</span><span id="L-6370"><a href="#L-6370"><span class="linenos">6370</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="L-6371"><a href="#L-6371"><span class="linenos">6371</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-6372"><a href="#L-6372"><span class="linenos">6372</span></a>
</span><span id="L-6373"><a href="#L-6373"><span class="linenos">6373</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-6374"><a href="#L-6374"><span class="linenos">6374</span></a> <span class="k">for</span> <span class="n">search</span><span class="p">,</span> <span class="n">result</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">expressions</span><span class="p">[::</span><span class="mi">2</span><span class="p">],</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">::</span><span class="mi">2</span><span class="p">]):</span>
</span><span id="L-6375"><a href="#L-6375"><span class="linenos">6375</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">search</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
</span><span id="L-6376"><a href="#L-6376"><span class="linenos">6376</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-6377"><a href="#L-6377"><span class="linenos">6377</span></a>
</span><span id="L-6378"><a href="#L-6378"><span class="linenos">6378</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
</span><span id="L-6379"><a href="#L-6379"><span class="linenos">6379</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="L-6380"><a href="#L-6380"><span class="linenos">6380</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</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">EQ</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">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
</span><span id="L-6381"><a href="#L-6381"><span class="linenos">6381</span></a> <span class="p">)</span>
</span><span id="L-6382"><a href="#L-6382"><span class="linenos">6382</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">):</span>
</span><span id="L-6383"><a href="#L-6383"><span class="linenos">6383</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="L-6384"><a href="#L-6384"><span class="linenos">6384</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</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">expression</span><span class="o">.</span><span class="n">copy</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 class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
</span><span id="L-6385"><a href="#L-6385"><span class="linenos">6385</span></a> <span class="p">)</span>
</span><span id="L-6386"><a href="#L-6386"><span class="linenos">6386</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6387"><a href="#L-6387"><span class="linenos">6387</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
</span><span id="L-6388"><a href="#L-6388"><span class="linenos">6388</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</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">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span>
</span><span id="L-6389"><a href="#L-6389"><span class="linenos">6389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
</span><span id="L-6390"><a href="#L-6390"><span class="linenos">6390</span></a> <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">expression</span><span class="o">.</span><span class="n">copy</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-6391"><a href="#L-6391"><span class="linenos">6391</span></a> <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">search</span><span class="o">.</span><span class="n">copy</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-6392"><a href="#L-6392"><span class="linenos">6392</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="L-6393"><a href="#L-6393"><span class="linenos">6393</span></a> <span class="p">),</span>
</span><span id="L-6394"><a href="#L-6394"><span class="linenos">6394</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="L-6395"><a href="#L-6395"><span class="linenos">6395</span></a> <span class="p">)</span>
</span><span id="L-6396"><a href="#L-6396"><span class="linenos">6396</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</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="n">this</span><span class="o">=</span><span class="n">cond</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
</span><span id="L-6397"><a href="#L-6397"><span class="linenos">6397</span></a>
</span><span id="L-6398"><a href="#L-6398"><span class="linenos">6398</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="L-6399"><a href="#L-6399"><span class="linenos">6399</span></a>
</span><span id="L-6400"><a href="#L-6400"><span class="linenos">6400</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_key_value</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">]:</span>
</span><span id="L-6401"><a href="#L-6401"><span class="linenos">6401</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
</span><span id="L-6402"><a href="#L-6402"><span class="linenos">6402</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-6403"><a href="#L-6403"><span class="linenos">6403</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_SEPARATOR_TOKENS</span><span class="p">)</span>
</span><span id="L-6404"><a href="#L-6404"><span class="linenos">6404</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
</span><span id="L-6405"><a href="#L-6405"><span class="linenos">6405</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-6406"><a href="#L-6406"><span class="linenos">6406</span></a>
</span><span id="L-6407"><a href="#L-6407"><span class="linenos">6407</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
</span><span id="L-6408"><a href="#L-6408"><span class="linenos">6408</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-6409"><a href="#L-6409"><span class="linenos">6409</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
</span><span id="L-6410"><a href="#L-6410"><span class="linenos">6410</span></a>
</span><span id="L-6411"><a href="#L-6411"><span class="linenos">6411</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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-6412"><a href="#L-6412"><span class="linenos">6412</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">):</span>
</span><span id="L-6413"><a href="#L-6413"><span class="linenos">6413</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-6414"><a href="#L-6414"><span class="linenos">6414</span></a>
</span><span id="L-6415"><a href="#L-6415"><span class="linenos">6415</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FormatJson</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-6416"><a href="#L-6416"><span class="linenos">6416</span></a>
</span><span id="L-6417"><a href="#L-6417"><span class="linenos">6417</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_on_condition</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">OnCondition</span><span class="p">]:</span>
</span><span id="L-6418"><a href="#L-6418"><span class="linenos">6418</span></a> <span class="c1"># MySQL uses &quot;X ON EMPTY Y ON ERROR&quot; (e.g. JSON_VALUE) while Oracle uses the opposite (e.g. JSON_EXISTS)</span>
</span><span id="L-6419"><a href="#L-6419"><span class="linenos">6419</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ON_CONDITION_EMPTY_BEFORE_ERROR</span><span class="p">:</span>
</span><span id="L-6420"><a href="#L-6420"><span class="linenos">6420</span></a> <span class="n">empty</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ON_CONDITION_TOKENS</span><span class="p">)</span>
</span><span id="L-6421"><a href="#L-6421"><span class="linenos">6421</span></a> <span class="n">error</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ON_CONDITION_TOKENS</span><span class="p">)</span>
</span><span id="L-6422"><a href="#L-6422"><span class="linenos">6422</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6423"><a href="#L-6423"><span class="linenos">6423</span></a> <span class="n">error</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ON_CONDITION_TOKENS</span><span class="p">)</span>
</span><span id="L-6424"><a href="#L-6424"><span class="linenos">6424</span></a> <span class="n">empty</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ON_CONDITION_TOKENS</span><span class="p">)</span>
</span><span id="L-6425"><a href="#L-6425"><span class="linenos">6425</span></a>
</span><span id="L-6426"><a href="#L-6426"><span class="linenos">6426</span></a> <span class="n">null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ON_CONDITION_TOKENS</span><span class="p">)</span>
</span><span id="L-6427"><a href="#L-6427"><span class="linenos">6427</span></a>
</span><span id="L-6428"><a href="#L-6428"><span class="linenos">6428</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">error</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">null</span><span class="p">:</span>
</span><span id="L-6429"><a href="#L-6429"><span class="linenos">6429</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-6430"><a href="#L-6430"><span class="linenos">6430</span></a>
</span><span id="L-6431"><a href="#L-6431"><span class="linenos">6431</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6432"><a href="#L-6432"><span class="linenos">6432</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCondition</span><span class="p">,</span>
</span><span id="L-6433"><a href="#L-6433"><span class="linenos">6433</span></a> <span class="n">empty</span><span class="o">=</span><span class="n">empty</span><span class="p">,</span>
</span><span id="L-6434"><a href="#L-6434"><span class="linenos">6434</span></a> <span class="n">error</span><span class="o">=</span><span class="n">error</span><span class="p">,</span>
</span><span id="L-6435"><a href="#L-6435"><span class="linenos">6435</span></a> <span class="n">null</span><span class="o">=</span><span class="n">null</span><span class="p">,</span>
</span><span id="L-6436"><a href="#L-6436"><span class="linenos">6436</span></a> <span class="p">)</span>
</span><span id="L-6437"><a href="#L-6437"><span class="linenos">6437</span></a>
</span><span id="L-6438"><a href="#L-6438"><span class="linenos">6438</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_on_handling</span><span class="p">(</span>
</span><span id="L-6439"><a href="#L-6439"><span class="linenos">6439</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">on</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">values</span><span class="p">:</span> <span class="nb">str</span>
</span><span id="L-6440"><a href="#L-6440"><span class="linenos">6440</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="nb">str</span><span class="p">]</span> <span class="o">|</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-6441"><a href="#L-6441"><span class="linenos">6441</span></a> <span class="c1"># Parses the &quot;X ON Y&quot; or &quot;DEFAULT &lt;expr&gt; ON Y syntax, e.g. NULL ON NULL (Oracle, T-SQL, MySQL)</span>
</span><span id="L-6442"><a href="#L-6442"><span class="linenos">6442</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
</span><span id="L-6443"><a href="#L-6443"><span class="linenos">6443</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="n">on</span><span class="p">):</span>
</span><span id="L-6444"><a href="#L-6444"><span class="linenos">6444</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2"> ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-6445"><a href="#L-6445"><span class="linenos">6445</span></a>
</span><span id="L-6446"><a href="#L-6446"><span class="linenos">6446</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-6447"><a href="#L-6447"><span class="linenos">6447</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="L-6448"><a href="#L-6448"><span class="linenos">6448</span></a> <span class="n">default_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-6449"><a href="#L-6449"><span class="linenos">6449</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="n">on</span><span class="p">):</span>
</span><span id="L-6450"><a href="#L-6450"><span class="linenos">6450</span></a> <span class="k">return</span> <span class="n">default_value</span>
</span><span id="L-6451"><a href="#L-6451"><span class="linenos">6451</span></a>
</span><span id="L-6452"><a href="#L-6452"><span class="linenos">6452</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-6453"><a href="#L-6453"><span class="linenos">6453</span></a>
</span><span id="L-6454"><a href="#L-6454"><span class="linenos">6454</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-6455"><a href="#L-6455"><span class="linenos">6455</span></a>
</span><span id="L-6456"><a href="#L-6456"><span class="linenos">6456</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
</span><span id="L-6457"><a href="#L-6457"><span class="linenos">6457</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">False</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">:</span> <span class="o">...</span>
</span><span id="L-6458"><a href="#L-6458"><span class="linenos">6458</span></a>
</span><span id="L-6459"><a href="#L-6459"><span class="linenos">6459</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
</span><span id="L-6460"><a href="#L-6460"><span class="linenos">6460</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">True</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">:</span> <span class="o">...</span>
</span><span id="L-6461"><a href="#L-6461"><span class="linenos">6461</span></a>
</span><span id="L-6462"><a href="#L-6462"><span class="linenos">6462</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-6463"><a href="#L-6463"><span class="linenos">6463</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
</span><span id="L-6464"><a href="#L-6464"><span class="linenos">6464</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-6465"><a href="#L-6465"><span class="linenos">6465</span></a> <span class="p">[</span><span class="n">star</span><span class="p">]</span>
</span><span id="L-6466"><a href="#L-6466"><span class="linenos">6466</span></a> <span class="k">if</span> <span class="n">star</span>
</span><span id="L-6467"><a href="#L-6467"><span class="linenos">6467</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</span><span class="p">()))</span>
</span><span id="L-6468"><a href="#L-6468"><span class="linenos">6468</span></a> <span class="p">)</span>
</span><span id="L-6469"><a href="#L-6469"><span class="linenos">6469</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;ABSENT&quot;</span><span class="p">)</span>
</span><span id="L-6470"><a href="#L-6470"><span class="linenos">6470</span></a>
</span><span id="L-6471"><a href="#L-6471"><span class="linenos">6471</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6472"><a href="#L-6472"><span class="linenos">6472</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
</span><span id="L-6473"><a href="#L-6473"><span class="linenos">6473</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-6474"><a href="#L-6474"><span class="linenos">6474</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
</span><span id="L-6475"><a href="#L-6475"><span class="linenos">6475</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-6476"><a href="#L-6476"><span class="linenos">6476</span></a>
</span><span id="L-6477"><a href="#L-6477"><span class="linenos">6477</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEYS&quot;</span><span class="p">)</span>
</span><span id="L-6478"><a href="#L-6478"><span class="linenos">6478</span></a>
</span><span id="L-6479"><a href="#L-6479"><span class="linenos">6479</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span>
</span><span id="L-6480"><a href="#L-6480"><span class="linenos">6480</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="L-6481"><a href="#L-6481"><span class="linenos">6481</span></a> <span class="p">)</span>
</span><span id="L-6482"><a href="#L-6482"><span class="linenos">6482</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENCODING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
</span><span id="L-6483"><a href="#L-6483"><span class="linenos">6483</span></a>
</span><span id="L-6484"><a href="#L-6484"><span class="linenos">6484</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6485"><a href="#L-6485"><span class="linenos">6485</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span> <span class="k">if</span> <span class="n">agg</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
</span><span id="L-6486"><a href="#L-6486"><span class="linenos">6486</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-6487"><a href="#L-6487"><span class="linenos">6487</span></a> <span class="n">null_handling</span><span class="o">=</span><span class="n">null_handling</span><span class="p">,</span>
</span><span id="L-6488"><a href="#L-6488"><span class="linenos">6488</span></a> <span class="n">unique_keys</span><span class="o">=</span><span class="n">unique_keys</span><span class="p">,</span>
</span><span id="L-6489"><a href="#L-6489"><span class="linenos">6489</span></a> <span class="n">return_type</span><span class="o">=</span><span class="n">return_type</span><span class="p">,</span>
</span><span id="L-6490"><a href="#L-6490"><span class="linenos">6490</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
</span><span id="L-6491"><a href="#L-6491"><span class="linenos">6491</span></a> <span class="p">)</span>
</span><span id="L-6492"><a href="#L-6492"><span class="linenos">6492</span></a>
</span><span id="L-6493"><a href="#L-6493"><span class="linenos">6493</span></a> <span class="c1"># Note: this is currently incomplete; it only implements the &quot;JSON_value_column&quot; part</span>
</span><span id="L-6494"><a href="#L-6494"><span class="linenos">6494</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">:</span>
</span><span id="L-6495"><a href="#L-6495"><span class="linenos">6495</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NESTED&quot;</span><span class="p">):</span>
</span><span id="L-6496"><a href="#L-6496"><span class="linenos">6496</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-6497"><a href="#L-6497"><span class="linenos">6497</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-6498"><a href="#L-6498"><span class="linenos">6498</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6499"><a href="#L-6499"><span class="linenos">6499</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6500"><a href="#L-6500"><span class="linenos">6500</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6501"><a href="#L-6501"><span class="linenos">6501</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6502"><a href="#L-6502"><span class="linenos">6502</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-6503"><a href="#L-6503"><span class="linenos">6503</span></a>
</span><span id="L-6504"><a href="#L-6504"><span class="linenos">6504</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATH&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-6505"><a href="#L-6505"><span class="linenos">6505</span></a> <span class="n">nested_schema</span> <span class="o">=</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
</span><span id="L-6506"><a href="#L-6506"><span class="linenos">6506</span></a>
</span><span id="L-6507"><a href="#L-6507"><span class="linenos">6507</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6508"><a href="#L-6508"><span class="linenos">6508</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">,</span>
</span><span id="L-6509"><a href="#L-6509"><span class="linenos">6509</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-6510"><a href="#L-6510"><span class="linenos">6510</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="L-6511"><a href="#L-6511"><span class="linenos">6511</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
</span><span id="L-6512"><a href="#L-6512"><span class="linenos">6512</span></a> <span class="n">nested_schema</span><span class="o">=</span><span class="n">nested_schema</span><span class="p">,</span>
</span><span id="L-6513"><a href="#L-6513"><span class="linenos">6513</span></a> <span class="p">)</span>
</span><span id="L-6514"><a href="#L-6514"><span class="linenos">6514</span></a>
</span><span id="L-6515"><a href="#L-6515"><span class="linenos">6515</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">:</span>
</span><span id="L-6516"><a href="#L-6516"><span class="linenos">6516</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span>
</span><span id="L-6517"><a href="#L-6517"><span class="linenos">6517</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6518"><a href="#L-6518"><span class="linenos">6518</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">,</span>
</span><span id="L-6519"><a href="#L-6519"><span class="linenos">6519</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_column_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="L-6520"><a href="#L-6520"><span class="linenos">6520</span></a> <span class="p">)</span>
</span><span id="L-6521"><a href="#L-6521"><span class="linenos">6521</span></a>
</span><span id="L-6522"><a href="#L-6522"><span class="linenos">6522</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">:</span>
</span><span id="L-6523"><a href="#L-6523"><span class="linenos">6523</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-6524"><a href="#L-6524"><span class="linenos">6524</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-6525"><a href="#L-6525"><span class="linenos">6525</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
</span><span id="L-6526"><a href="#L-6526"><span class="linenos">6526</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
</span><span id="L-6527"><a href="#L-6527"><span class="linenos">6527</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
</span><span id="L-6528"><a href="#L-6528"><span class="linenos">6528</span></a>
</span><span id="L-6529"><a href="#L-6529"><span class="linenos">6529</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">(</span>
</span><span id="L-6530"><a href="#L-6530"><span class="linenos">6530</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-6531"><a href="#L-6531"><span class="linenos">6531</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
</span><span id="L-6532"><a href="#L-6532"><span class="linenos">6532</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
</span><span id="L-6533"><a href="#L-6533"><span class="linenos">6533</span></a> <span class="n">error_handling</span><span class="o">=</span><span class="n">error_handling</span><span class="p">,</span>
</span><span id="L-6534"><a href="#L-6534"><span class="linenos">6534</span></a> <span class="n">empty_handling</span><span class="o">=</span><span class="n">empty_handling</span><span class="p">,</span>
</span><span id="L-6535"><a href="#L-6535"><span class="linenos">6535</span></a> <span class="p">)</span>
</span><span id="L-6536"><a href="#L-6536"><span class="linenos">6536</span></a>
</span><span id="L-6537"><a href="#L-6537"><span class="linenos">6537</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_match_against</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">:</span>
</span><span id="L-6538"><a href="#L-6538"><span class="linenos">6538</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="L-6539"><a href="#L-6539"><span class="linenos">6539</span></a>
</span><span id="L-6540"><a href="#L-6540"><span class="linenos">6540</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="s2">&quot;AGAINST&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">)</span>
</span><span id="L-6541"><a href="#L-6541"><span class="linenos">6541</span></a>
</span><span id="L-6542"><a href="#L-6542"><span class="linenos">6542</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-6543"><a href="#L-6543"><span class="linenos">6543</span></a>
</span><span id="L-6544"><a href="#L-6544"><span class="linenos">6544</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;NATURAL&quot;</span><span class="p">,</span> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
</span><span id="L-6545"><a href="#L-6545"><span class="linenos">6545</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN NATURAL LANGUAGE MODE&quot;</span>
</span><span id="L-6546"><a href="#L-6546"><span class="linenos">6546</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
</span><span id="L-6547"><a href="#L-6547"><span class="linenos">6547</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2"> WITH QUERY EXPANSION&quot;</span>
</span><span id="L-6548"><a href="#L-6548"><span class="linenos">6548</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
</span><span id="L-6549"><a href="#L-6549"><span class="linenos">6549</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
</span><span id="L-6550"><a href="#L-6550"><span class="linenos">6550</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
</span><span id="L-6551"><a href="#L-6551"><span class="linenos">6551</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
</span><span id="L-6552"><a href="#L-6552"><span class="linenos">6552</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6553"><a href="#L-6553"><span class="linenos">6553</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6554"><a href="#L-6554"><span class="linenos">6554</span></a>
</span><span id="L-6555"><a href="#L-6555"><span class="linenos">6555</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6556"><a href="#L-6556"><span class="linenos">6556</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">modifier</span><span class="o">=</span><span class="n">modifier</span>
</span><span id="L-6557"><a href="#L-6557"><span class="linenos">6557</span></a> <span class="p">)</span>
</span><span id="L-6558"><a href="#L-6558"><span class="linenos">6558</span></a>
</span><span id="L-6559"><a href="#L-6559"><span class="linenos">6559</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
</span><span id="L-6560"><a href="#L-6560"><span class="linenos">6560</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_open_json</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">:</span>
</span><span id="L-6561"><a href="#L-6561"><span class="linenos">6561</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-6562"><a href="#L-6562"><span class="linenos">6562</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-6563"><a href="#L-6563"><span class="linenos">6563</span></a>
</span><span id="L-6564"><a href="#L-6564"><span class="linenos">6564</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
</span><span id="L-6565"><a href="#L-6565"><span class="linenos">6565</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-6566"><a href="#L-6566"><span class="linenos">6566</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="L-6567"><a href="#L-6567"><span class="linenos">6567</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="L-6568"><a href="#L-6568"><span class="linenos">6568</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
</span><span id="L-6569"><a href="#L-6569"><span class="linenos">6569</span></a>
</span><span id="L-6570"><a href="#L-6570"><span class="linenos">6570</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6571"><a href="#L-6571"><span class="linenos">6571</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
</span><span id="L-6572"><a href="#L-6572"><span class="linenos">6572</span></a> <span class="p">)</span>
</span><span id="L-6573"><a href="#L-6573"><span class="linenos">6573</span></a>
</span><span id="L-6574"><a href="#L-6574"><span class="linenos">6574</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6575"><a href="#L-6575"><span class="linenos">6575</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
</span><span id="L-6576"><a href="#L-6576"><span class="linenos">6576</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="L-6577"><a href="#L-6577"><span class="linenos">6577</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_open_json_column_def</span><span class="p">)</span>
</span><span id="L-6578"><a href="#L-6578"><span class="linenos">6578</span></a>
</span><span id="L-6579"><a href="#L-6579"><span class="linenos">6579</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</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">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-6580"><a href="#L-6580"><span class="linenos">6580</span></a>
</span><span id="L-6581"><a href="#L-6581"><span class="linenos">6581</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</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">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
</span><span id="L-6582"><a href="#L-6582"><span class="linenos">6582</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="L-6583"><a href="#L-6583"><span class="linenos">6583</span></a>
</span><span id="L-6584"><a href="#L-6584"><span class="linenos">6584</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
</span><span id="L-6585"><a href="#L-6585"><span class="linenos">6585</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6586"><a href="#L-6586"><span class="linenos">6586</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</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><span id="L-6587"><a href="#L-6587"><span class="linenos">6587</span></a> <span class="p">)</span>
</span><span id="L-6588"><a href="#L-6588"><span class="linenos">6588</span></a>
</span><span id="L-6589"><a href="#L-6589"><span class="linenos">6589</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
</span><span id="L-6590"><a href="#L-6590"><span class="linenos">6590</span></a> <span class="n">haystack</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-6591"><a href="#L-6591"><span class="linenos">6591</span></a> <span class="n">needle</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-6592"><a href="#L-6592"><span class="linenos">6592</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6593"><a href="#L-6593"><span class="linenos">6593</span></a> <span class="n">haystack</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-6594"><a href="#L-6594"><span class="linenos">6594</span></a> <span class="n">needle</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-6595"><a href="#L-6595"><span class="linenos">6595</span></a>
</span><span id="L-6596"><a href="#L-6596"><span class="linenos">6596</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6597"><a href="#L-6597"><span class="linenos">6597</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</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-6598"><a href="#L-6598"><span class="linenos">6598</span></a> <span class="p">)</span>
</span><span id="L-6599"><a href="#L-6599"><span class="linenos">6599</span></a>
</span><span id="L-6600"><a href="#L-6600"><span class="linenos">6600</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_predict</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">:</span>
</span><span id="L-6601"><a href="#L-6601"><span class="linenos">6601</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MODEL&quot;</span><span class="p">)</span>
</span><span id="L-6602"><a href="#L-6602"><span class="linenos">6602</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="L-6603"><a href="#L-6603"><span class="linenos">6603</span></a>
</span><span id="L-6604"><a href="#L-6604"><span class="linenos">6604</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="L-6605"><a href="#L-6605"><span class="linenos">6605</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">)</span>
</span><span id="L-6606"><a href="#L-6606"><span class="linenos">6606</span></a>
</span><span id="L-6607"><a href="#L-6607"><span class="linenos">6607</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6608"><a href="#L-6608"><span class="linenos">6608</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">,</span>
</span><span id="L-6609"><a href="#L-6609"><span class="linenos">6609</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-6610"><a href="#L-6610"><span class="linenos">6610</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
</span><span id="L-6611"><a href="#L-6611"><span class="linenos">6611</span></a> <span class="n">params_struct</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="L-6612"><a href="#L-6612"><span class="linenos">6612</span></a> <span class="p">)</span>
</span><span id="L-6613"><a href="#L-6613"><span class="linenos">6613</span></a>
</span><span id="L-6614"><a href="#L-6614"><span class="linenos">6614</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
</span><span id="L-6615"><a href="#L-6615"><span class="linenos">6615</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">)</span>
</span><span id="L-6616"><a href="#L-6616"><span class="linenos">6616</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">func_name</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-6617"><a href="#L-6617"><span class="linenos">6617</span></a>
</span><span id="L-6618"><a href="#L-6618"><span class="linenos">6618</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_substring</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span>
</span><span id="L-6619"><a href="#L-6619"><span class="linenos">6619</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
</span><span id="L-6620"><a href="#L-6620"><span class="linenos">6620</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
</span><span id="L-6621"><a href="#L-6621"><span class="linenos">6621</span></a>
</span><span id="L-6622"><a href="#L-6622"><span class="linenos">6622</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">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 class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">))</span>
</span><span id="L-6623"><a href="#L-6623"><span class="linenos">6623</span></a>
</span><span id="L-6624"><a href="#L-6624"><span class="linenos">6624</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
</span><span id="L-6625"><a href="#L-6625"><span class="linenos">6625</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">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-6626"><a href="#L-6626"><span class="linenos">6626</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
</span><span id="L-6627"><a href="#L-6627"><span class="linenos">6627</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">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-6628"><a href="#L-6628"><span class="linenos">6628</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
</span><span id="L-6629"><a href="#L-6629"><span class="linenos">6629</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">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-6630"><a href="#L-6630"><span class="linenos">6630</span></a>
</span><span id="L-6631"><a href="#L-6631"><span class="linenos">6631</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
</span><span id="L-6632"><a href="#L-6632"><span class="linenos">6632</span></a>
</span><span id="L-6633"><a href="#L-6633"><span class="linenos">6633</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_trim</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span>
</span><span id="L-6634"><a href="#L-6634"><span class="linenos">6634</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
</span><span id="L-6635"><a href="#L-6635"><span class="linenos">6635</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
</span><span id="L-6636"><a href="#L-6636"><span class="linenos">6636</span></a>
</span><span id="L-6637"><a href="#L-6637"><span class="linenos">6637</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6638"><a href="#L-6638"><span class="linenos">6638</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6639"><a href="#L-6639"><span class="linenos">6639</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6640"><a href="#L-6640"><span class="linenos">6640</span></a>
</span><span id="L-6641"><a href="#L-6641"><span class="linenos">6641</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
</span><span id="L-6642"><a href="#L-6642"><span class="linenos">6642</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-6643"><a href="#L-6643"><span class="linenos">6643</span></a>
</span><span id="L-6644"><a href="#L-6644"><span class="linenos">6644</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-6645"><a href="#L-6645"><span class="linenos">6645</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)):</span>
</span><span id="L-6646"><a href="#L-6646"><span class="linenos">6646</span></a> <span class="n">invert_order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRIM_PATTERN_FIRST</span>
</span><span id="L-6647"><a href="#L-6647"><span class="linenos">6647</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-6648"><a href="#L-6648"><span class="linenos">6648</span></a>
</span><span id="L-6649"><a href="#L-6649"><span class="linenos">6649</span></a> <span class="k">if</span> <span class="n">invert_order</span><span class="p">:</span>
</span><span id="L-6650"><a href="#L-6650"><span class="linenos">6650</span></a> <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">this</span>
</span><span id="L-6651"><a href="#L-6651"><span class="linenos">6651</span></a>
</span><span id="L-6652"><a href="#L-6652"><span class="linenos">6652</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">):</span>
</span><span id="L-6653"><a href="#L-6653"><span class="linenos">6653</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-6654"><a href="#L-6654"><span class="linenos">6654</span></a>
</span><span id="L-6655"><a href="#L-6655"><span class="linenos">6655</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6656"><a href="#L-6656"><span class="linenos">6656</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</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">position</span><span class="o">=</span><span class="n">position</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">collation</span><span class="o">=</span><span class="n">collation</span>
</span><span id="L-6657"><a href="#L-6657"><span class="linenos">6657</span></a> <span class="p">)</span>
</span><span id="L-6658"><a href="#L-6658"><span class="linenos">6658</span></a>
</span><span id="L-6659"><a href="#L-6659"><span class="linenos">6659</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_window_clause</span><span class="p">(</span><span class="bp">self</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">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><span id="L-6660"><a href="#L-6660"><span class="linenos">6660</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_named_window</span><span class="p">)</span>
</span><span id="L-6661"><a href="#L-6661"><span class="linenos">6661</span></a>
</span><span id="L-6662"><a href="#L-6662"><span class="linenos">6662</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_named_window</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6663"><a href="#L-6663"><span class="linenos">6663</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span> <span class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-6664"><a href="#L-6664"><span class="linenos">6664</span></a>
</span><span id="L-6665"><a href="#L-6665"><span class="linenos">6665</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
</span><span id="L-6666"><a href="#L-6666"><span class="linenos">6666</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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-6667"><a href="#L-6667"><span class="linenos">6667</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-6668"><a href="#L-6668"><span class="linenos">6668</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
</span><span id="L-6669"><a href="#L-6669"><span class="linenos">6669</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">IgnoreNulls</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-6670"><a href="#L-6670"><span class="linenos">6670</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
</span><span id="L-6671"><a href="#L-6671"><span class="linenos">6671</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</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-6672"><a href="#L-6672"><span class="linenos">6672</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-6673"><a href="#L-6673"><span class="linenos">6673</span></a>
</span><span id="L-6674"><a href="#L-6674"><span class="linenos">6674</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_having_max</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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-6675"><a href="#L-6675"><span class="linenos">6675</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">):</span>
</span><span id="L-6676"><a href="#L-6676"><span class="linenos">6676</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
</span><span id="L-6677"><a href="#L-6677"><span class="linenos">6677</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">!=</span> <span class="s2">&quot;MIN&quot;</span>
</span><span id="L-6678"><a href="#L-6678"><span class="linenos">6678</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6679"><a href="#L-6679"><span class="linenos">6679</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HavingMax</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="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span>
</span><span id="L-6680"><a href="#L-6680"><span class="linenos">6680</span></a> <span class="p">)</span>
</span><span id="L-6681"><a href="#L-6681"><span class="linenos">6681</span></a>
</span><span id="L-6682"><a href="#L-6682"><span class="linenos">6682</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-6683"><a href="#L-6683"><span class="linenos">6683</span></a>
</span><span id="L-6684"><a href="#L-6684"><span class="linenos">6684</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_window</span><span class="p">(</span>
</span><span id="L-6685"><a href="#L-6685"><span class="linenos">6685</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-6686"><a href="#L-6686"><span class="linenos">6686</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-6687"><a href="#L-6687"><span class="linenos">6687</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">this</span>
</span><span id="L-6688"><a href="#L-6688"><span class="linenos">6688</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="n">func</span><span class="o">.</span><span class="n">comments</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</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="k">else</span> <span class="kc">None</span>
</span><span id="L-6689"><a href="#L-6689"><span class="linenos">6689</span></a>
</span><span id="L-6690"><a href="#L-6690"><span class="linenos">6690</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
</span><span id="L-6691"><a href="#L-6691"><span class="linenos">6691</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/percentile-disc-transact-sql?view=sql-server-ver16</span>
</span><span id="L-6692"><a href="#L-6692"><span class="linenos">6692</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
</span><span id="L-6693"><a href="#L-6693"><span class="linenos">6693</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">)</span>
</span><span id="L-6694"><a href="#L-6694"><span class="linenos">6694</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</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">order</span><span class="p">)</span>
</span><span id="L-6695"><a href="#L-6695"><span class="linenos">6695</span></a>
</span><span id="L-6696"><a href="#L-6696"><span class="linenos">6696</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-6697"><a href="#L-6697"><span class="linenos">6697</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span>
</span><span id="L-6698"><a href="#L-6698"><span class="linenos">6698</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6699"><a href="#L-6699"><span class="linenos">6699</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</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="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-6700"><a href="#L-6700"><span class="linenos">6700</span></a> <span class="p">)</span>
</span><span id="L-6701"><a href="#L-6701"><span class="linenos">6701</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-6702"><a href="#L-6702"><span class="linenos">6702</span></a>
</span><span id="L-6703"><a href="#L-6703"><span class="linenos">6703</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
</span><span id="L-6704"><a href="#L-6704"><span class="linenos">6704</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
</span><span id="L-6705"><a href="#L-6705"><span class="linenos">6705</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
</span><span id="L-6706"><a href="#L-6706"><span class="linenos">6706</span></a>
</span><span id="L-6707"><a href="#L-6707"><span class="linenos">6707</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
</span><span id="L-6708"><a href="#L-6708"><span class="linenos">6708</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
</span><span id="L-6709"><a href="#L-6709"><span class="linenos">6709</span></a>
</span><span id="L-6710"><a href="#L-6710"><span class="linenos">6710</span></a> <span class="c1"># The below changes handle</span>
</span><span id="L-6711"><a href="#L-6711"><span class="linenos">6711</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
</span><span id="L-6712"><a href="#L-6712"><span class="linenos">6712</span></a>
</span><span id="L-6713"><a href="#L-6713"><span class="linenos">6713</span></a> <span class="c1"># Oracle allows both formats</span>
</span><span id="L-6714"><a href="#L-6714"><span class="linenos">6714</span></a> <span class="c1"># (https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/img_text/first_value.html)</span>
</span><span id="L-6715"><a href="#L-6715"><span class="linenos">6715</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
</span><span id="L-6716"><a href="#L-6716"><span class="linenos">6716</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
</span><span id="L-6717"><a href="#L-6717"><span class="linenos">6717</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">AggFunc</span><span class="p">):</span>
</span><span id="L-6718"><a href="#L-6718"><span class="linenos">6718</span></a> <span class="n">ignore_respect</span> <span class="o">=</span> <span class="n">this</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">IgnoreNulls</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">)</span>
</span><span id="L-6719"><a href="#L-6719"><span class="linenos">6719</span></a>
</span><span id="L-6720"><a href="#L-6720"><span class="linenos">6720</span></a> <span class="k">if</span> <span class="n">ignore_respect</span> <span class="ow">and</span> <span class="n">ignore_respect</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="L-6721"><a href="#L-6721"><span class="linenos">6721</span></a> <span class="n">ignore_respect</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-6722"><a href="#L-6722"><span class="linenos">6722</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="vm">__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><span id="L-6723"><a href="#L-6723"><span class="linenos">6723</span></a>
</span><span id="L-6724"><a href="#L-6724"><span class="linenos">6724</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-6725"><a href="#L-6725"><span class="linenos">6725</span></a>
</span><span id="L-6726"><a href="#L-6726"><span class="linenos">6726</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
</span><span id="L-6727"><a href="#L-6727"><span class="linenos">6727</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
</span><span id="L-6728"><a href="#L-6728"><span class="linenos">6728</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6729"><a href="#L-6729"><span class="linenos">6729</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="L-6730"><a href="#L-6730"><span class="linenos">6730</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">):</span>
</span><span id="L-6731"><a href="#L-6731"><span class="linenos">6731</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-6732"><a href="#L-6732"><span class="linenos">6732</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6733"><a href="#L-6733"><span class="linenos">6733</span></a> <span class="n">over</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-6734"><a href="#L-6734"><span class="linenos">6734</span></a>
</span><span id="L-6735"><a href="#L-6735"><span class="linenos">6735</span></a> <span class="k">if</span> <span class="n">comments</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</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-6736"><a href="#L-6736"><span class="linenos">6736</span></a> <span class="n">func</span><span class="o">.</span><span class="n">pop_comments</span><span class="p">()</span>
</span><span id="L-6737"><a href="#L-6737"><span class="linenos">6737</span></a>
</span><span id="L-6738"><a href="#L-6738"><span class="linenos">6738</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-6739"><a href="#L-6739"><span class="linenos">6739</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6740"><a href="#L-6740"><span class="linenos">6740</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
</span><span id="L-6741"><a href="#L-6741"><span class="linenos">6741</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="L-6742"><a href="#L-6742"><span class="linenos">6742</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-6743"><a href="#L-6743"><span class="linenos">6743</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span>
</span><span id="L-6744"><a href="#L-6744"><span class="linenos">6744</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
</span><span id="L-6745"><a href="#L-6745"><span class="linenos">6745</span></a> <span class="p">)</span>
</span><span id="L-6746"><a href="#L-6746"><span class="linenos">6746</span></a>
</span><span id="L-6747"><a href="#L-6747"><span class="linenos">6747</span></a> <span class="n">window_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="L-6748"><a href="#L-6748"><span class="linenos">6748</span></a>
</span><span id="L-6749"><a href="#L-6749"><span class="linenos">6749</span></a> <span class="n">first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">)</span>
</span><span id="L-6750"><a href="#L-6750"><span class="linenos">6750</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
</span><span id="L-6751"><a href="#L-6751"><span class="linenos">6751</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-6752"><a href="#L-6752"><span class="linenos">6752</span></a>
</span><span id="L-6753"><a href="#L-6753"><span class="linenos">6753</span></a> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_and_order</span><span class="p">()</span>
</span><span id="L-6754"><a href="#L-6754"><span class="linenos">6754</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">))</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-6755"><a href="#L-6755"><span class="linenos">6755</span></a>
</span><span id="L-6756"><a href="#L-6756"><span class="linenos">6756</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
</span><span id="L-6757"><a href="#L-6757"><span class="linenos">6757</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)</span>
</span><span id="L-6758"><a href="#L-6758"><span class="linenos">6758</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
</span><span id="L-6759"><a href="#L-6759"><span class="linenos">6759</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span>
</span><span id="L-6760"><a href="#L-6760"><span class="linenos">6760</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
</span><span id="L-6761"><a href="#L-6761"><span class="linenos">6761</span></a>
</span><span id="L-6762"><a href="#L-6762"><span class="linenos">6762</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6763"><a href="#L-6763"><span class="linenos">6763</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
</span><span id="L-6764"><a href="#L-6764"><span class="linenos">6764</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="L-6765"><a href="#L-6765"><span class="linenos">6765</span></a> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
</span><span id="L-6766"><a href="#L-6766"><span class="linenos">6766</span></a> <span class="n">start_side</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
</span><span id="L-6767"><a href="#L-6767"><span class="linenos">6767</span></a> <span class="n">end</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
</span><span id="L-6768"><a href="#L-6768"><span class="linenos">6768</span></a> <span class="n">end_side</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
</span><span id="L-6769"><a href="#L-6769"><span class="linenos">6769</span></a> <span class="p">)</span>
</span><span id="L-6770"><a href="#L-6770"><span class="linenos">6770</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-6771"><a href="#L-6771"><span class="linenos">6771</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-6772"><a href="#L-6772"><span class="linenos">6772</span></a>
</span><span id="L-6773"><a href="#L-6773"><span class="linenos">6773</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-6774"><a href="#L-6774"><span class="linenos">6774</span></a>
</span><span id="L-6775"><a href="#L-6775"><span class="linenos">6775</span></a> <span class="n">window</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6776"><a href="#L-6776"><span class="linenos">6776</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
</span><span id="L-6777"><a href="#L-6777"><span class="linenos">6777</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="L-6778"><a href="#L-6778"><span class="linenos">6778</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-6779"><a href="#L-6779"><span class="linenos">6779</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
</span><span id="L-6780"><a href="#L-6780"><span class="linenos">6780</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
</span><span id="L-6781"><a href="#L-6781"><span class="linenos">6781</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
</span><span id="L-6782"><a href="#L-6782"><span class="linenos">6782</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">window_alias</span><span class="p">,</span>
</span><span id="L-6783"><a href="#L-6783"><span class="linenos">6783</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
</span><span id="L-6784"><a href="#L-6784"><span class="linenos">6784</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
</span><span id="L-6785"><a href="#L-6785"><span class="linenos">6785</span></a> <span class="p">)</span>
</span><span id="L-6786"><a href="#L-6786"><span class="linenos">6786</span></a>
</span><span id="L-6787"><a href="#L-6787"><span class="linenos">6787</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
</span><span id="L-6788"><a href="#L-6788"><span class="linenos">6788</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-6789"><a href="#L-6789"><span class="linenos">6789</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
</span><span id="L-6790"><a href="#L-6790"><span class="linenos">6790</span></a>
</span><span id="L-6791"><a href="#L-6791"><span class="linenos">6791</span></a> <span class="k">return</span> <span class="n">window</span>
</span><span id="L-6792"><a href="#L-6792"><span class="linenos">6792</span></a>
</span><span id="L-6793"><a href="#L-6793"><span class="linenos">6793</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partition_and_order</span><span class="p">(</span>
</span><span id="L-6794"><a href="#L-6794"><span class="linenos">6794</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-6795"><a href="#L-6795"><span class="linenos">6795</span></a> <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">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">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-6796"><a href="#L-6796"><span class="linenos">6796</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
</span><span id="L-6797"><a href="#L-6797"><span class="linenos">6797</span></a>
</span><span id="L-6798"><a href="#L-6798"><span class="linenos">6798</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_window_spec</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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">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-6799"><a href="#L-6799"><span class="linenos">6799</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)</span>
</span><span id="L-6800"><a href="#L-6800"><span class="linenos">6800</span></a>
</span><span id="L-6801"><a href="#L-6801"><span class="linenos">6801</span></a> <span class="k">return</span> <span class="p">{</span>
</span><span id="L-6802"><a href="#L-6802"><span class="linenos">6802</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
</span><span id="L-6803"><a href="#L-6803"><span class="linenos">6803</span></a> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
</span><span id="L-6804"><a href="#L-6804"><span class="linenos">6804</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
</span><span id="L-6805"><a href="#L-6805"><span class="linenos">6805</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-6806"><a href="#L-6806"><span class="linenos">6806</span></a> <span class="p">),</span>
</span><span id="L-6807"><a href="#L-6807"><span class="linenos">6807</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
</span><span id="L-6808"><a href="#L-6808"><span class="linenos">6808</span></a> <span class="p">}</span>
</span><span id="L-6809"><a href="#L-6809"><span class="linenos">6809</span></a>
</span><span id="L-6810"><a href="#L-6810"><span class="linenos">6810</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alias</span><span class="p">(</span>
</span><span id="L-6811"><a href="#L-6811"><span class="linenos">6811</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="n">explicit</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-6812"><a href="#L-6812"><span class="linenos">6812</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-6813"><a href="#L-6813"><span class="linenos">6813</span></a> <span class="c1"># In some dialects, LIMIT and OFFSET can act as both identifiers and keywords (clauses)</span>
</span><span id="L-6814"><a href="#L-6814"><span class="linenos">6814</span></a> <span class="c1"># so this section tries to parse the clause version and if it fails, it treats the token</span>
</span><span id="L-6815"><a href="#L-6815"><span class="linenos">6815</span></a> <span class="c1"># as an identifier (alias)</span>
</span><span id="L-6816"><a href="#L-6816"><span class="linenos">6816</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_can_parse_limit_or_offset</span><span class="p">():</span>
</span><span id="L-6817"><a href="#L-6817"><span class="linenos">6817</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-6818"><a href="#L-6818"><span class="linenos">6818</span></a>
</span><span id="L-6819"><a href="#L-6819"><span class="linenos">6819</span></a> <span class="n">any_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="L-6820"><a href="#L-6820"><span class="linenos">6820</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="ow">or</span> <span class="p">[]</span>
</span><span id="L-6821"><a href="#L-6821"><span class="linenos">6821</span></a>
</span><span id="L-6822"><a href="#L-6822"><span class="linenos">6822</span></a> <span class="k">if</span> <span class="n">explicit</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">any_token</span><span class="p">:</span>
</span><span id="L-6823"><a href="#L-6823"><span class="linenos">6823</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-6824"><a href="#L-6824"><span class="linenos">6824</span></a>
</span><span id="L-6825"><a href="#L-6825"><span class="linenos">6825</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-6826"><a href="#L-6826"><span class="linenos">6826</span></a> <span class="n">aliases</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6827"><a href="#L-6827"><span class="linenos">6827</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
</span><span id="L-6828"><a href="#L-6828"><span class="linenos">6828</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="L-6829"><a href="#L-6829"><span class="linenos">6829</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-6830"><a href="#L-6830"><span class="linenos">6830</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="p">)),</span>
</span><span id="L-6831"><a href="#L-6831"><span class="linenos">6831</span></a> <span class="p">)</span>
</span><span id="L-6832"><a href="#L-6832"><span class="linenos">6832</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
</span><span id="L-6833"><a href="#L-6833"><span class="linenos">6833</span></a> <span class="k">return</span> <span class="n">aliases</span>
</span><span id="L-6834"><a href="#L-6834"><span class="linenos">6834</span></a>
</span><span id="L-6835"><a href="#L-6835"><span class="linenos">6835</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">ALIAS_TOKENS</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
</span><span id="L-6836"><a href="#L-6836"><span class="linenos">6836</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ALIASES</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
</span><span id="L-6837"><a href="#L-6837"><span class="linenos">6837</span></a> <span class="p">)</span>
</span><span id="L-6838"><a href="#L-6838"><span class="linenos">6838</span></a>
</span><span id="L-6839"><a href="#L-6839"><span class="linenos">6839</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
</span><span id="L-6840"><a href="#L-6840"><span class="linenos">6840</span></a> <span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">pop_comments</span><span class="p">())</span>
</span><span id="L-6841"><a href="#L-6841"><span class="linenos">6841</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
</span><span id="L-6842"><a href="#L-6842"><span class="linenos">6842</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-6843"><a href="#L-6843"><span class="linenos">6843</span></a>
</span><span id="L-6844"><a href="#L-6844"><span class="linenos">6844</span></a> <span class="c1"># Moves the comment next to the alias in `expr /* comment */ AS alias`</span>
</span><span id="L-6845"><a href="#L-6845"><span class="linenos">6845</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">column</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
</span><span id="L-6846"><a href="#L-6846"><span class="linenos">6846</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">pop_comments</span><span class="p">()</span>
</span><span id="L-6847"><a href="#L-6847"><span class="linenos">6847</span></a>
</span><span id="L-6848"><a href="#L-6848"><span class="linenos">6848</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-6849"><a href="#L-6849"><span class="linenos">6849</span></a>
</span><span id="L-6850"><a href="#L-6850"><span class="linenos">6850</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_id_var</span><span class="p">(</span>
</span><span id="L-6851"><a href="#L-6851"><span class="linenos">6851</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-6852"><a href="#L-6852"><span class="linenos">6852</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="L-6853"><a href="#L-6853"><span class="linenos">6853</span></a> <span class="n">tokens</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">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-6854"><a href="#L-6854"><span class="linenos">6854</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-6855"><a href="#L-6855"><span class="linenos">6855</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span>
</span><span id="L-6856"><a href="#L-6856"><span class="linenos">6856</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span> <span class="ow">and</span> <span class="p">(</span>
</span><span id="L-6857"><a href="#L-6857"><span class="linenos">6857</span></a> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">)</span>
</span><span id="L-6858"><a href="#L-6858"><span class="linenos">6858</span></a> <span class="p">):</span>
</span><span id="L-6859"><a href="#L-6859"><span class="linenos">6859</span></a> <span class="n">quoted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
</span><span id="L-6860"><a href="#L-6860"><span class="linenos">6860</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
</span><span id="L-6861"><a href="#L-6861"><span class="linenos">6861</span></a>
</span><span id="L-6862"><a href="#L-6862"><span class="linenos">6862</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="L-6863"><a href="#L-6863"><span class="linenos">6863</span></a>
</span><span id="L-6864"><a href="#L-6864"><span class="linenos">6864</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_string</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6865"><a href="#L-6865"><span class="linenos">6865</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRING_PARSERS</span><span class="p">):</span>
</span><span id="L-6866"><a href="#L-6866"><span class="linenos">6866</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-6867"><a href="#L-6867"><span class="linenos">6867</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="L-6868"><a href="#L-6868"><span class="linenos">6868</span></a>
</span><span id="L-6869"><a href="#L-6869"><span class="linenos">6869</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_string_as_identifier</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]:</span>
</span><span id="L-6870"><a href="#L-6870"><span class="linenos">6870</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-6871"><a href="#L-6871"><span class="linenos">6871</span></a>
</span><span id="L-6872"><a href="#L-6872"><span class="linenos">6872</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_number</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6873"><a href="#L-6873"><span class="linenos">6873</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NUMERIC_PARSERS</span><span class="p">):</span>
</span><span id="L-6874"><a href="#L-6874"><span class="linenos">6874</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">NUMERIC_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-6875"><a href="#L-6875"><span class="linenos">6875</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="L-6876"><a href="#L-6876"><span class="linenos">6876</span></a>
</span><span id="L-6877"><a href="#L-6877"><span class="linenos">6877</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_identifier</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6878"><a href="#L-6878"><span class="linenos">6878</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">):</span>
</span><span id="L-6879"><a href="#L-6879"><span class="linenos">6879</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-6880"><a href="#L-6880"><span class="linenos">6880</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="L-6881"><a href="#L-6881"><span class="linenos">6881</span></a>
</span><span id="L-6882"><a href="#L-6882"><span class="linenos">6882</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_var</span><span class="p">(</span>
</span><span id="L-6883"><a href="#L-6883"><span class="linenos">6883</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-6884"><a href="#L-6884"><span class="linenos">6884</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-6885"><a href="#L-6885"><span class="linenos">6885</span></a> <span class="n">tokens</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">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-6886"><a href="#L-6886"><span class="linenos">6886</span></a> <span class="n">upper</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="L-6887"><a href="#L-6887"><span class="linenos">6887</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-6888"><a href="#L-6888"><span class="linenos">6888</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="L-6889"><a href="#L-6889"><span class="linenos">6889</span></a> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span>
</span><span id="L-6890"><a href="#L-6890"><span class="linenos">6890</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
</span><span id="L-6891"><a href="#L-6891"><span class="linenos">6891</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="k">if</span> <span class="n">tokens</span> <span class="k">else</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="L-6892"><a href="#L-6892"><span class="linenos">6892</span></a> <span class="p">):</span>
</span><span id="L-6893"><a href="#L-6893"><span class="linenos">6893</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6894"><a href="#L-6894"><span class="linenos">6894</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">upper</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-6895"><a href="#L-6895"><span class="linenos">6895</span></a> <span class="p">)</span>
</span><span id="L-6896"><a href="#L-6896"><span class="linenos">6896</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="L-6897"><a href="#L-6897"><span class="linenos">6897</span></a>
</span><span id="L-6898"><a href="#L-6898"><span class="linenos">6898</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_advance_any</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignore_reserved</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">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
</span><span id="L-6899"><a href="#L-6899"><span class="linenos">6899</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="p">(</span><span class="n">ignore_reserved</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_TOKENS</span><span class="p">):</span>
</span><span id="L-6900"><a href="#L-6900"><span class="linenos">6900</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-6901"><a href="#L-6901"><span class="linenos">6901</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-6902"><a href="#L-6902"><span class="linenos">6902</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-6903"><a href="#L-6903"><span class="linenos">6903</span></a>
</span><span id="L-6904"><a href="#L-6904"><span class="linenos">6904</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_var_or_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">upper</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">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-6905"><a href="#L-6905"><span class="linenos">6905</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="n">upper</span><span class="p">)</span>
</span><span id="L-6906"><a href="#L-6906"><span class="linenos">6906</span></a>
</span><span id="L-6907"><a href="#L-6907"><span class="linenos">6907</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_primary_or_var</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6908"><a href="#L-6908"><span class="linenos">6908</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-6909"><a href="#L-6909"><span class="linenos">6909</span></a>
</span><span id="L-6910"><a href="#L-6910"><span class="linenos">6910</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_null</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6911"><a href="#L-6911"><span class="linenos">6911</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NULL_TOKENS</span><span class="p">):</span>
</span><span id="L-6912"><a href="#L-6912"><span class="linenos">6912</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-6913"><a href="#L-6913"><span class="linenos">6913</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="L-6914"><a href="#L-6914"><span class="linenos">6914</span></a>
</span><span id="L-6915"><a href="#L-6915"><span class="linenos">6915</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_boolean</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6916"><a href="#L-6916"><span class="linenos">6916</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">):</span>
</span><span id="L-6917"><a href="#L-6917"><span class="linenos">6917</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-6918"><a href="#L-6918"><span class="linenos">6918</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">):</span>
</span><span id="L-6919"><a href="#L-6919"><span class="linenos">6919</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-6920"><a href="#L-6920"><span class="linenos">6920</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="L-6921"><a href="#L-6921"><span class="linenos">6921</span></a>
</span><span id="L-6922"><a href="#L-6922"><span class="linenos">6922</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_star</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6923"><a href="#L-6923"><span class="linenos">6923</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">):</span>
</span><span id="L-6924"><a href="#L-6924"><span class="linenos">6924</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-6925"><a href="#L-6925"><span class="linenos">6925</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="L-6926"><a href="#L-6926"><span class="linenos">6926</span></a>
</span><span id="L-6927"><a href="#L-6927"><span class="linenos">6927</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">:</span>
</span><span id="L-6928"><a href="#L-6928"><span class="linenos">6928</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_or_var</span><span class="p">()</span>
</span><span id="L-6929"><a href="#L-6929"><span class="linenos">6929</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Parameter</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-6930"><a href="#L-6930"><span class="linenos">6930</span></a>
</span><span id="L-6931"><a href="#L-6931"><span class="linenos">6931</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_placeholder</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6932"><a href="#L-6932"><span class="linenos">6932</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">):</span>
</span><span id="L-6933"><a href="#L-6933"><span class="linenos">6933</span></a> <span class="n">placeholder</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-6934"><a href="#L-6934"><span class="linenos">6934</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
</span><span id="L-6935"><a href="#L-6935"><span class="linenos">6935</span></a> <span class="k">return</span> <span class="n">placeholder</span>
</span><span id="L-6936"><a href="#L-6936"><span class="linenos">6936</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</span><span id="L-6937"><a href="#L-6937"><span class="linenos">6937</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-6938"><a href="#L-6938"><span class="linenos">6938</span></a>
</span><span id="L-6939"><a href="#L-6939"><span class="linenos">6939</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_star_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">keywords</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">Optional</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><span id="L-6940"><a href="#L-6940"><span class="linenos">6940</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="n">keywords</span><span class="p">):</span>
</span><span id="L-6941"><a href="#L-6941"><span class="linenos">6941</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-6942"><a href="#L-6942"><span class="linenos">6942</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-6943"><a href="#L-6943"><span class="linenos">6943</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
</span><span id="L-6944"><a href="#L-6944"><span class="linenos">6944</span></a>
</span><span id="L-6945"><a href="#L-6945"><span class="linenos">6945</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
</span><span id="L-6946"><a href="#L-6946"><span class="linenos">6946</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-6947"><a href="#L-6947"><span class="linenos">6947</span></a>
</span><span id="L-6948"><a href="#L-6948"><span class="linenos">6948</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_csv</span><span class="p">(</span>
</span><span id="L-6949"><a href="#L-6949"><span class="linenos">6949</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span>
</span><span id="L-6950"><a href="#L-6950"><span class="linenos">6950</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6951"><a href="#L-6951"><span class="linenos">6951</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="L-6952"><a href="#L-6952"><span class="linenos">6952</span></a> <span class="n">items</span> <span class="o">=</span> <span class="p">[</span><span class="n">parse_result</span><span class="p">]</span> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
</span><span id="L-6953"><a href="#L-6953"><span class="linenos">6953</span></a>
</span><span id="L-6954"><a href="#L-6954"><span class="linenos">6954</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">sep</span><span class="p">):</span>
</span><span id="L-6955"><a href="#L-6955"><span class="linenos">6955</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
</span><span id="L-6956"><a href="#L-6956"><span class="linenos">6956</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="L-6957"><a href="#L-6957"><span class="linenos">6957</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-6958"><a href="#L-6958"><span class="linenos">6958</span></a> <span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
</span><span id="L-6959"><a href="#L-6959"><span class="linenos">6959</span></a>
</span><span id="L-6960"><a href="#L-6960"><span class="linenos">6960</span></a> <span class="k">return</span> <span class="n">items</span>
</span><span id="L-6961"><a href="#L-6961"><span class="linenos">6961</span></a>
</span><span id="L-6962"><a href="#L-6962"><span class="linenos">6962</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_tokens</span><span class="p">(</span>
</span><span id="L-6963"><a href="#L-6963"><span class="linenos">6963</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
</span><span id="L-6964"><a href="#L-6964"><span class="linenos">6964</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-6965"><a href="#L-6965"><span class="linenos">6965</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="L-6966"><a href="#L-6966"><span class="linenos">6966</span></a>
</span><span id="L-6967"><a href="#L-6967"><span class="linenos">6967</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
</span><span id="L-6968"><a href="#L-6968"><span class="linenos">6968</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-6969"><a href="#L-6969"><span class="linenos">6969</span></a> <span class="n">expressions</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
</span><span id="L-6970"><a href="#L-6970"><span class="linenos">6970</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-6971"><a href="#L-6971"><span class="linenos">6971</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
</span><span id="L-6972"><a href="#L-6972"><span class="linenos">6972</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
</span><span id="L-6973"><a href="#L-6973"><span class="linenos">6973</span></a> <span class="p">)</span>
</span><span id="L-6974"><a href="#L-6974"><span class="linenos">6974</span></a>
</span><span id="L-6975"><a href="#L-6975"><span class="linenos">6975</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-6976"><a href="#L-6976"><span class="linenos">6976</span></a>
</span><span id="L-6977"><a href="#L-6977"><span class="linenos">6977</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</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">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><span id="L-6978"><a href="#L-6978"><span class="linenos">6978</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
</span><span id="L-6979"><a href="#L-6979"><span class="linenos">6979</span></a>
</span><span id="L-6980"><a href="#L-6980"><span class="linenos">6980</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
</span><span id="L-6981"><a href="#L-6981"><span class="linenos">6981</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-6982"><a href="#L-6982"><span class="linenos">6982</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6983"><a href="#L-6983"><span class="linenos">6983</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
</span><span id="L-6984"><a href="#L-6984"><span class="linenos">6984</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
</span><span id="L-6985"><a href="#L-6985"><span class="linenos">6985</span></a> <span class="p">)</span>
</span><span id="L-6986"><a href="#L-6986"><span class="linenos">6986</span></a>
</span><span id="L-6987"><a href="#L-6987"><span class="linenos">6987</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</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">Any</span><span class="p">:</span>
</span><span id="L-6988"><a href="#L-6988"><span class="linenos">6988</span></a> <span class="n">wrapped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="L-6989"><a href="#L-6989"><span class="linenos">6989</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
</span><span id="L-6990"><a href="#L-6990"><span class="linenos">6990</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
</span><span id="L-6991"><a href="#L-6991"><span class="linenos">6991</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="L-6992"><a href="#L-6992"><span class="linenos">6992</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
</span><span id="L-6993"><a href="#L-6993"><span class="linenos">6993</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-6994"><a href="#L-6994"><span class="linenos">6994</span></a> <span class="k">return</span> <span class="n">parse_result</span>
</span><span id="L-6995"><a href="#L-6995"><span class="linenos">6995</span></a>
</span><span id="L-6996"><a href="#L-6996"><span class="linenos">6996</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_expressions</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-6997"><a href="#L-6997"><span class="linenos">6997</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
</span><span id="L-6998"><a href="#L-6998"><span class="linenos">6998</span></a>
</span><span id="L-6999"><a href="#L-6999"><span class="linenos">6999</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</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">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-7000"><a href="#L-7000"><span class="linenos">7000</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
</span><span id="L-7001"><a href="#L-7001"><span class="linenos">7001</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span> <span class="n">explicit</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-7002"><a href="#L-7002"><span class="linenos">7002</span></a> <span class="k">if</span> <span class="n">alias</span>
</span><span id="L-7003"><a href="#L-7003"><span class="linenos">7003</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-7004"><a href="#L-7004"><span class="linenos">7004</span></a> <span class="p">)</span>
</span><span id="L-7005"><a href="#L-7005"><span class="linenos">7005</span></a>
</span><span id="L-7006"><a href="#L-7006"><span class="linenos">7006</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_ddl_select</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-7007"><a href="#L-7007"><span class="linenos">7007</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
</span><span id="L-7008"><a href="#L-7008"><span class="linenos">7008</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
</span><span id="L-7009"><a href="#L-7009"><span class="linenos">7009</span></a> <span class="p">)</span>
</span><span id="L-7010"><a href="#L-7010"><span class="linenos">7010</span></a>
</span><span id="L-7011"><a href="#L-7011"><span class="linenos">7011</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="L-7012"><a href="#L-7012"><span class="linenos">7012</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7013"><a href="#L-7013"><span class="linenos">7013</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_KIND</span><span class="p">):</span>
</span><span id="L-7014"><a href="#L-7014"><span class="linenos">7014</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-7015"><a href="#L-7015"><span class="linenos">7015</span></a>
</span><span id="L-7016"><a href="#L-7016"><span class="linenos">7016</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
</span><span id="L-7017"><a href="#L-7017"><span class="linenos">7017</span></a>
</span><span id="L-7018"><a href="#L-7018"><span class="linenos">7018</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-7019"><a href="#L-7019"><span class="linenos">7019</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-7020"><a href="#L-7020"><span class="linenos">7020</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-7021"><a href="#L-7021"><span class="linenos">7021</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">):</span>
</span><span id="L-7022"><a href="#L-7022"><span class="linenos">7022</span></a> <span class="n">mode</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-7023"><a href="#L-7023"><span class="linenos">7023</span></a>
</span><span id="L-7024"><a href="#L-7024"><span class="linenos">7024</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
</span><span id="L-7025"><a href="#L-7025"><span class="linenos">7025</span></a> <span class="n">modes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mode</span><span class="p">))</span>
</span><span id="L-7026"><a href="#L-7026"><span class="linenos">7026</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="L-7027"><a href="#L-7027"><span class="linenos">7027</span></a> <span class="k">break</span>
</span><span id="L-7028"><a href="#L-7028"><span class="linenos">7028</span></a>
</span><span id="L-7029"><a href="#L-7029"><span class="linenos">7029</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Transaction</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">modes</span><span class="o">=</span><span class="n">modes</span><span class="p">)</span>
</span><span id="L-7030"><a href="#L-7030"><span class="linenos">7030</span></a>
</span><span id="L-7031"><a href="#L-7031"><span class="linenos">7031</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
</span><span id="L-7032"><a href="#L-7032"><span class="linenos">7032</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7033"><a href="#L-7033"><span class="linenos">7033</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7034"><a href="#L-7034"><span class="linenos">7034</span></a> <span class="n">is_rollback</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span>
</span><span id="L-7035"><a href="#L-7035"><span class="linenos">7035</span></a>
</span><span id="L-7036"><a href="#L-7036"><span class="linenos">7036</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
</span><span id="L-7037"><a href="#L-7037"><span class="linenos">7037</span></a>
</span><span id="L-7038"><a href="#L-7038"><span class="linenos">7038</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
</span><span id="L-7039"><a href="#L-7039"><span class="linenos">7039</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SAVEPOINT&quot;</span><span class="p">)</span>
</span><span id="L-7040"><a href="#L-7040"><span class="linenos">7040</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-7041"><a href="#L-7041"><span class="linenos">7041</span></a>
</span><span id="L-7042"><a href="#L-7042"><span class="linenos">7042</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">):</span>
</span><span id="L-7043"><a href="#L-7043"><span class="linenos">7043</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">)</span>
</span><span id="L-7044"><a href="#L-7044"><span class="linenos">7044</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHAIN&quot;</span><span class="p">)</span>
</span><span id="L-7045"><a href="#L-7045"><span class="linenos">7045</span></a>
</span><span id="L-7046"><a href="#L-7046"><span class="linenos">7046</span></a> <span class="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
</span><span id="L-7047"><a href="#L-7047"><span class="linenos">7047</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">,</span> <span class="n">savepoint</span><span class="o">=</span><span class="n">savepoint</span><span class="p">)</span>
</span><span id="L-7048"><a href="#L-7048"><span class="linenos">7048</span></a>
</span><span id="L-7049"><a href="#L-7049"><span class="linenos">7049</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Commit</span><span class="p">,</span> <span class="n">chain</span><span class="o">=</span><span class="n">chain</span><span class="p">)</span>
</span><span id="L-7050"><a href="#L-7050"><span class="linenos">7050</span></a>
</span><span id="L-7051"><a href="#L-7051"><span class="linenos">7051</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Refresh</span><span class="p">:</span>
</span><span id="L-7052"><a href="#L-7052"><span class="linenos">7052</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="L-7053"><a href="#L-7053"><span class="linenos">7053</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Refresh</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
</span><span id="L-7054"><a href="#L-7054"><span class="linenos">7054</span></a>
</span><span id="L-7055"><a href="#L-7055"><span class="linenos">7055</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-7056"><a href="#L-7056"><span class="linenos">7056</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
</span><span id="L-7057"><a href="#L-7057"><span class="linenos">7057</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7058"><a href="#L-7058"><span class="linenos">7058</span></a>
</span><span id="L-7059"><a href="#L-7059"><span class="linenos">7059</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">)</span>
</span><span id="L-7060"><a href="#L-7060"><span class="linenos">7060</span></a> <span class="n">exists_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-7061"><a href="#L-7061"><span class="linenos">7061</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
</span><span id="L-7062"><a href="#L-7062"><span class="linenos">7062</span></a>
</span><span id="L-7063"><a href="#L-7063"><span class="linenos">7063</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="L-7064"><a href="#L-7064"><span class="linenos">7064</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="n">exists_column</span><span class="p">)</span>
</span><span id="L-7065"><a href="#L-7065"><span class="linenos">7065</span></a>
</span><span id="L-7066"><a href="#L-7066"><span class="linenos">7066</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
</span><span id="L-7067"><a href="#L-7067"><span class="linenos">7067</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="s2">&quot;AFTER&quot;</span><span class="p">)):</span>
</span><span id="L-7068"><a href="#L-7068"><span class="linenos">7068</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-7069"><a href="#L-7069"><span class="linenos">7069</span></a> <span class="n">column_position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7070"><a href="#L-7070"><span class="linenos">7070</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span>
</span><span id="L-7071"><a href="#L-7071"><span class="linenos">7071</span></a> <span class="p">)</span>
</span><span id="L-7072"><a href="#L-7072"><span class="linenos">7072</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="n">column_position</span><span class="p">)</span>
</span><span id="L-7073"><a href="#L-7073"><span class="linenos">7073</span></a>
</span><span id="L-7074"><a href="#L-7074"><span class="linenos">7074</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="L-7075"><a href="#L-7075"><span class="linenos">7075</span></a>
</span><span id="L-7076"><a href="#L-7076"><span class="linenos">7076</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
</span><span id="L-7077"><a href="#L-7077"><span class="linenos">7077</span></a> <span class="n">drop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">()</span>
</span><span id="L-7078"><a href="#L-7078"><span class="linenos">7078</span></a> <span class="k">if</span> <span class="n">drop</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">drop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">):</span>
</span><span id="L-7079"><a href="#L-7079"><span class="linenos">7079</span></a> <span class="n">drop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="n">drop</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="s2">&quot;COLUMN&quot;</span><span class="p">))</span>
</span><span id="L-7080"><a href="#L-7080"><span class="linenos">7080</span></a> <span class="k">return</span> <span class="n">drop</span>
</span><span id="L-7081"><a href="#L-7081"><span class="linenos">7081</span></a>
</span><span id="L-7082"><a href="#L-7082"><span class="linenos">7082</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
</span><span id="L-7083"><a href="#L-7083"><span class="linenos">7083</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
</span><span id="L-7084"><a href="#L-7084"><span class="linenos">7084</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7085"><a href="#L-7085"><span class="linenos">7085</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">),</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span>
</span><span id="L-7086"><a href="#L-7086"><span class="linenos">7086</span></a> <span class="p">)</span>
</span><span id="L-7087"><a href="#L-7087"><span class="linenos">7087</span></a>
</span><span id="L-7088"><a href="#L-7088"><span class="linenos">7088</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_table_add</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-7089"><a href="#L-7089"><span class="linenos">7089</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
</span><span id="L-7090"><a href="#L-7090"><span class="linenos">7090</span></a>
</span><span id="L-7091"><a href="#L-7091"><span class="linenos">7091</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ADD_CONSTRAINT_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-7092"><a href="#L-7092"><span class="linenos">7092</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="L-7093"><a href="#L-7093"><span class="linenos">7093</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7094"><a href="#L-7094"><span class="linenos">7094</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">)</span>
</span><span id="L-7095"><a href="#L-7095"><span class="linenos">7095</span></a> <span class="p">)</span>
</span><span id="L-7096"><a href="#L-7096"><span class="linenos">7096</span></a> <span class="p">)</span>
</span><span id="L-7097"><a href="#L-7097"><span class="linenos">7097</span></a>
</span><span id="L-7098"><a href="#L-7098"><span class="linenos">7098</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-7099"><a href="#L-7099"><span class="linenos">7099</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
</span><span id="L-7100"><a href="#L-7100"><span class="linenos">7100</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-7101"><a href="#L-7101"><span class="linenos">7101</span></a>
</span><span id="L-7102"><a href="#L-7102"><span class="linenos">7102</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">):</span>
</span><span id="L-7103"><a href="#L-7103"><span class="linenos">7103</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
</span><span id="L-7104"><a href="#L-7104"><span class="linenos">7104</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
</span><span id="L-7105"><a href="#L-7105"><span class="linenos">7105</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">schema</span><span class="p">]</span>
</span><span id="L-7106"><a href="#L-7106"><span class="linenos">7106</span></a> <span class="k">return</span> <span class="p">[]</span>
</span><span id="L-7107"><a href="#L-7107"><span class="linenos">7107</span></a>
</span><span id="L-7108"><a href="#L-7108"><span class="linenos">7108</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_add_column</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-7109"><a href="#L-7109"><span class="linenos">7109</span></a>
</span><span id="L-7110"><a href="#L-7110"><span class="linenos">7110</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_table_alter</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-7111"><a href="#L-7111"><span class="linenos">7111</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ALTER_ALTER_PARSERS</span><span class="p">):</span>
</span><span id="L-7112"><a href="#L-7112"><span class="linenos">7112</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_ALTER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-7113"><a href="#L-7113"><span class="linenos">7113</span></a>
</span><span id="L-7114"><a href="#L-7114"><span class="linenos">7114</span></a> <span class="c1"># Many dialects support the ALTER [COLUMN] syntax, so if there is no</span>
</span><span id="L-7115"><a href="#L-7115"><span class="linenos">7115</span></a> <span class="c1"># keyword after ALTER we default to parsing this statement</span>
</span><span id="L-7116"><a href="#L-7116"><span class="linenos">7116</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">)</span>
</span><span id="L-7117"><a href="#L-7117"><span class="linenos">7117</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-7118"><a href="#L-7118"><span class="linenos">7118</span></a>
</span><span id="L-7119"><a href="#L-7119"><span class="linenos">7119</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="L-7120"><a href="#L-7120"><span class="linenos">7120</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-7121"><a href="#L-7121"><span class="linenos">7121</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="L-7122"><a href="#L-7122"><span class="linenos">7122</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">())</span>
</span><span id="L-7123"><a href="#L-7123"><span class="linenos">7123</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">):</span>
</span><span id="L-7124"><a href="#L-7124"><span class="linenos">7124</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
</span><span id="L-7125"><a href="#L-7125"><span class="linenos">7125</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
</span><span id="L-7126"><a href="#L-7126"><span class="linenos">7126</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7127"><a href="#L-7127"><span class="linenos">7127</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
</span><span id="L-7128"><a href="#L-7128"><span class="linenos">7128</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
</span><span id="L-7129"><a href="#L-7129"><span class="linenos">7129</span></a> <span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="L-7130"><a href="#L-7130"><span class="linenos">7130</span></a> <span class="n">allow_null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="L-7131"><a href="#L-7131"><span class="linenos">7131</span></a> <span class="p">)</span>
</span><span id="L-7132"><a href="#L-7132"><span class="linenos">7132</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
</span><span id="L-7133"><a href="#L-7133"><span class="linenos">7133</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7134"><a href="#L-7134"><span class="linenos">7134</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
</span><span id="L-7135"><a href="#L-7135"><span class="linenos">7135</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
</span><span id="L-7136"><a href="#L-7136"><span class="linenos">7136</span></a> <span class="n">allow_null</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="L-7137"><a href="#L-7137"><span class="linenos">7137</span></a> <span class="p">)</span>
</span><span id="L-7138"><a href="#L-7138"><span class="linenos">7138</span></a>
</span><span id="L-7139"><a href="#L-7139"><span class="linenos">7139</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;VISIBLE&quot;</span><span class="p">):</span>
</span><span id="L-7140"><a href="#L-7140"><span class="linenos">7140</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">visible</span><span class="o">=</span><span class="s2">&quot;VISIBLE&quot;</span><span class="p">)</span>
</span><span id="L-7141"><a href="#L-7141"><span class="linenos">7141</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;INVISIBLE&quot;</span><span class="p">):</span>
</span><span id="L-7142"><a href="#L-7142"><span class="linenos">7142</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">visible</span><span class="o">=</span><span class="s2">&quot;INVISIBLE&quot;</span><span class="p">)</span>
</span><span id="L-7143"><a href="#L-7143"><span class="linenos">7143</span></a>
</span><span id="L-7144"><a href="#L-7144"><span class="linenos">7144</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">)</span>
</span><span id="L-7145"><a href="#L-7145"><span class="linenos">7145</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TYPE&quot;</span><span class="p">)</span>
</span><span id="L-7146"><a href="#L-7146"><span class="linenos">7146</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7147"><a href="#L-7147"><span class="linenos">7147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
</span><span id="L-7148"><a href="#L-7148"><span class="linenos">7148</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
</span><span id="L-7149"><a href="#L-7149"><span class="linenos">7149</span></a> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(),</span>
</span><span id="L-7150"><a href="#L-7150"><span class="linenos">7150</span></a> <span class="n">collate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
</span><span id="L-7151"><a href="#L-7151"><span class="linenos">7151</span></a> <span class="n">using</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span>
</span><span id="L-7152"><a href="#L-7152"><span class="linenos">7152</span></a> <span class="p">)</span>
</span><span id="L-7153"><a href="#L-7153"><span class="linenos">7153</span></a>
</span><span id="L-7154"><a href="#L-7154"><span class="linenos">7154</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_diststyle</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterDistStyle</span><span class="p">:</span>
</span><span id="L-7155"><a href="#L-7155"><span class="linenos">7155</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;EVEN&quot;</span><span class="p">,</span> <span class="s2">&quot;AUTO&quot;</span><span class="p">)):</span>
</span><span id="L-7156"><a href="#L-7156"><span class="linenos">7156</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterDistStyle</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">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()))</span>
</span><span id="L-7157"><a href="#L-7157"><span class="linenos">7157</span></a>
</span><span id="L-7158"><a href="#L-7158"><span class="linenos">7158</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">,</span> <span class="s2">&quot;DISTKEY&quot;</span><span class="p">)</span>
</span><span id="L-7159"><a href="#L-7159"><span class="linenos">7159</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterDistStyle</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">())</span>
</span><span id="L-7160"><a href="#L-7160"><span class="linenos">7160</span></a>
</span><span id="L-7161"><a href="#L-7161"><span class="linenos">7161</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_sortkey</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">compound</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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterSortKey</span><span class="p">:</span>
</span><span id="L-7162"><a href="#L-7162"><span class="linenos">7162</span></a> <span class="k">if</span> <span class="n">compound</span><span class="p">:</span>
</span><span id="L-7163"><a href="#L-7163"><span class="linenos">7163</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SORTKEY&quot;</span><span class="p">)</span>
</span><span id="L-7164"><a href="#L-7164"><span class="linenos">7164</span></a>
</span><span id="L-7165"><a href="#L-7165"><span class="linenos">7165</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-7166"><a href="#L-7166"><span class="linenos">7166</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7167"><a href="#L-7167"><span class="linenos">7167</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterSortKey</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</span>
</span><span id="L-7168"><a href="#L-7168"><span class="linenos">7168</span></a> <span class="p">)</span>
</span><span id="L-7169"><a href="#L-7169"><span class="linenos">7169</span></a>
</span><span id="L-7170"><a href="#L-7170"><span class="linenos">7170</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;AUTO&quot;</span><span class="p">,</span> <span class="s2">&quot;NONE&quot;</span><span class="p">))</span>
</span><span id="L-7171"><a href="#L-7171"><span class="linenos">7171</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7172"><a href="#L-7172"><span class="linenos">7172</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterSortKey</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">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</span>
</span><span id="L-7173"><a href="#L-7173"><span class="linenos">7173</span></a> <span class="p">)</span>
</span><span id="L-7174"><a href="#L-7174"><span class="linenos">7174</span></a>
</span><span id="L-7175"><a href="#L-7175"><span class="linenos">7175</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_table_drop</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-7176"><a href="#L-7176"><span class="linenos">7176</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
</span><span id="L-7177"><a href="#L-7177"><span class="linenos">7177</span></a>
</span><span id="L-7178"><a href="#L-7178"><span class="linenos">7178</span></a> <span class="n">partition_exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
</span><span id="L-7179"><a href="#L-7179"><span class="linenos">7179</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-7180"><a href="#L-7180"><span class="linenos">7180</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_partition</span><span class="p">(</span><span class="n">exists</span><span class="o">=</span><span class="n">partition_exists</span><span class="p">))</span>
</span><span id="L-7181"><a href="#L-7181"><span class="linenos">7181</span></a>
</span><span id="L-7182"><a href="#L-7182"><span class="linenos">7182</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-7183"><a href="#L-7183"><span class="linenos">7183</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_column</span><span class="p">)</span>
</span><span id="L-7184"><a href="#L-7184"><span class="linenos">7184</span></a>
</span><span id="L-7185"><a href="#L-7185"><span class="linenos">7185</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_table_rename</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">AlterRename</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">]:</span>
</span><span id="L-7186"><a href="#L-7186"><span class="linenos">7186</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">):</span>
</span><span id="L-7187"><a href="#L-7187"><span class="linenos">7187</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
</span><span id="L-7188"><a href="#L-7188"><span class="linenos">7188</span></a> <span class="n">old_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-7189"><a href="#L-7189"><span class="linenos">7189</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
</span><span id="L-7190"><a href="#L-7190"><span class="linenos">7190</span></a> <span class="n">new_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-7191"><a href="#L-7191"><span class="linenos">7191</span></a>
</span><span id="L-7192"><a href="#L-7192"><span class="linenos">7192</span></a> <span class="k">if</span> <span class="n">old_column</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">to</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">new_column</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-7193"><a href="#L-7193"><span class="linenos">7193</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7194"><a href="#L-7194"><span class="linenos">7194</span></a>
</span><span id="L-7195"><a href="#L-7195"><span class="linenos">7195</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">old_column</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">new_column</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">)</span>
</span><span id="L-7196"><a href="#L-7196"><span class="linenos">7196</span></a>
</span><span id="L-7197"><a href="#L-7197"><span class="linenos">7197</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
</span><span id="L-7198"><a href="#L-7198"><span class="linenos">7198</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterRename</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="L-7199"><a href="#L-7199"><span class="linenos">7199</span></a>
</span><span id="L-7200"><a href="#L-7200"><span class="linenos">7200</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_table_set</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterSet</span><span class="p">:</span>
</span><span id="L-7201"><a href="#L-7201"><span class="linenos">7201</span></a> <span class="n">alter_set</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterSet</span><span class="p">)</span>
</span><span id="L-7202"><a href="#L-7202"><span class="linenos">7202</span></a>
</span><span id="L-7203"><a href="#L-7203"><span class="linenos">7203</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
</span><span id="L-7204"><a href="#L-7204"><span class="linenos">7204</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;PROPERTIES&quot;</span>
</span><span id="L-7205"><a href="#L-7205"><span class="linenos">7205</span></a> <span class="p">):</span>
</span><span id="L-7206"><a href="#L-7206"><span class="linenos">7206</span></a> <span class="n">alter_set</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="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">))</span>
</span><span id="L-7207"><a href="#L-7207"><span class="linenos">7207</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FILESTREAM_ON&quot;</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-7208"><a href="#L-7208"><span class="linenos">7208</span></a> <span class="n">alter_set</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="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()])</span>
</span><span id="L-7209"><a href="#L-7209"><span class="linenos">7209</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;LOGGED&quot;</span><span class="p">,</span> <span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)):</span>
</span><span id="L-7210"><a href="#L-7210"><span class="linenos">7210</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;option&quot;</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="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()))</span>
</span><span id="L-7211"><a href="#L-7211"><span class="linenos">7211</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;CLUSTER&quot;</span><span class="p">,</span> <span class="s2">&quot;OIDS&quot;</span><span class="p">)):</span>
</span><span id="L-7212"><a href="#L-7212"><span class="linenos">7212</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;option&quot;</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="sa">f</span><span class="s2">&quot;WITHOUT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">))</span>
</span><span id="L-7213"><a href="#L-7213"><span class="linenos">7213</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LOCATION&quot;</span><span class="p">):</span>
</span><span id="L-7214"><a href="#L-7214"><span class="linenos">7214</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;location&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="L-7215"><a href="#L-7215"><span class="linenos">7215</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ACCESS&quot;</span><span class="p">,</span> <span class="s2">&quot;METHOD&quot;</span><span class="p">):</span>
</span><span id="L-7216"><a href="#L-7216"><span class="linenos">7216</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;access_method&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="L-7217"><a href="#L-7217"><span class="linenos">7217</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLESPACE&quot;</span><span class="p">):</span>
</span><span id="L-7218"><a href="#L-7218"><span class="linenos">7218</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;tablespace&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="L-7219"><a href="#L-7219"><span class="linenos">7219</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FILE&quot;</span><span class="p">,</span> <span class="s2">&quot;FORMAT&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FILEFORMAT&quot;</span><span class="p">):</span>
</span><span id="L-7220"><a href="#L-7220"><span class="linenos">7220</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;file_format&quot;</span><span class="p">,</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()])</span>
</span><span id="L-7221"><a href="#L-7221"><span class="linenos">7221</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STAGE_FILE_FORMAT&quot;</span><span class="p">):</span>
</span><span id="L-7222"><a href="#L-7222"><span class="linenos">7222</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;file_format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_options</span><span class="p">())</span>
</span><span id="L-7223"><a href="#L-7223"><span class="linenos">7223</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STAGE_COPY_OPTIONS&quot;</span><span class="p">):</span>
</span><span id="L-7224"><a href="#L-7224"><span class="linenos">7224</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;copy_options&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_options</span><span class="p">())</span>
</span><span id="L-7225"><a href="#L-7225"><span class="linenos">7225</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TAG&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TAGS&quot;</span><span class="p">):</span>
</span><span id="L-7226"><a href="#L-7226"><span class="linenos">7226</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">))</span>
</span><span id="L-7227"><a href="#L-7227"><span class="linenos">7227</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7228"><a href="#L-7228"><span class="linenos">7228</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SERDE&quot;</span><span class="p">):</span>
</span><span id="L-7229"><a href="#L-7229"><span class="linenos">7229</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;serde&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="L-7230"><a href="#L-7230"><span class="linenos">7230</span></a>
</span><span id="L-7231"><a href="#L-7231"><span class="linenos">7231</span></a> <span class="n">alter_set</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="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()])</span>
</span><span id="L-7232"><a href="#L-7232"><span class="linenos">7232</span></a>
</span><span id="L-7233"><a href="#L-7233"><span class="linenos">7233</span></a> <span class="k">return</span> <span class="n">alter_set</span>
</span><span id="L-7234"><a href="#L-7234"><span class="linenos">7234</span></a>
</span><span id="L-7235"><a href="#L-7235"><span class="linenos">7235</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alter</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="L-7236"><a href="#L-7236"><span class="linenos">7236</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-7237"><a href="#L-7237"><span class="linenos">7237</span></a>
</span><span id="L-7238"><a href="#L-7238"><span class="linenos">7238</span></a> <span class="n">alter_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ALTERABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-7239"><a href="#L-7239"><span class="linenos">7239</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alter_token</span><span class="p">:</span>
</span><span id="L-7240"><a href="#L-7240"><span class="linenos">7240</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="L-7241"><a href="#L-7241"><span class="linenos">7241</span></a>
</span><span id="L-7242"><a href="#L-7242"><span class="linenos">7242</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
</span><span id="L-7243"><a href="#L-7243"><span class="linenos">7243</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
</span><span id="L-7244"><a href="#L-7244"><span class="linenos">7244</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-7245"><a href="#L-7245"><span class="linenos">7245</span></a> <span class="n">cluster</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_property</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-7246"><a href="#L-7246"><span class="linenos">7246</span></a>
</span><span id="L-7247"><a href="#L-7247"><span class="linenos">7247</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
</span><span id="L-7248"><a href="#L-7248"><span class="linenos">7248</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-7249"><a href="#L-7249"><span class="linenos">7249</span></a>
</span><span id="L-7250"><a href="#L-7250"><span class="linenos">7250</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-7251"><a href="#L-7251"><span class="linenos">7251</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
</span><span id="L-7252"><a href="#L-7252"><span class="linenos">7252</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
</span><span id="L-7253"><a href="#L-7253"><span class="linenos">7253</span></a> <span class="n">not_valid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;VALID&quot;</span><span class="p">)</span>
</span><span id="L-7254"><a href="#L-7254"><span class="linenos">7254</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">)</span>
</span><span id="L-7255"><a href="#L-7255"><span class="linenos">7255</span></a>
</span><span id="L-7256"><a href="#L-7256"><span class="linenos">7256</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">actions</span><span class="p">:</span>
</span><span id="L-7257"><a href="#L-7257"><span class="linenos">7257</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7258"><a href="#L-7258"><span class="linenos">7258</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alter</span><span class="p">,</span>
</span><span id="L-7259"><a href="#L-7259"><span class="linenos">7259</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-7260"><a href="#L-7260"><span class="linenos">7260</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">alter_token</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span>
</span><span id="L-7261"><a href="#L-7261"><span class="linenos">7261</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
</span><span id="L-7262"><a href="#L-7262"><span class="linenos">7262</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
</span><span id="L-7263"><a href="#L-7263"><span class="linenos">7263</span></a> <span class="n">only</span><span class="o">=</span><span class="n">only</span><span class="p">,</span>
</span><span id="L-7264"><a href="#L-7264"><span class="linenos">7264</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
</span><span id="L-7265"><a href="#L-7265"><span class="linenos">7265</span></a> <span class="n">cluster</span><span class="o">=</span><span class="n">cluster</span><span class="p">,</span>
</span><span id="L-7266"><a href="#L-7266"><span class="linenos">7266</span></a> <span class="n">not_valid</span><span class="o">=</span><span class="n">not_valid</span><span class="p">,</span>
</span><span id="L-7267"><a href="#L-7267"><span class="linenos">7267</span></a> <span class="p">)</span>
</span><span id="L-7268"><a href="#L-7268"><span class="linenos">7268</span></a>
</span><span id="L-7269"><a href="#L-7269"><span class="linenos">7269</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="L-7270"><a href="#L-7270"><span class="linenos">7270</span></a>
</span><span id="L-7271"><a href="#L-7271"><span class="linenos">7271</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Analyze</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="L-7272"><a href="#L-7272"><span class="linenos">7272</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-7273"><a href="#L-7273"><span class="linenos">7273</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/analyze</span>
</span><span id="L-7274"><a href="#L-7274"><span class="linenos">7274</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-7275"><a href="#L-7275"><span class="linenos">7275</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Analyze</span><span class="p">)</span>
</span><span id="L-7276"><a href="#L-7276"><span class="linenos">7276</span></a>
</span><span id="L-7277"><a href="#L-7277"><span class="linenos">7277</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-7278"><a href="#L-7278"><span class="linenos">7278</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ANALYZE_STYLES</span><span class="p">):</span>
</span><span id="L-7279"><a href="#L-7279"><span class="linenos">7279</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;BUFFER_USAGE_LIMIT&quot;</span><span class="p">:</span>
</span><span id="L-7280"><a href="#L-7280"><span class="linenos">7280</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;BUFFER_USAGE_LIMIT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-7281"><a href="#L-7281"><span class="linenos">7281</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7282"><a href="#L-7282"><span class="linenos">7282</span></a> <span class="n">options</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-7283"><a href="#L-7283"><span class="linenos">7283</span></a>
</span><span id="L-7284"><a href="#L-7284"><span class="linenos">7284</span></a> <span class="n">this</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 class="o">=</span> <span class="kc">None</span>
</span><span id="L-7285"><a href="#L-7285"><span class="linenos">7285</span></a> <span class="n">inner_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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7286"><a href="#L-7286"><span class="linenos">7286</span></a>
</span><span id="L-7287"><a href="#L-7287"><span class="linenos">7287</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-7288"><a href="#L-7288"><span class="linenos">7288</span></a>
</span><span id="L-7289"><a href="#L-7289"><span class="linenos">7289</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">):</span>
</span><span id="L-7290"><a href="#L-7290"><span class="linenos">7290</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
</span><span id="L-7291"><a href="#L-7291"><span class="linenos">7291</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">):</span>
</span><span id="L-7292"><a href="#L-7292"><span class="linenos">7292</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)):</span>
</span><span id="L-7293"><a href="#L-7293"><span class="linenos">7293</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-7294"><a href="#L-7294"><span class="linenos">7294</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-7295"><a href="#L-7295"><span class="linenos">7295</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DATABASE&quot;</span><span class="p">):</span>
</span><span id="L-7296"><a href="#L-7296"><span class="linenos">7296</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-7297"><a href="#L-7297"><span class="linenos">7297</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CLUSTER&quot;</span><span class="p">):</span>
</span><span id="L-7298"><a href="#L-7298"><span class="linenos">7298</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="L-7299"><a href="#L-7299"><span class="linenos">7299</span></a> <span class="c1"># Try matching inner expr keywords before fallback to parse table.</span>
</span><span id="L-7300"><a href="#L-7300"><span class="linenos">7300</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ANALYZE_EXPRESSION_PARSERS</span><span class="p">):</span>
</span><span id="L-7301"><a href="#L-7301"><span class="linenos">7301</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7302"><a href="#L-7302"><span class="linenos">7302</span></a> <span class="n">inner_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANALYZE_EXPRESSION_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-7303"><a href="#L-7303"><span class="linenos">7303</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7304"><a href="#L-7304"><span class="linenos">7304</span></a> <span class="c1"># Empty kind https://prestodb.io/docs/current/sql/analyze.html</span>
</span><span id="L-7305"><a href="#L-7305"><span class="linenos">7305</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7306"><a href="#L-7306"><span class="linenos">7306</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
</span><span id="L-7307"><a href="#L-7307"><span class="linenos">7307</span></a>
</span><span id="L-7308"><a href="#L-7308"><span class="linenos">7308</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_try_parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">)</span>
</span><span id="L-7309"><a href="#L-7309"><span class="linenos">7309</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">partition</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PARTITION_KEYWORDS</span><span class="p">):</span>
</span><span id="L-7310"><a href="#L-7310"><span class="linenos">7310</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="L-7311"><a href="#L-7311"><span class="linenos">7311</span></a>
</span><span id="L-7312"><a href="#L-7312"><span class="linenos">7312</span></a> <span class="c1"># https://docs.starrocks.io/docs/sql-reference/sql-statements/cbo_stats/ANALYZE_TABLE/</span>
</span><span id="L-7313"><a href="#L-7313"><span class="linenos">7313</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;SYNC&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
</span><span id="L-7314"><a href="#L-7314"><span class="linenos">7314</span></a> <span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;ASYNC&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
</span><span id="L-7315"><a href="#L-7315"><span class="linenos">7315</span></a> <span class="p">):</span>
</span><span id="L-7316"><a href="#L-7316"><span class="linenos">7316</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2"> MODE&quot;</span>
</span><span id="L-7317"><a href="#L-7317"><span class="linenos">7317</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7318"><a href="#L-7318"><span class="linenos">7318</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7319"><a href="#L-7319"><span class="linenos">7319</span></a>
</span><span id="L-7320"><a href="#L-7320"><span class="linenos">7320</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ANALYZE_EXPRESSION_PARSERS</span><span class="p">):</span>
</span><span id="L-7321"><a href="#L-7321"><span class="linenos">7321</span></a> <span class="n">inner_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANALYZE_EXPRESSION_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-7322"><a href="#L-7322"><span class="linenos">7322</span></a>
</span><span id="L-7323"><a href="#L-7323"><span class="linenos">7323</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
</span><span id="L-7324"><a href="#L-7324"><span class="linenos">7324</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7325"><a href="#L-7325"><span class="linenos">7325</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Analyze</span><span class="p">,</span>
</span><span id="L-7326"><a href="#L-7326"><span class="linenos">7326</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="L-7327"><a href="#L-7327"><span class="linenos">7327</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-7328"><a href="#L-7328"><span class="linenos">7328</span></a> <span class="n">mode</span><span class="o">=</span><span class="n">mode</span><span class="p">,</span>
</span><span id="L-7329"><a href="#L-7329"><span class="linenos">7329</span></a> <span class="n">partition</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
</span><span id="L-7330"><a href="#L-7330"><span class="linenos">7330</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties</span><span class="p">,</span>
</span><span id="L-7331"><a href="#L-7331"><span class="linenos">7331</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">inner_expression</span><span class="p">,</span>
</span><span id="L-7332"><a href="#L-7332"><span class="linenos">7332</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
</span><span id="L-7333"><a href="#L-7333"><span class="linenos">7333</span></a> <span class="p">)</span>
</span><span id="L-7334"><a href="#L-7334"><span class="linenos">7334</span></a>
</span><span id="L-7335"><a href="#L-7335"><span class="linenos">7335</span></a> <span class="c1"># https://spark.apache.org/docs/3.5.1/sql-ref-syntax-aux-analyze-table.html</span>
</span><span id="L-7336"><a href="#L-7336"><span class="linenos">7336</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze_statistics</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeStatistics</span><span class="p">:</span>
</span><span id="L-7337"><a href="#L-7337"><span class="linenos">7337</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7338"><a href="#L-7338"><span class="linenos">7338</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-7339"><a href="#L-7339"><span class="linenos">7339</span></a> <span class="n">option</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DELTA&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-7340"><a href="#L-7340"><span class="linenos">7340</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-7341"><a href="#L-7341"><span class="linenos">7341</span></a>
</span><span id="L-7342"><a href="#L-7342"><span class="linenos">7342</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
</span><span id="L-7343"><a href="#L-7343"><span class="linenos">7343</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting token STATISTICS&quot;</span><span class="p">)</span>
</span><span id="L-7344"><a href="#L-7344"><span class="linenos">7344</span></a>
</span><span id="L-7345"><a href="#L-7345"><span class="linenos">7345</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOSCAN&quot;</span><span class="p">):</span>
</span><span id="L-7346"><a href="#L-7346"><span class="linenos">7346</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;NOSCAN&quot;</span>
</span><span id="L-7347"><a href="#L-7347"><span class="linenos">7347</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
</span><span id="L-7348"><a href="#L-7348"><span class="linenos">7348</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">):</span>
</span><span id="L-7349"><a href="#L-7349"><span class="linenos">7349</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;FOR ALL COLUMNS&quot;</span>
</span><span id="L-7350"><a href="#L-7350"><span class="linenos">7350</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">):</span>
</span><span id="L-7351"><a href="#L-7351"><span class="linenos">7351</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;FOR COLUMNS&quot;</span>
</span><span id="L-7352"><a href="#L-7352"><span class="linenos">7352</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">)</span>
</span><span id="L-7353"><a href="#L-7353"><span class="linenos">7353</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SAMPLE&quot;</span><span class="p">):</span>
</span><span id="L-7354"><a href="#L-7354"><span class="linenos">7354</span></a> <span class="n">sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="L-7355"><a href="#L-7355"><span class="linenos">7355</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="L-7356"><a href="#L-7356"><span class="linenos">7356</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7357"><a href="#L-7357"><span class="linenos">7357</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeSample</span><span class="p">,</span>
</span><span id="L-7358"><a href="#L-7358"><span class="linenos">7358</span></a> <span class="n">sample</span><span class="o">=</span><span class="n">sample</span><span class="p">,</span>
</span><span id="L-7359"><a href="#L-7359"><span class="linenos">7359</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-7360"><a href="#L-7360"><span class="linenos">7360</span></a> <span class="p">)</span>
</span><span id="L-7361"><a href="#L-7361"><span class="linenos">7361</span></a> <span class="p">]</span>
</span><span id="L-7362"><a href="#L-7362"><span class="linenos">7362</span></a>
</span><span id="L-7363"><a href="#L-7363"><span class="linenos">7363</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7364"><a href="#L-7364"><span class="linenos">7364</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeStatistics</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">option</span><span class="o">=</span><span class="n">option</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">expressions</span><span class="o">=</span><span class="n">expressions</span>
</span><span id="L-7365"><a href="#L-7365"><span class="linenos">7365</span></a> <span class="p">)</span>
</span><span id="L-7366"><a href="#L-7366"><span class="linenos">7366</span></a>
</span><span id="L-7367"><a href="#L-7367"><span class="linenos">7367</span></a> <span class="c1"># https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ANALYZE.html</span>
</span><span id="L-7368"><a href="#L-7368"><span class="linenos">7368</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze_validate</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeValidate</span><span class="p">:</span>
</span><span id="L-7369"><a href="#L-7369"><span class="linenos">7369</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7370"><a href="#L-7370"><span class="linenos">7370</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7371"><a href="#L-7371"><span class="linenos">7371</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7372"><a href="#L-7372"><span class="linenos">7372</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;REF&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">):</span>
</span><span id="L-7373"><a href="#L-7373"><span class="linenos">7373</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;REF&quot;</span>
</span><span id="L-7374"><a href="#L-7374"><span class="linenos">7374</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;UPDATE&quot;</span>
</span><span id="L-7375"><a href="#L-7375"><span class="linenos">7375</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;DANGLING&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
</span><span id="L-7376"><a href="#L-7376"><span class="linenos">7376</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;UPDATE SET DANGLING TO NULL&quot;</span>
</span><span id="L-7377"><a href="#L-7377"><span class="linenos">7377</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STRUCTURE&quot;</span><span class="p">):</span>
</span><span id="L-7378"><a href="#L-7378"><span class="linenos">7378</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;STRUCTURE&quot;</span>
</span><span id="L-7379"><a href="#L-7379"><span class="linenos">7379</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">,</span> <span class="s2">&quot;FAST&quot;</span><span class="p">):</span>
</span><span id="L-7380"><a href="#L-7380"><span class="linenos">7380</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;CASCADE FAST&quot;</span>
</span><span id="L-7381"><a href="#L-7381"><span class="linenos">7381</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">,</span> <span class="s2">&quot;COMPLETE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
</span><span id="L-7382"><a href="#L-7382"><span class="linenos">7382</span></a> <span class="p">(</span><span class="s2">&quot;ONLINE&quot;</span><span class="p">,</span> <span class="s2">&quot;OFFLINE&quot;</span><span class="p">)</span>
</span><span id="L-7383"><a href="#L-7383"><span class="linenos">7383</span></a> <span class="p">):</span>
</span><span id="L-7384"><a href="#L-7384"><span class="linenos">7384</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CASCADE COMPLETE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-7385"><a href="#L-7385"><span class="linenos">7385</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_into</span><span class="p">()</span>
</span><span id="L-7386"><a href="#L-7386"><span class="linenos">7386</span></a>
</span><span id="L-7387"><a href="#L-7387"><span class="linenos">7387</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeValidate</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</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">expression</span><span class="p">)</span>
</span><span id="L-7388"><a href="#L-7388"><span class="linenos">7388</span></a>
</span><span id="L-7389"><a href="#L-7389"><span class="linenos">7389</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze_columns</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">AnalyzeColumns</span><span class="p">]:</span>
</span><span id="L-7390"><a href="#L-7390"><span class="linenos">7390</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-7391"><a href="#L-7391"><span class="linenos">7391</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">):</span>
</span><span id="L-7392"><a href="#L-7392"><span class="linenos">7392</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeColumns</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-7393"><a href="#L-7393"><span class="linenos">7393</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7394"><a href="#L-7394"><span class="linenos">7394</span></a>
</span><span id="L-7395"><a href="#L-7395"><span class="linenos">7395</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze_delete</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">AnalyzeDelete</span><span class="p">]:</span>
</span><span id="L-7396"><a href="#L-7396"><span class="linenos">7396</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SYSTEM&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-7397"><a href="#L-7397"><span class="linenos">7397</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
</span><span id="L-7398"><a href="#L-7398"><span class="linenos">7398</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeDelete</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="L-7399"><a href="#L-7399"><span class="linenos">7399</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7400"><a href="#L-7400"><span class="linenos">7400</span></a>
</span><span id="L-7401"><a href="#L-7401"><span class="linenos">7401</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze_list</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">AnalyzeListChainedRows</span><span class="p">]:</span>
</span><span id="L-7402"><a href="#L-7402"><span class="linenos">7402</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
</span><span id="L-7403"><a href="#L-7403"><span class="linenos">7403</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeListChainedRows</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_into</span><span class="p">())</span>
</span><span id="L-7404"><a href="#L-7404"><span class="linenos">7404</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7405"><a href="#L-7405"><span class="linenos">7405</span></a>
</span><span id="L-7406"><a href="#L-7406"><span class="linenos">7406</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.4/en/analyze-table.html</span>
</span><span id="L-7407"><a href="#L-7407"><span class="linenos">7407</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze_histogram</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeHistogram</span><span class="p">:</span>
</span><span id="L-7408"><a href="#L-7408"><span class="linenos">7408</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-7409"><a href="#L-7409"><span class="linenos">7409</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7410"><a href="#L-7410"><span class="linenos">7410</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-7411"><a href="#L-7411"><span class="linenos">7411</span></a> <span class="n">update_options</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7412"><a href="#L-7412"><span class="linenos">7412</span></a>
</span><span id="L-7413"><a href="#L-7413"><span class="linenos">7413</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HISTOGRAM&quot;</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">):</span>
</span><span id="L-7414"><a href="#L-7414"><span class="linenos">7414</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">)</span>
</span><span id="L-7415"><a href="#L-7415"><span class="linenos">7415</span></a> <span class="n">with_expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-7416"><a href="#L-7416"><span class="linenos">7416</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
</span><span id="L-7417"><a href="#L-7417"><span class="linenos">7417</span></a> <span class="c1"># https://docs.starrocks.io/docs/sql-reference/sql-statements/cbo_stats/ANALYZE_TABLE/</span>
</span><span id="L-7418"><a href="#L-7418"><span class="linenos">7418</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;SYNC&quot;</span><span class="p">,</span> <span class="s2">&quot;ASYNC&quot;</span><span class="p">)):</span>
</span><span id="L-7419"><a href="#L-7419"><span class="linenos">7419</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MODE&quot;</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-7420"><a href="#L-7420"><span class="linenos">7420</span></a> <span class="n">with_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2"> MODE&quot;</span><span class="p">)</span>
</span><span id="L-7421"><a href="#L-7421"><span class="linenos">7421</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-7422"><a href="#L-7422"><span class="linenos">7422</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7423"><a href="#L-7423"><span class="linenos">7423</span></a> <span class="n">buckets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="L-7424"><a href="#L-7424"><span class="linenos">7424</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKETS&quot;</span><span class="p">):</span>
</span><span id="L-7425"><a href="#L-7425"><span class="linenos">7425</span></a> <span class="n">with_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span><span class="p">)</span>
</span><span id="L-7426"><a href="#L-7426"><span class="linenos">7426</span></a> <span class="k">if</span> <span class="n">with_expressions</span><span class="p">:</span>
</span><span id="L-7427"><a href="#L-7427"><span class="linenos">7427</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeWith</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">with_expressions</span><span class="p">)</span>
</span><span id="L-7428"><a href="#L-7428"><span class="linenos">7428</span></a>
</span><span id="L-7429"><a href="#L-7429"><span class="linenos">7429</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MANUAL&quot;</span><span class="p">,</span> <span class="s2">&quot;AUTO&quot;</span><span class="p">))</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span>
</span><span id="L-7430"><a href="#L-7430"><span class="linenos">7430</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span>
</span><span id="L-7431"><a href="#L-7431"><span class="linenos">7431</span></a> <span class="p">):</span>
</span><span id="L-7432"><a href="#L-7432"><span class="linenos">7432</span></a> <span class="n">update_options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-7433"><a href="#L-7433"><span class="linenos">7433</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-7434"><a href="#L-7434"><span class="linenos">7434</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">):</span>
</span><span id="L-7435"><a href="#L-7435"><span class="linenos">7435</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">UsingData</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
</span><span id="L-7436"><a href="#L-7436"><span class="linenos">7436</span></a>
</span><span id="L-7437"><a href="#L-7437"><span class="linenos">7437</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7438"><a href="#L-7438"><span class="linenos">7438</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeHistogram</span><span class="p">,</span>
</span><span id="L-7439"><a href="#L-7439"><span class="linenos">7439</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-7440"><a href="#L-7440"><span class="linenos">7440</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-7441"><a href="#L-7441"><span class="linenos">7441</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="L-7442"><a href="#L-7442"><span class="linenos">7442</span></a> <span class="n">update_options</span><span class="o">=</span><span class="n">update_options</span><span class="p">,</span>
</span><span id="L-7443"><a href="#L-7443"><span class="linenos">7443</span></a> <span class="p">)</span>
</span><span id="L-7444"><a href="#L-7444"><span class="linenos">7444</span></a>
</span><span id="L-7445"><a href="#L-7445"><span class="linenos">7445</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_merge</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span>
</span><span id="L-7446"><a href="#L-7446"><span class="linenos">7446</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span>
</span><span id="L-7447"><a href="#L-7447"><span class="linenos">7447</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="L-7448"><a href="#L-7448"><span class="linenos">7448</span></a>
</span><span id="L-7449"><a href="#L-7449"><span class="linenos">7449</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-7450"><a href="#L-7450"><span class="linenos">7450</span></a> <span class="n">target</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
</span><span id="L-7451"><a href="#L-7451"><span class="linenos">7451</span></a>
</span><span id="L-7452"><a href="#L-7452"><span class="linenos">7452</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span>
</span><span id="L-7453"><a href="#L-7453"><span class="linenos">7453</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="L-7454"><a href="#L-7454"><span class="linenos">7454</span></a>
</span><span id="L-7455"><a href="#L-7455"><span class="linenos">7455</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
</span><span id="L-7456"><a href="#L-7456"><span class="linenos">7456</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="L-7457"><a href="#L-7457"><span class="linenos">7457</span></a>
</span><span id="L-7458"><a href="#L-7458"><span class="linenos">7458</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7459"><a href="#L-7459"><span class="linenos">7459</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
</span><span id="L-7460"><a href="#L-7460"><span class="linenos">7460</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
</span><span id="L-7461"><a href="#L-7461"><span class="linenos">7461</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
</span><span id="L-7462"><a href="#L-7462"><span class="linenos">7462</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
</span><span id="L-7463"><a href="#L-7463"><span class="linenos">7463</span></a> <span class="n">whens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_when_matched</span><span class="p">(),</span>
</span><span id="L-7464"><a href="#L-7464"><span class="linenos">7464</span></a> <span class="n">returning</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
</span><span id="L-7465"><a href="#L-7465"><span class="linenos">7465</span></a> <span class="p">)</span>
</span><span id="L-7466"><a href="#L-7466"><span class="linenos">7466</span></a>
</span><span id="L-7467"><a href="#L-7467"><span class="linenos">7467</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_when_matched</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Whens</span><span class="p">:</span>
</span><span id="L-7468"><a href="#L-7468"><span class="linenos">7468</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-7469"><a href="#L-7469"><span class="linenos">7469</span></a>
</span><span id="L-7470"><a href="#L-7470"><span class="linenos">7470</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
</span><span id="L-7471"><a href="#L-7471"><span class="linenos">7471</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
</span><span id="L-7472"><a href="#L-7472"><span class="linenos">7472</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCHED&quot;</span><span class="p">)</span>
</span><span id="L-7473"><a href="#L-7473"><span class="linenos">7473</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-7474"><a href="#L-7474"><span class="linenos">7474</span></a> <span class="kc">False</span>
</span><span id="L-7475"><a href="#L-7475"><span class="linenos">7475</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;TARGET&quot;</span><span class="p">)</span>
</span><span id="L-7476"><a href="#L-7476"><span class="linenos">7476</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE&quot;</span><span class="p">)</span>
</span><span id="L-7477"><a href="#L-7477"><span class="linenos">7477</span></a> <span class="p">)</span>
</span><span id="L-7478"><a href="#L-7478"><span class="linenos">7478</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-7479"><a href="#L-7479"><span class="linenos">7479</span></a>
</span><span id="L-7480"><a href="#L-7480"><span class="linenos">7480</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
</span><span id="L-7481"><a href="#L-7481"><span class="linenos">7481</span></a>
</span><span id="L-7482"><a href="#L-7482"><span class="linenos">7482</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">):</span>
</span><span id="L-7483"><a href="#L-7483"><span class="linenos">7483</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
</span><span id="L-7484"><a href="#L-7484"><span class="linenos">7484</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
</span><span id="L-7485"><a href="#L-7485"><span class="linenos">7485</span></a> <span class="n">then</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 class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Insert</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-7486"><a href="#L-7486"><span class="linenos">7486</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7487"><a href="#L-7487"><span class="linenos">7487</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7488"><a href="#L-7488"><span class="linenos">7488</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
</span><span id="L-7489"><a href="#L-7489"><span class="linenos">7489</span></a> <span class="n">this</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="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
</span><span id="L-7490"><a href="#L-7490"><span class="linenos">7490</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUES&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
</span><span id="L-7491"><a href="#L-7491"><span class="linenos">7491</span></a> <span class="p">)</span>
</span><span id="L-7492"><a href="#L-7492"><span class="linenos">7492</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">):</span>
</span><span id="L-7493"><a href="#L-7493"><span class="linenos">7493</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
</span><span id="L-7494"><a href="#L-7494"><span class="linenos">7494</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
</span><span id="L-7495"><a href="#L-7495"><span class="linenos">7495</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-7496"><a href="#L-7496"><span class="linenos">7496</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7497"><a href="#L-7497"><span class="linenos">7497</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7498"><a href="#L-7498"><span class="linenos">7498</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
</span><span id="L-7499"><a href="#L-7499"><span class="linenos">7499</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">)</span>
</span><span id="L-7500"><a href="#L-7500"><span class="linenos">7500</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">),</span>
</span><span id="L-7501"><a href="#L-7501"><span class="linenos">7501</span></a> <span class="p">)</span>
</span><span id="L-7502"><a href="#L-7502"><span class="linenos">7502</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">):</span>
</span><span id="L-7503"><a href="#L-7503"><span class="linenos">7503</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-7504"><a href="#L-7504"><span class="linenos">7504</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7505"><a href="#L-7505"><span class="linenos">7505</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONFLICT_ACTIONS</span><span class="p">)</span>
</span><span id="L-7506"><a href="#L-7506"><span class="linenos">7506</span></a>
</span><span id="L-7507"><a href="#L-7507"><span class="linenos">7507</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="L-7508"><a href="#L-7508"><span class="linenos">7508</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7509"><a href="#L-7509"><span class="linenos">7509</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
</span><span id="L-7510"><a href="#L-7510"><span class="linenos">7510</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
</span><span id="L-7511"><a href="#L-7511"><span class="linenos">7511</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
</span><span id="L-7512"><a href="#L-7512"><span class="linenos">7512</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
</span><span id="L-7513"><a href="#L-7513"><span class="linenos">7513</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
</span><span id="L-7514"><a href="#L-7514"><span class="linenos">7514</span></a> <span class="p">)</span>
</span><span id="L-7515"><a href="#L-7515"><span class="linenos">7515</span></a> <span class="p">)</span>
</span><span id="L-7516"><a href="#L-7516"><span class="linenos">7516</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Whens</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">whens</span><span class="p">)</span>
</span><span id="L-7517"><a href="#L-7517"><span class="linenos">7517</span></a>
</span><span id="L-7518"><a href="#L-7518"><span class="linenos">7518</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_show</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-7519"><a href="#L-7519"><span class="linenos">7519</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
</span><span id="L-7520"><a href="#L-7520"><span class="linenos">7520</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
</span><span id="L-7521"><a href="#L-7521"><span class="linenos">7521</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</span><span id="L-7522"><a href="#L-7522"><span class="linenos">7522</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-7523"><a href="#L-7523"><span class="linenos">7523</span></a>
</span><span id="L-7524"><a href="#L-7524"><span class="linenos">7524</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
</span><span id="L-7525"><a href="#L-7525"><span class="linenos">7525</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</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-7526"><a href="#L-7526"><span class="linenos">7526</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-7527"><a href="#L-7527"><span class="linenos">7527</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-7528"><a href="#L-7528"><span class="linenos">7528</span></a>
</span><span id="L-7529"><a href="#L-7529"><span class="linenos">7529</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;GLOBAL&quot;</span><span class="p">,</span> <span class="s2">&quot;SESSION&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">):</span>
</span><span id="L-7530"><a href="#L-7530"><span class="linenos">7530</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_transaction</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">)</span>
</span><span id="L-7531"><a href="#L-7531"><span class="linenos">7531</span></a>
</span><span id="L-7532"><a href="#L-7532"><span class="linenos">7532</span></a> <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-7533"><a href="#L-7533"><span class="linenos">7533</span></a> <span class="n">assignment_delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;=&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">))</span>
</span><span id="L-7534"><a href="#L-7534"><span class="linenos">7534</span></a>
</span><span id="L-7535"><a href="#L-7535"><span class="linenos">7535</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">left</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_REQUIRES_ASSIGNMENT_DELIMITER</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">assignment_delimiter</span><span class="p">):</span>
</span><span id="L-7536"><a href="#L-7536"><span class="linenos">7536</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-7537"><a href="#L-7537"><span class="linenos">7537</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7538"><a href="#L-7538"><span class="linenos">7538</span></a>
</span><span id="L-7539"><a href="#L-7539"><span class="linenos">7539</span></a> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-7540"><a href="#L-7540"><span class="linenos">7540</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">right</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)):</span>
</span><span id="L-7541"><a href="#L-7541"><span class="linenos">7541</span></a> <span class="n">right</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">right</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="L-7542"><a href="#L-7542"><span class="linenos">7542</span></a>
</span><span id="L-7543"><a href="#L-7543"><span class="linenos">7543</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</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-7544"><a href="#L-7544"><span class="linenos">7544</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="L-7545"><a href="#L-7545"><span class="linenos">7545</span></a>
</span><span id="L-7546"><a href="#L-7546"><span class="linenos">7546</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_set_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="L-7547"><a href="#L-7547"><span class="linenos">7547</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)</span>
</span><span id="L-7548"><a href="#L-7548"><span class="linenos">7548</span></a> <span class="n">characteristics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="L-7549"><a href="#L-7549"><span class="linenos">7549</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_CHARACTERISTICS</span><span class="p">)</span>
</span><span id="L-7550"><a href="#L-7550"><span class="linenos">7550</span></a> <span class="p">)</span>
</span><span id="L-7551"><a href="#L-7551"><span class="linenos">7551</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7552"><a href="#L-7552"><span class="linenos">7552</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
</span><span id="L-7553"><a href="#L-7553"><span class="linenos">7553</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
</span><span id="L-7554"><a href="#L-7554"><span class="linenos">7554</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span>
</span><span id="L-7555"><a href="#L-7555"><span class="linenos">7555</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="n">global_</span><span class="p">},</span> <span class="c1"># type: ignore</span>
</span><span id="L-7556"><a href="#L-7556"><span class="linenos">7556</span></a> <span class="p">)</span>
</span><span id="L-7557"><a href="#L-7557"><span class="linenos">7557</span></a>
</span><span id="L-7558"><a href="#L-7558"><span class="linenos">7558</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_set_item</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-7559"><a href="#L-7559"><span class="linenos">7559</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
</span><span id="L-7560"><a href="#L-7560"><span class="linenos">7560</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">if</span> <span class="n">parser</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</span><span id="L-7561"><a href="#L-7561"><span class="linenos">7561</span></a>
</span><span id="L-7562"><a href="#L-7562"><span class="linenos">7562</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</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="n">tag</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">exp</span><span class="o">.</span><span class="n">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="L-7563"><a href="#L-7563"><span class="linenos">7563</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-7564"><a href="#L-7564"><span class="linenos">7564</span></a> <span class="n">set_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7565"><a href="#L-7565"><span class="linenos">7565</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
</span><span id="L-7566"><a href="#L-7566"><span class="linenos">7566</span></a> <span class="p">)</span>
</span><span id="L-7567"><a href="#L-7567"><span class="linenos">7567</span></a>
</span><span id="L-7568"><a href="#L-7568"><span class="linenos">7568</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-7569"><a href="#L-7569"><span class="linenos">7569</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-7570"><a href="#L-7570"><span class="linenos">7570</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-7571"><a href="#L-7571"><span class="linenos">7571</span></a>
</span><span id="L-7572"><a href="#L-7572"><span class="linenos">7572</span></a> <span class="k">return</span> <span class="n">set_</span>
</span><span id="L-7573"><a href="#L-7573"><span class="linenos">7573</span></a>
</span><span id="L-7574"><a href="#L-7574"><span class="linenos">7574</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_var_from_options</span><span class="p">(</span>
</span><span id="L-7575"><a href="#L-7575"><span class="linenos">7575</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="L-7576"><a href="#L-7576"><span class="linenos">7576</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">Var</span><span class="p">]:</span>
</span><span id="L-7577"><a href="#L-7577"><span class="linenos">7577</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="L-7578"><a href="#L-7578"><span class="linenos">7578</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span>
</span><span id="L-7579"><a href="#L-7579"><span class="linenos">7579</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7580"><a href="#L-7580"><span class="linenos">7580</span></a>
</span><span id="L-7581"><a href="#L-7581"><span class="linenos">7581</span></a> <span class="n">option</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-7582"><a href="#L-7582"><span class="linenos">7582</span></a> <span class="n">continuations</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
</span><span id="L-7583"><a href="#L-7583"><span class="linenos">7583</span></a>
</span><span id="L-7584"><a href="#L-7584"><span class="linenos">7584</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-7585"><a href="#L-7585"><span class="linenos">7585</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-7586"><a href="#L-7586"><span class="linenos">7586</span></a> <span class="k">for</span> <span class="n">keywords</span> <span class="ow">in</span> <span class="n">continuations</span> <span class="ow">or</span> <span class="p">[]:</span>
</span><span id="L-7587"><a href="#L-7587"><span class="linenos">7587</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">keywords</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="L-7588"><a href="#L-7588"><span class="linenos">7588</span></a> <span class="n">keywords</span> <span class="o">=</span> <span class="p">(</span><span class="n">keywords</span><span class="p">,)</span>
</span><span id="L-7589"><a href="#L-7589"><span class="linenos">7589</span></a>
</span><span id="L-7590"><a href="#L-7590"><span class="linenos">7590</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="o">*</span><span class="n">keywords</span><span class="p">):</span>
</span><span id="L-7591"><a href="#L-7591"><span class="linenos">7591</span></a> <span class="n">option</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">option</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">keywords</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="L-7592"><a href="#L-7592"><span class="linenos">7592</span></a> <span class="k">break</span>
</span><span id="L-7593"><a href="#L-7593"><span class="linenos">7593</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7594"><a href="#L-7594"><span class="linenos">7594</span></a> <span class="k">if</span> <span class="n">continuations</span> <span class="ow">or</span> <span class="n">continuations</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-7595"><a href="#L-7595"><span class="linenos">7595</span></a> <span class="k">if</span> <span class="n">raise_unmatched</span><span class="p">:</span>
</span><span id="L-7596"><a href="#L-7596"><span class="linenos">7596</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown option </span><span class="si">{</span><span class="n">option</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="L-7597"><a href="#L-7597"><span class="linenos">7597</span></a>
</span><span id="L-7598"><a href="#L-7598"><span class="linenos">7598</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-7599"><a href="#L-7599"><span class="linenos">7599</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7600"><a href="#L-7600"><span class="linenos">7600</span></a>
</span><span id="L-7601"><a href="#L-7601"><span class="linenos">7601</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
</span><span id="L-7602"><a href="#L-7602"><span class="linenos">7602</span></a>
</span><span id="L-7603"><a href="#L-7603"><span class="linenos">7603</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="L-7604"><a href="#L-7604"><span class="linenos">7604</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-7605"><a href="#L-7605"><span class="linenos">7605</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-7606"><a href="#L-7606"><span class="linenos">7606</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-7607"><a href="#L-7607"><span class="linenos">7607</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-7608"><a href="#L-7608"><span class="linenos">7608</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_warn_unsupported</span><span class="p">()</span>
</span><span id="L-7609"><a href="#L-7609"><span class="linenos">7609</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">[:</span><span class="n">size</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="n">size</span><span class="p">:])</span>
</span><span id="L-7610"><a href="#L-7610"><span class="linenos">7610</span></a>
</span><span id="L-7611"><a href="#L-7611"><span class="linenos">7611</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
</span><span id="L-7612"><a href="#L-7612"><span class="linenos">7612</span></a> <span class="n">settings</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-7613"><a href="#L-7613"><span class="linenos">7613</span></a>
</span><span id="L-7614"><a href="#L-7614"><span class="linenos">7614</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="L-7615"><a href="#L-7615"><span class="linenos">7615</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-7616"><a href="#L-7616"><span class="linenos">7616</span></a>
</span><span id="L-7617"><a href="#L-7617"><span class="linenos">7617</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-7618"><a href="#L-7618"><span class="linenos">7618</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-7619"><a href="#L-7619"><span class="linenos">7619</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-7620"><a href="#L-7620"><span class="linenos">7620</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="L-7621"><a href="#L-7621"><span class="linenos">7621</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-7622"><a href="#L-7622"><span class="linenos">7622</span></a> <span class="k">break</span>
</span><span id="L-7623"><a href="#L-7623"><span class="linenos">7623</span></a> <span class="n">settings</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
</span><span id="L-7624"><a href="#L-7624"><span class="linenos">7624</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span>
</span><span id="L-7625"><a href="#L-7625"><span class="linenos">7625</span></a>
</span><span id="L-7626"><a href="#L-7626"><span class="linenos">7626</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-7627"><a href="#L-7627"><span class="linenos">7627</span></a>
</span><span id="L-7628"><a href="#L-7628"><span class="linenos">7628</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7629"><a href="#L-7629"><span class="linenos">7629</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</span>
</span><span id="L-7630"><a href="#L-7630"><span class="linenos">7630</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-7631"><a href="#L-7631"><span class="linenos">7631</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="L-7632"><a href="#L-7632"><span class="linenos">7632</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
</span><span id="L-7633"><a href="#L-7633"><span class="linenos">7633</span></a> <span class="p">)</span>
</span><span id="L-7634"><a href="#L-7634"><span class="linenos">7634</span></a>
</span><span id="L-7635"><a href="#L-7635"><span class="linenos">7635</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
</span><span id="L-7636"><a href="#L-7636"><span class="linenos">7636</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="L-7637"><a href="#L-7637"><span class="linenos">7637</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
</span><span id="L-7638"><a href="#L-7638"><span class="linenos">7638</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
</span><span id="L-7639"><a href="#L-7639"><span class="linenos">7639</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="L-7640"><a href="#L-7640"><span class="linenos">7640</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
</span><span id="L-7641"><a href="#L-7641"><span class="linenos">7641</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="L-7642"><a href="#L-7642"><span class="linenos">7642</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7643"><a href="#L-7643"><span class="linenos">7643</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="L-7644"><a href="#L-7644"><span class="linenos">7644</span></a> <span class="nb">min</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">0</span><span class="p">)</span>
</span><span id="L-7645"><a href="#L-7645"><span class="linenos">7645</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-7646"><a href="#L-7646"><span class="linenos">7646</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictRange</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="nb">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
</span><span id="L-7647"><a href="#L-7647"><span class="linenos">7647</span></a>
</span><span id="L-7648"><a href="#L-7648"><span class="linenos">7648</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_comprehension</span><span class="p">(</span>
</span><span id="L-7649"><a href="#L-7649"><span class="linenos">7649</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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-7650"><a href="#L-7650"><span class="linenos">7650</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">Comprehension</span><span class="p">]:</span>
</span><span id="L-7651"><a href="#L-7651"><span class="linenos">7651</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-7652"><a href="#L-7652"><span class="linenos">7652</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-7653"><a href="#L-7653"><span class="linenos">7653</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
</span><span id="L-7654"><a href="#L-7654"><span class="linenos">7654</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="L-7655"><a href="#L-7655"><span class="linenos">7655</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7656"><a href="#L-7656"><span class="linenos">7656</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="L-7657"><a href="#L-7657"><span class="linenos">7657</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-7658"><a href="#L-7658"><span class="linenos">7658</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7659"><a href="#L-7659"><span class="linenos">7659</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">,</span>
</span><span id="L-7660"><a href="#L-7660"><span class="linenos">7660</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-7661"><a href="#L-7661"><span class="linenos">7661</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="L-7662"><a href="#L-7662"><span class="linenos">7662</span></a> <span class="n">iterator</span><span class="o">=</span><span class="n">iterator</span><span class="p">,</span>
</span><span id="L-7663"><a href="#L-7663"><span class="linenos">7663</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
</span><span id="L-7664"><a href="#L-7664"><span class="linenos">7664</span></a> <span class="p">)</span>
</span><span id="L-7665"><a href="#L-7665"><span class="linenos">7665</span></a>
</span><span id="L-7666"><a href="#L-7666"><span class="linenos">7666</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_heredoc</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">]:</span>
</span><span id="L-7667"><a href="#L-7667"><span class="linenos">7667</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">):</span>
</span><span id="L-7668"><a href="#L-7668"><span class="linenos">7668</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-7669"><a href="#L-7669"><span class="linenos">7669</span></a>
</span><span id="L-7670"><a href="#L-7670"><span class="linenos">7670</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">):</span>
</span><span id="L-7671"><a href="#L-7671"><span class="linenos">7671</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7672"><a href="#L-7672"><span class="linenos">7672</span></a>
</span><span id="L-7673"><a href="#L-7673"><span class="linenos">7673</span></a> <span class="n">tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
</span><span id="L-7674"><a href="#L-7674"><span class="linenos">7674</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7675"><a href="#L-7675"><span class="linenos">7675</span></a>
</span><span id="L-7676"><a href="#L-7676"><span class="linenos">7676</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">():</span>
</span><span id="L-7677"><a href="#L-7677"><span class="linenos">7677</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-7678"><a href="#L-7678"><span class="linenos">7678</span></a> <span class="n">tags</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-7679"><a href="#L-7679"><span class="linenos">7679</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7680"><a href="#L-7680"><span class="linenos">7680</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;No closing $ found&quot;</span><span class="p">)</span>
</span><span id="L-7681"><a href="#L-7681"><span class="linenos">7681</span></a>
</span><span id="L-7682"><a href="#L-7682"><span class="linenos">7682</span></a> <span class="k">if</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;$&quot;</span><span class="p">:</span>
</span><span id="L-7683"><a href="#L-7683"><span class="linenos">7683</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">):</span>
</span><span id="L-7684"><a href="#L-7684"><span class="linenos">7684</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span><span id="L-7685"><a href="#L-7685"><span class="linenos">7685</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">)</span>
</span><span id="L-7686"><a href="#L-7686"><span class="linenos">7686</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7687"><a href="#L-7687"><span class="linenos">7687</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;No closing $ found&quot;</span><span class="p">)</span>
</span><span id="L-7688"><a href="#L-7688"><span class="linenos">7688</span></a>
</span><span id="L-7689"><a href="#L-7689"><span class="linenos">7689</span></a> <span class="n">heredoc_start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="L-7690"><a href="#L-7690"><span class="linenos">7690</span></a>
</span><span id="L-7691"><a href="#L-7691"><span class="linenos">7691</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-7692"><a href="#L-7692"><span class="linenos">7692</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-7693"><a href="#L-7693"><span class="linenos">7693</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">heredoc_start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-7694"><a href="#L-7694"><span class="linenos">7694</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">tags</span><span class="p">))</span>
</span><span id="L-7695"><a href="#L-7695"><span class="linenos">7695</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</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">tag</span><span class="o">=</span><span class="n">tag_text</span><span class="p">)</span>
</span><span id="L-7696"><a href="#L-7696"><span class="linenos">7696</span></a>
</span><span id="L-7697"><a href="#L-7697"><span class="linenos">7697</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-7698"><a href="#L-7698"><span class="linenos">7698</span></a>
</span><span id="L-7699"><a href="#L-7699"><span class="linenos">7699</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No closing </span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span><span class="si">}</span><span class="s2"> found&quot;</span><span class="p">)</span>
</span><span id="L-7700"><a href="#L-7700"><span class="linenos">7700</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7701"><a href="#L-7701"><span class="linenos">7701</span></a>
</span><span id="L-7702"><a href="#L-7702"><span class="linenos">7702</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_find_parser</span><span class="p">(</span>
</span><span id="L-7703"><a href="#L-7703"><span class="linenos">7703</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parsers</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">Callable</span><span class="p">],</span> <span class="n">trie</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
</span><span id="L-7704"><a href="#L-7704"><span class="linenos">7704</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">Callable</span><span class="p">]:</span>
</span><span id="L-7705"><a href="#L-7705"><span class="linenos">7705</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-7706"><a href="#L-7706"><span class="linenos">7706</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7707"><a href="#L-7707"><span class="linenos">7707</span></a>
</span><span id="L-7708"><a href="#L-7708"><span class="linenos">7708</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-7709"><a href="#L-7709"><span class="linenos">7709</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-7710"><a href="#L-7710"><span class="linenos">7710</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="L-7711"><a href="#L-7711"><span class="linenos">7711</span></a> <span class="c1"># The current token might be multiple words</span>
</span><span id="L-7712"><a href="#L-7712"><span class="linenos">7712</span></a> <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-7713"><a href="#L-7713"><span class="linenos">7713</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">curr</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-7714"><a href="#L-7714"><span class="linenos">7714</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr</span><span class="p">)</span>
</span><span id="L-7715"><a href="#L-7715"><span class="linenos">7715</span></a>
</span><span id="L-7716"><a href="#L-7716"><span class="linenos">7716</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-7717"><a href="#L-7717"><span class="linenos">7717</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
</span><span id="L-7718"><a href="#L-7718"><span class="linenos">7718</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
</span><span id="L-7719"><a href="#L-7719"><span class="linenos">7719</span></a> <span class="k">break</span>
</span><span id="L-7720"><a href="#L-7720"><span class="linenos">7720</span></a>
</span><span id="L-7721"><a href="#L-7721"><span class="linenos">7721</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
</span><span id="L-7722"><a href="#L-7722"><span class="linenos">7722</span></a> <span class="n">subparser</span> <span class="o">=</span> <span class="n">parsers</span><span class="p">[</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">this</span><span class="p">)]</span>
</span><span id="L-7723"><a href="#L-7723"><span class="linenos">7723</span></a> <span class="k">return</span> <span class="n">subparser</span>
</span><span id="L-7724"><a href="#L-7724"><span class="linenos">7724</span></a>
</span><span id="L-7725"><a href="#L-7725"><span class="linenos">7725</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-7726"><a href="#L-7726"><span class="linenos">7726</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7727"><a href="#L-7727"><span class="linenos">7727</span></a>
</span><span id="L-7728"><a href="#L-7728"><span class="linenos">7728</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span><span id="L-7729"><a href="#L-7729"><span class="linenos">7729</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-7730"><a href="#L-7730"><span class="linenos">7730</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7731"><a href="#L-7731"><span class="linenos">7731</span></a>
</span><span id="L-7732"><a href="#L-7732"><span class="linenos">7732</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type</span><span class="p">:</span>
</span><span id="L-7733"><a href="#L-7733"><span class="linenos">7733</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
</span><span id="L-7734"><a href="#L-7734"><span class="linenos">7734</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-7735"><a href="#L-7735"><span class="linenos">7735</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-7736"><a href="#L-7736"><span class="linenos">7736</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-7737"><a href="#L-7737"><span class="linenos">7737</span></a>
</span><span id="L-7738"><a href="#L-7738"><span class="linenos">7738</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7739"><a href="#L-7739"><span class="linenos">7739</span></a>
</span><span id="L-7740"><a href="#L-7740"><span class="linenos">7740</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">types</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="L-7741"><a href="#L-7741"><span class="linenos">7741</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-7742"><a href="#L-7742"><span class="linenos">7742</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7743"><a href="#L-7743"><span class="linenos">7743</span></a>
</span><span id="L-7744"><a href="#L-7744"><span class="linenos">7744</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="n">types</span><span class="p">:</span>
</span><span id="L-7745"><a href="#L-7745"><span class="linenos">7745</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
</span><span id="L-7746"><a href="#L-7746"><span class="linenos">7746</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-7747"><a href="#L-7747"><span class="linenos">7747</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-7748"><a href="#L-7748"><span class="linenos">7748</span></a>
</span><span id="L-7749"><a href="#L-7749"><span class="linenos">7749</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7750"><a href="#L-7750"><span class="linenos">7750</span></a>
</span><span id="L-7751"><a href="#L-7751"><span class="linenos">7751</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match_pair</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type_a</span><span class="p">,</span> <span class="n">token_type_b</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="L-7752"><a href="#L-7752"><span class="linenos">7752</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
</span><span id="L-7753"><a href="#L-7753"><span class="linenos">7753</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7754"><a href="#L-7754"><span class="linenos">7754</span></a>
</span><span id="L-7755"><a href="#L-7755"><span class="linenos">7755</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_a</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_b</span><span class="p">:</span>
</span><span id="L-7756"><a href="#L-7756"><span class="linenos">7756</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
</span><span id="L-7757"><a href="#L-7757"><span class="linenos">7757</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</span><span id="L-7758"><a href="#L-7758"><span class="linenos">7758</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-7759"><a href="#L-7759"><span class="linenos">7759</span></a>
</span><span id="L-7760"><a href="#L-7760"><span class="linenos">7760</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7761"><a href="#L-7761"><span class="linenos">7761</span></a>
</span><span id="L-7762"><a href="#L-7762"><span class="linenos">7762</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match_l_paren</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">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 class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-7763"><a href="#L-7763"><span class="linenos">7763</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</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-7764"><a href="#L-7764"><span class="linenos">7764</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
</span><span id="L-7765"><a href="#L-7765"><span class="linenos">7765</span></a>
</span><span id="L-7766"><a href="#L-7766"><span class="linenos">7766</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match_r_paren</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">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 class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-7767"><a href="#L-7767"><span class="linenos">7767</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</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-7768"><a href="#L-7768"><span class="linenos">7768</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">)</span>
</span><span id="L-7769"><a href="#L-7769"><span class="linenos">7769</span></a>
</span><span id="L-7770"><a href="#L-7770"><span class="linenos">7770</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="L-7771"><a href="#L-7771"><span class="linenos">7771</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="L-7772"><a href="#L-7772"><span class="linenos">7772</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="L-7773"><a href="#L-7773"><span class="linenos">7773</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
</span><span id="L-7774"><a href="#L-7774"><span class="linenos">7774</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">texts</span>
</span><span id="L-7775"><a href="#L-7775"><span class="linenos">7775</span></a> <span class="p">):</span>
</span><span id="L-7776"><a href="#L-7776"><span class="linenos">7776</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
</span><span id="L-7777"><a href="#L-7777"><span class="linenos">7777</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-7778"><a href="#L-7778"><span class="linenos">7778</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-7779"><a href="#L-7779"><span class="linenos">7779</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7780"><a href="#L-7780"><span class="linenos">7780</span></a>
</span><span id="L-7781"><a href="#L-7781"><span class="linenos">7781</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match_text_seq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="L-7782"><a href="#L-7782"><span class="linenos">7782</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-7783"><a href="#L-7783"><span class="linenos">7783</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
</span><span id="L-7784"><a href="#L-7784"><span class="linenos">7784</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="L-7785"><a href="#L-7785"><span class="linenos">7785</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="L-7786"><a href="#L-7786"><span class="linenos">7786</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
</span><span id="L-7787"><a href="#L-7787"><span class="linenos">7787</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">text</span>
</span><span id="L-7788"><a href="#L-7788"><span class="linenos">7788</span></a> <span class="p">):</span>
</span><span id="L-7789"><a href="#L-7789"><span class="linenos">7789</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-7790"><a href="#L-7790"><span class="linenos">7790</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7791"><a href="#L-7791"><span class="linenos">7791</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-7792"><a href="#L-7792"><span class="linenos">7792</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-7793"><a href="#L-7793"><span class="linenos">7793</span></a>
</span><span id="L-7794"><a href="#L-7794"><span class="linenos">7794</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">advance</span><span class="p">:</span>
</span><span id="L-7795"><a href="#L-7795"><span class="linenos">7795</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="L-7796"><a href="#L-7796"><span class="linenos">7796</span></a>
</span><span id="L-7797"><a href="#L-7797"><span class="linenos">7797</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-7798"><a href="#L-7798"><span class="linenos">7798</span></a>
</span><span id="L-7799"><a href="#L-7799"><span class="linenos">7799</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_replace_lambda</span><span class="p">(</span>
</span><span id="L-7800"><a href="#L-7800"><span class="linenos">7800</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</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 class="n">expressions</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><span id="L-7801"><a href="#L-7801"><span class="linenos">7801</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-7802"><a href="#L-7802"><span class="linenos">7802</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
</span><span id="L-7803"><a href="#L-7803"><span class="linenos">7803</span></a> <span class="k">return</span> <span class="n">node</span>
</span><span id="L-7804"><a href="#L-7804"><span class="linenos">7804</span></a>
</span><span id="L-7805"><a href="#L-7805"><span class="linenos">7805</span></a> <span class="n">lambda_types</span> <span class="o">=</span> <span class="p">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="n">e</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;to&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">False</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">}</span>
</span><span id="L-7806"><a href="#L-7806"><span class="linenos">7806</span></a>
</span><span id="L-7807"><a href="#L-7807"><span class="linenos">7807</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
</span><span id="L-7808"><a href="#L-7808"><span class="linenos">7808</span></a> <span class="n">typ</span> <span class="o">=</span> <span class="n">lambda_types</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="L-7809"><a href="#L-7809"><span class="linenos">7809</span></a> <span class="k">if</span> <span class="n">typ</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-7810"><a href="#L-7810"><span class="linenos">7810</span></a> <span class="n">dot_or_id</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">to_dot</span><span class="p">()</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-7811"><a href="#L-7811"><span class="linenos">7811</span></a>
</span><span id="L-7812"><a href="#L-7812"><span class="linenos">7812</span></a> <span class="k">if</span> <span class="n">typ</span><span class="p">:</span>
</span><span id="L-7813"><a href="#L-7813"><span class="linenos">7813</span></a> <span class="n">dot_or_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7814"><a href="#L-7814"><span class="linenos">7814</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span>
</span><span id="L-7815"><a href="#L-7815"><span class="linenos">7815</span></a> <span class="n">this</span><span class="o">=</span><span class="n">dot_or_id</span><span class="p">,</span>
</span><span id="L-7816"><a href="#L-7816"><span class="linenos">7816</span></a> <span class="n">to</span><span class="o">=</span><span class="n">typ</span><span class="p">,</span>
</span><span id="L-7817"><a href="#L-7817"><span class="linenos">7817</span></a> <span class="p">)</span>
</span><span id="L-7818"><a href="#L-7818"><span class="linenos">7818</span></a>
</span><span id="L-7819"><a href="#L-7819"><span class="linenos">7819</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">parent</span>
</span><span id="L-7820"><a href="#L-7820"><span class="linenos">7820</span></a>
</span><span id="L-7821"><a href="#L-7821"><span class="linenos">7821</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
</span><span id="L-7822"><a href="#L-7822"><span class="linenos">7822</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
</span><span id="L-7823"><a href="#L-7823"><span class="linenos">7823</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
</span><span id="L-7824"><a href="#L-7824"><span class="linenos">7824</span></a> <span class="k">break</span>
</span><span id="L-7825"><a href="#L-7825"><span class="linenos">7825</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">parent</span>
</span><span id="L-7826"><a href="#L-7826"><span class="linenos">7826</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7827"><a href="#L-7827"><span class="linenos">7827</span></a> <span class="k">if</span> <span class="n">column</span> <span class="ow">is</span> <span class="n">node</span><span class="p">:</span>
</span><span id="L-7828"><a href="#L-7828"><span class="linenos">7828</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
</span><span id="L-7829"><a href="#L-7829"><span class="linenos">7829</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7830"><a href="#L-7830"><span class="linenos">7830</span></a> <span class="n">column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
</span><span id="L-7831"><a href="#L-7831"><span class="linenos">7831</span></a> <span class="k">return</span> <span class="n">node</span>
</span><span id="L-7832"><a href="#L-7832"><span class="linenos">7832</span></a>
</span><span id="L-7833"><a href="#L-7833"><span class="linenos">7833</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_truncate_table</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">TruncateTable</span><span class="p">]</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="L-7834"><a href="#L-7834"><span class="linenos">7834</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-7835"><a href="#L-7835"><span class="linenos">7835</span></a>
</span><span id="L-7836"><a href="#L-7836"><span class="linenos">7836</span></a> <span class="c1"># Not to be confused with TRUNCATE(number, decimals) function call</span>
</span><span id="L-7837"><a href="#L-7837"><span class="linenos">7837</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="L-7838"><a href="#L-7838"><span class="linenos">7838</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="L-7839"><a href="#L-7839"><span class="linenos">7839</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
</span><span id="L-7840"><a href="#L-7840"><span class="linenos">7840</span></a>
</span><span id="L-7841"><a href="#L-7841"><span class="linenos">7841</span></a> <span class="c1"># Clickhouse supports TRUNCATE DATABASE as well</span>
</span><span id="L-7842"><a href="#L-7842"><span class="linenos">7842</span></a> <span class="n">is_database</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">)</span>
</span><span id="L-7843"><a href="#L-7843"><span class="linenos">7843</span></a>
</span><span id="L-7844"><a href="#L-7844"><span class="linenos">7844</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="L-7845"><a href="#L-7845"><span class="linenos">7845</span></a>
</span><span id="L-7846"><a href="#L-7846"><span class="linenos">7846</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-7847"><a href="#L-7847"><span class="linenos">7847</span></a>
</span><span id="L-7848"><a href="#L-7848"><span class="linenos">7848</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="L-7849"><a href="#L-7849"><span class="linenos">7849</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_database</span><span class="p">)</span>
</span><span id="L-7850"><a href="#L-7850"><span class="linenos">7850</span></a> <span class="p">)</span>
</span><span id="L-7851"><a href="#L-7851"><span class="linenos">7851</span></a>
</span><span id="L-7852"><a href="#L-7852"><span class="linenos">7852</span></a> <span class="n">cluster</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_property</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-7853"><a href="#L-7853"><span class="linenos">7853</span></a>
</span><span id="L-7854"><a href="#L-7854"><span class="linenos">7854</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESTART&quot;</span><span class="p">,</span> <span class="s2">&quot;IDENTITY&quot;</span><span class="p">):</span>
</span><span id="L-7855"><a href="#L-7855"><span class="linenos">7855</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="s2">&quot;RESTART&quot;</span>
</span><span id="L-7856"><a href="#L-7856"><span class="linenos">7856</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONTINUE&quot;</span><span class="p">,</span> <span class="s2">&quot;IDENTITY&quot;</span><span class="p">):</span>
</span><span id="L-7857"><a href="#L-7857"><span class="linenos">7857</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="s2">&quot;CONTINUE&quot;</span>
</span><span id="L-7858"><a href="#L-7858"><span class="linenos">7858</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7859"><a href="#L-7859"><span class="linenos">7859</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7860"><a href="#L-7860"><span class="linenos">7860</span></a>
</span><span id="L-7861"><a href="#L-7861"><span class="linenos">7861</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESTRICT&quot;</span><span class="p">):</span>
</span><span id="L-7862"><a href="#L-7862"><span class="linenos">7862</span></a> <span class="n">option</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-7863"><a href="#L-7863"><span class="linenos">7863</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7864"><a href="#L-7864"><span class="linenos">7864</span></a> <span class="n">option</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-7865"><a href="#L-7865"><span class="linenos">7865</span></a>
</span><span id="L-7866"><a href="#L-7866"><span class="linenos">7866</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">()</span>
</span><span id="L-7867"><a href="#L-7867"><span class="linenos">7867</span></a>
</span><span id="L-7868"><a href="#L-7868"><span class="linenos">7868</span></a> <span class="c1"># Fallback case</span>
</span><span id="L-7869"><a href="#L-7869"><span class="linenos">7869</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-7870"><a href="#L-7870"><span class="linenos">7870</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="L-7871"><a href="#L-7871"><span class="linenos">7871</span></a>
</span><span id="L-7872"><a href="#L-7872"><span class="linenos">7872</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7873"><a href="#L-7873"><span class="linenos">7873</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TruncateTable</span><span class="p">,</span>
</span><span id="L-7874"><a href="#L-7874"><span class="linenos">7874</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="L-7875"><a href="#L-7875"><span class="linenos">7875</span></a> <span class="n">is_database</span><span class="o">=</span><span class="n">is_database</span><span class="p">,</span>
</span><span id="L-7876"><a href="#L-7876"><span class="linenos">7876</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
</span><span id="L-7877"><a href="#L-7877"><span class="linenos">7877</span></a> <span class="n">cluster</span><span class="o">=</span><span class="n">cluster</span><span class="p">,</span>
</span><span id="L-7878"><a href="#L-7878"><span class="linenos">7878</span></a> <span class="n">identity</span><span class="o">=</span><span class="n">identity</span><span class="p">,</span>
</span><span id="L-7879"><a href="#L-7879"><span class="linenos">7879</span></a> <span class="n">option</span><span class="o">=</span><span class="n">option</span><span class="p">,</span>
</span><span id="L-7880"><a href="#L-7880"><span class="linenos">7880</span></a> <span class="n">partition</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
</span><span id="L-7881"><a href="#L-7881"><span class="linenos">7881</span></a> <span class="p">)</span>
</span><span id="L-7882"><a href="#L-7882"><span class="linenos">7882</span></a>
</span><span id="L-7883"><a href="#L-7883"><span class="linenos">7883</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_with_operator</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-7884"><a href="#L-7884"><span class="linenos">7884</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_opclass</span><span class="p">)</span>
</span><span id="L-7885"><a href="#L-7885"><span class="linenos">7885</span></a>
</span><span id="L-7886"><a href="#L-7886"><span class="linenos">7886</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
</span><span id="L-7887"><a href="#L-7887"><span class="linenos">7887</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-7888"><a href="#L-7888"><span class="linenos">7888</span></a>
</span><span id="L-7889"><a href="#L-7889"><span class="linenos">7889</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-7890"><a href="#L-7890"><span class="linenos">7890</span></a>
</span><span id="L-7891"><a href="#L-7891"><span class="linenos">7891</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithOperator</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">op</span><span class="o">=</span><span class="n">op</span><span class="p">)</span>
</span><span id="L-7892"><a href="#L-7892"><span class="linenos">7892</span></a>
</span><span id="L-7893"><a href="#L-7893"><span class="linenos">7893</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_wrapped_options</span><span class="p">(</span><span class="bp">self</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-7894"><a href="#L-7894"><span class="linenos">7894</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-7895"><a href="#L-7895"><span class="linenos">7895</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="L-7896"><a href="#L-7896"><span class="linenos">7896</span></a>
</span><span id="L-7897"><a href="#L-7897"><span class="linenos">7897</span></a> <span class="n">opts</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-7898"><a href="#L-7898"><span class="linenos">7898</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
</span><span id="L-7899"><a href="#L-7899"><span class="linenos">7899</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FORMAT_NAME&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="L-7900"><a href="#L-7900"><span class="linenos">7900</span></a> <span class="c1"># The FORMAT_NAME can be set to an identifier for Snowflake and T-SQL</span>
</span><span id="L-7901"><a href="#L-7901"><span class="linenos">7901</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7902"><a href="#L-7902"><span class="linenos">7902</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</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">var</span><span class="p">(</span><span class="s2">&quot;FORMAT_NAME&quot;</span><span class="p">),</span> <span class="n">value</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
</span><span id="L-7903"><a href="#L-7903"><span class="linenos">7903</span></a> <span class="p">)</span>
</span><span id="L-7904"><a href="#L-7904"><span class="linenos">7904</span></a> <span class="n">opts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span>
</span><span id="L-7905"><a href="#L-7905"><span class="linenos">7905</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7906"><a href="#L-7906"><span class="linenos">7906</span></a> <span class="n">opts</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">_parse_property</span><span class="p">())</span>
</span><span id="L-7907"><a href="#L-7907"><span class="linenos">7907</span></a>
</span><span id="L-7908"><a href="#L-7908"><span class="linenos">7908</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="L-7909"><a href="#L-7909"><span class="linenos">7909</span></a>
</span><span id="L-7910"><a href="#L-7910"><span class="linenos">7910</span></a> <span class="k">return</span> <span class="n">opts</span>
</span><span id="L-7911"><a href="#L-7911"><span class="linenos">7911</span></a>
</span><span id="L-7912"><a href="#L-7912"><span class="linenos">7912</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_copy_parameters</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">CopyParameter</span><span class="p">]:</span>
</span><span id="L-7913"><a href="#L-7913"><span class="linenos">7913</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_CSV</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-7914"><a href="#L-7914"><span class="linenos">7914</span></a>
</span><span id="L-7915"><a href="#L-7915"><span class="linenos">7915</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-7916"><a href="#L-7916"><span class="linenos">7916</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-7917"><a href="#L-7917"><span class="linenos">7917</span></a> <span class="n">option</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-7918"><a href="#L-7918"><span class="linenos">7918</span></a> <span class="n">prev</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-7919"><a href="#L-7919"><span class="linenos">7919</span></a>
</span><span id="L-7920"><a href="#L-7920"><span class="linenos">7920</span></a> <span class="c1"># Different dialects might separate options and values by white space, &quot;=&quot; and &quot;AS&quot;</span>
</span><span id="L-7921"><a href="#L-7921"><span class="linenos">7921</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="L-7922"><a href="#L-7922"><span class="linenos">7922</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="L-7923"><a href="#L-7923"><span class="linenos">7923</span></a>
</span><span id="L-7924"><a href="#L-7924"><span class="linenos">7924</span></a> <span class="n">param</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CopyParameter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">option</span><span class="p">)</span>
</span><span id="L-7925"><a href="#L-7925"><span class="linenos">7925</span></a>
</span><span id="L-7926"><a href="#L-7926"><span class="linenos">7926</span></a> <span class="k">if</span> <span class="n">prev</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_INTO_VARLEN_OPTIONS</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span>
</span><span id="L-7927"><a href="#L-7927"><span class="linenos">7927</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span>
</span><span id="L-7928"><a href="#L-7928"><span class="linenos">7928</span></a> <span class="p">):</span>
</span><span id="L-7929"><a href="#L-7929"><span class="linenos">7929</span></a> <span class="c1"># Snowflake FILE_FORMAT case, Databricks COPY &amp; FORMAT options</span>
</span><span id="L-7930"><a href="#L-7930"><span class="linenos">7930</span></a> <span class="n">param</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="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_options</span><span class="p">())</span>
</span><span id="L-7931"><a href="#L-7931"><span class="linenos">7931</span></a> <span class="k">elif</span> <span class="n">prev</span> <span class="o">==</span> <span class="s2">&quot;FILE_FORMAT&quot;</span><span class="p">:</span>
</span><span id="L-7932"><a href="#L-7932"><span class="linenos">7932</span></a> <span class="c1"># T-SQL&#39;s external file format case</span>
</span><span id="L-7933"><a href="#L-7933"><span class="linenos">7933</span></a> <span class="n">param</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="L-7934"><a href="#L-7934"><span class="linenos">7934</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-7935"><a href="#L-7935"><span class="linenos">7935</span></a> <span class="n">param</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unquoted_field</span><span class="p">())</span>
</span><span id="L-7936"><a href="#L-7936"><span class="linenos">7936</span></a>
</span><span id="L-7937"><a href="#L-7937"><span class="linenos">7937</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">param</span><span class="p">)</span>
</span><span id="L-7938"><a href="#L-7938"><span class="linenos">7938</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span>
</span><span id="L-7939"><a href="#L-7939"><span class="linenos">7939</span></a>
</span><span id="L-7940"><a href="#L-7940"><span class="linenos">7940</span></a> <span class="k">return</span> <span class="n">options</span>
</span><span id="L-7941"><a href="#L-7941"><span class="linenos">7941</span></a>
</span><span id="L-7942"><a href="#L-7942"><span class="linenos">7942</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_credentials</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Credentials</span><span class="p">]:</span>
</span><span id="L-7943"><a href="#L-7943"><span class="linenos">7943</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Credentials</span><span class="p">)</span>
</span><span id="L-7944"><a href="#L-7944"><span class="linenos">7944</span></a>
</span><span id="L-7945"><a href="#L-7945"><span class="linenos">7945</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STORAGE_INTEGRATION&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="L-7946"><a href="#L-7946"><span class="linenos">7946</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;storage&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="L-7947"><a href="#L-7947"><span class="linenos">7947</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CREDENTIALS&quot;</span><span class="p">):</span>
</span><span id="L-7948"><a href="#L-7948"><span class="linenos">7948</span></a> <span class="c1"># Snowflake case: CREDENTIALS = (...), Redshift case: CREDENTIALS &lt;string&gt;</span>
</span><span id="L-7949"><a href="#L-7949"><span class="linenos">7949</span></a> <span class="n">creds</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-7950"><a href="#L-7950"><span class="linenos">7950</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_options</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
</span><span id="L-7951"><a href="#L-7951"><span class="linenos">7951</span></a> <span class="p">)</span>
</span><span id="L-7952"><a href="#L-7952"><span class="linenos">7952</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;credentials&quot;</span><span class="p">,</span> <span class="n">creds</span><span class="p">)</span>
</span><span id="L-7953"><a href="#L-7953"><span class="linenos">7953</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENCRYPTION&quot;</span><span class="p">):</span>
</span><span id="L-7954"><a href="#L-7954"><span class="linenos">7954</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;encryption&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_options</span><span class="p">())</span>
</span><span id="L-7955"><a href="#L-7955"><span class="linenos">7955</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IAM_ROLE&quot;</span><span class="p">):</span>
</span><span id="L-7956"><a href="#L-7956"><span class="linenos">7956</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;iam_role&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="L-7957"><a href="#L-7957"><span class="linenos">7957</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;REGION&quot;</span><span class="p">):</span>
</span><span id="L-7958"><a href="#L-7958"><span class="linenos">7958</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;region&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="L-7959"><a href="#L-7959"><span class="linenos">7959</span></a>
</span><span id="L-7960"><a href="#L-7960"><span class="linenos">7960</span></a> <span class="k">return</span> <span class="n">expr</span>
</span><span id="L-7961"><a href="#L-7961"><span class="linenos">7961</span></a>
</span><span id="L-7962"><a href="#L-7962"><span class="linenos">7962</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_file_location</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-7963"><a href="#L-7963"><span class="linenos">7963</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
</span><span id="L-7964"><a href="#L-7964"><span class="linenos">7964</span></a>
</span><span id="L-7965"><a href="#L-7965"><span class="linenos">7965</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Copy</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="L-7966"><a href="#L-7966"><span class="linenos">7966</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-7967"><a href="#L-7967"><span class="linenos">7967</span></a>
</span><span id="L-7968"><a href="#L-7968"><span class="linenos">7968</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span>
</span><span id="L-7969"><a href="#L-7969"><span class="linenos">7969</span></a>
</span><span id="L-7970"><a href="#L-7970"><span class="linenos">7970</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-7971"><a href="#L-7971"><span class="linenos">7971</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-7972"><a href="#L-7972"><span class="linenos">7972</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-7973"><a href="#L-7973"><span class="linenos">7973</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-7974"><a href="#L-7974"><span class="linenos">7974</span></a> <span class="p">)</span>
</span><span id="L-7975"><a href="#L-7975"><span class="linenos">7975</span></a>
</span><span id="L-7976"><a href="#L-7976"><span class="linenos">7976</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
</span><span id="L-7977"><a href="#L-7977"><span class="linenos">7977</span></a>
</span><span id="L-7978"><a href="#L-7978"><span class="linenos">7978</span></a> <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_file_location</span><span class="p">)</span>
</span><span id="L-7979"><a href="#L-7979"><span class="linenos">7979</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_credentials</span><span class="p">()</span>
</span><span id="L-7980"><a href="#L-7980"><span class="linenos">7980</span></a>
</span><span id="L-7981"><a href="#L-7981"><span class="linenos">7981</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">)</span>
</span><span id="L-7982"><a href="#L-7982"><span class="linenos">7982</span></a>
</span><span id="L-7983"><a href="#L-7983"><span class="linenos">7983</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_copy_parameters</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="L-7984"><a href="#L-7984"><span class="linenos">7984</span></a>
</span><span id="L-7985"><a href="#L-7985"><span class="linenos">7985</span></a> <span class="c1"># Fallback case</span>
</span><span id="L-7986"><a href="#L-7986"><span class="linenos">7986</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-7987"><a href="#L-7987"><span class="linenos">7987</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="L-7988"><a href="#L-7988"><span class="linenos">7988</span></a>
</span><span id="L-7989"><a href="#L-7989"><span class="linenos">7989</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-7990"><a href="#L-7990"><span class="linenos">7990</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Copy</span><span class="p">,</span>
</span><span id="L-7991"><a href="#L-7991"><span class="linenos">7991</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="L-7992"><a href="#L-7992"><span class="linenos">7992</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="L-7993"><a href="#L-7993"><span class="linenos">7993</span></a> <span class="n">credentials</span><span class="o">=</span><span class="n">credentials</span><span class="p">,</span>
</span><span id="L-7994"><a href="#L-7994"><span class="linenos">7994</span></a> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">,</span>
</span><span id="L-7995"><a href="#L-7995"><span class="linenos">7995</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
</span><span id="L-7996"><a href="#L-7996"><span class="linenos">7996</span></a> <span class="p">)</span>
</span><span id="L-7997"><a href="#L-7997"><span class="linenos">7997</span></a>
</span><span id="L-7998"><a href="#L-7998"><span class="linenos">7998</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_normalize</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Normalize</span><span class="p">:</span>
</span><span id="L-7999"><a href="#L-7999"><span class="linenos">7999</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-8000"><a href="#L-8000"><span class="linenos">8000</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Normalize</span><span class="p">,</span>
</span><span id="L-8001"><a href="#L-8001"><span class="linenos">8001</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="L-8002"><a href="#L-8002"><span class="linenos">8002</span></a> <span class="n">form</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(),</span>
</span><span id="L-8003"><a href="#L-8003"><span class="linenos">8003</span></a> <span class="p">)</span>
</span><span id="L-8004"><a href="#L-8004"><span class="linenos">8004</span></a>
</span><span id="L-8005"><a href="#L-8005"><span class="linenos">8005</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_ceil_floor</span><span class="p">(</span><span class="bp">self</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">TCeilFloor</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">TCeilFloor</span><span class="p">:</span>
</span><span id="L-8006"><a href="#L-8006"><span class="linenos">8006</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">())</span>
</span><span id="L-8007"><a href="#L-8007"><span class="linenos">8007</span></a>
</span><span id="L-8008"><a href="#L-8008"><span class="linenos">8008</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-8009"><a href="#L-8009"><span class="linenos">8009</span></a> <span class="n">decimals</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-8010"><a href="#L-8010"><span class="linenos">8010</span></a>
</span><span id="L-8011"><a href="#L-8011"><span class="linenos">8011</span></a> <span class="k">return</span> <span class="n">expr_type</span><span class="p">(</span>
</span><span id="L-8012"><a href="#L-8012"><span class="linenos">8012</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">decimals</span><span class="o">=</span><span class="n">decimals</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
</span><span id="L-8013"><a href="#L-8013"><span class="linenos">8013</span></a> <span class="p">)</span>
</span><span id="L-8014"><a href="#L-8014"><span class="linenos">8014</span></a>
</span><span id="L-8015"><a href="#L-8015"><span class="linenos">8015</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_star_ops</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-8016"><a href="#L-8016"><span class="linenos">8016</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-8017"><a href="#L-8017"><span class="linenos">8017</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
</span><span id="L-8018"><a href="#L-8018"><span class="linenos">8018</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">Columns</span><span class="p">):</span>
</span><span id="L-8019"><a href="#L-8019"><span class="linenos">8019</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;unpack&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
</span><span id="L-8020"><a href="#L-8020"><span class="linenos">8020</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-8021"><a href="#L-8021"><span class="linenos">8021</span></a>
</span><span id="L-8022"><a href="#L-8022"><span class="linenos">8022</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-8023"><a href="#L-8023"><span class="linenos">8023</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">,</span>
</span><span id="L-8024"><a href="#L-8024"><span class="linenos">8024</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
</span><span id="L-8025"><a href="#L-8025"><span class="linenos">8025</span></a> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star_op</span><span class="p">(</span><span class="s2">&quot;EXCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">),</span>
</span><span id="L-8026"><a href="#L-8026"><span class="linenos">8026</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star_op</span><span class="p">(</span><span class="s2">&quot;REPLACE&quot;</span><span class="p">),</span>
</span><span id="L-8027"><a href="#L-8027"><span class="linenos">8027</span></a> <span class="s2">&quot;rename&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star_op</span><span class="p">(</span><span class="s2">&quot;RENAME&quot;</span><span class="p">),</span>
</span><span id="L-8028"><a href="#L-8028"><span class="linenos">8028</span></a> <span class="p">},</span>
</span><span id="L-8029"><a href="#L-8029"><span class="linenos">8029</span></a> <span class="p">)</span>
</span><span id="L-8030"><a href="#L-8030"><span class="linenos">8030</span></a>
</span><span id="L-8031"><a href="#L-8031"><span class="linenos">8031</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_grant_privilege</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">GrantPrivilege</span><span class="p">]:</span>
</span><span id="L-8032"><a href="#L-8032"><span class="linenos">8032</span></a> <span class="n">privilege_parts</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-8033"><a href="#L-8033"><span class="linenos">8033</span></a>
</span><span id="L-8034"><a href="#L-8034"><span class="linenos">8034</span></a> <span class="c1"># Keep consuming consecutive keywords until comma (end of this privilege) or ON</span>
</span><span id="L-8035"><a href="#L-8035"><span class="linenos">8035</span></a> <span class="c1"># (end of privilege list) or L_PAREN (start of column list) are met</span>
</span><span id="L-8036"><a href="#L-8036"><span class="linenos">8036</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PRIVILEGE_FOLLOW_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="L-8037"><a href="#L-8037"><span class="linenos">8037</span></a> <span class="n">privilege_parts</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">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="L-8038"><a href="#L-8038"><span class="linenos">8038</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-8039"><a href="#L-8039"><span class="linenos">8039</span></a>
</span><span id="L-8040"><a href="#L-8040"><span class="linenos">8040</span></a> <span class="n">this</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="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">privilege_parts</span><span class="p">))</span>
</span><span id="L-8041"><a href="#L-8041"><span class="linenos">8041</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="L-8042"><a href="#L-8042"><span class="linenos">8042</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="L-8043"><a href="#L-8043"><span class="linenos">8043</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-8044"><a href="#L-8044"><span class="linenos">8044</span></a> <span class="k">else</span> <span class="kc">None</span>
</span><span id="L-8045"><a href="#L-8045"><span class="linenos">8045</span></a> <span class="p">)</span>
</span><span id="L-8046"><a href="#L-8046"><span class="linenos">8046</span></a>
</span><span id="L-8047"><a href="#L-8047"><span class="linenos">8047</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GrantPrivilege</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="L-8048"><a href="#L-8048"><span class="linenos">8048</span></a>
</span><span id="L-8049"><a href="#L-8049"><span class="linenos">8049</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_grant_principal</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">GrantPrincipal</span><span class="p">]:</span>
</span><span id="L-8050"><a href="#L-8050"><span class="linenos">8050</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;ROLE&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">))</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-8051"><a href="#L-8051"><span class="linenos">8051</span></a> <span class="n">principal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-8052"><a href="#L-8052"><span class="linenos">8052</span></a>
</span><span id="L-8053"><a href="#L-8053"><span class="linenos">8053</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">principal</span><span class="p">:</span>
</span><span id="L-8054"><a href="#L-8054"><span class="linenos">8054</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-8055"><a href="#L-8055"><span class="linenos">8055</span></a>
</span><span id="L-8056"><a href="#L-8056"><span class="linenos">8056</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GrantPrincipal</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">principal</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="L-8057"><a href="#L-8057"><span class="linenos">8057</span></a>
</span><span id="L-8058"><a href="#L-8058"><span class="linenos">8058</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_grant</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Grant</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="L-8059"><a href="#L-8059"><span class="linenos">8059</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="L-8060"><a href="#L-8060"><span class="linenos">8060</span></a>
</span><span id="L-8061"><a href="#L-8061"><span class="linenos">8061</span></a> <span class="n">privileges</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_grant_privilege</span><span class="p">)</span>
</span><span id="L-8062"><a href="#L-8062"><span class="linenos">8062</span></a>
</span><span id="L-8063"><a href="#L-8063"><span class="linenos">8063</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
</span><span id="L-8064"><a href="#L-8064"><span class="linenos">8064</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="L-8065"><a href="#L-8065"><span class="linenos">8065</span></a>
</span><span id="L-8066"><a href="#L-8066"><span class="linenos">8066</span></a> <span class="c1"># Attempt to parse the securable e.g. MySQL allows names</span>
</span><span id="L-8067"><a href="#L-8067"><span class="linenos">8067</span></a> <span class="c1"># such as &quot;foo.*&quot;, &quot;*.*&quot; which are not easily parseable yet</span>
</span><span id="L-8068"><a href="#L-8068"><span class="linenos">8068</span></a> <span class="n">securable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_try_parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">)</span>
</span><span id="L-8069"><a href="#L-8069"><span class="linenos">8069</span></a>
</span><span id="L-8070"><a href="#L-8070"><span class="linenos">8070</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">securable</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
</span><span id="L-8071"><a href="#L-8071"><span class="linenos">8071</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="L-8072"><a href="#L-8072"><span class="linenos">8072</span></a>
</span><span id="L-8073"><a href="#L-8073"><span class="linenos">8073</span></a> <span class="n">principals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_grant_principal</span><span class="p">)</span>
</span><span id="L-8074"><a href="#L-8074"><span class="linenos">8074</span></a>
</span><span id="L-8075"><a href="#L-8075"><span class="linenos">8075</span></a> <span class="n">grant_option</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;GRANT&quot;</span><span class="p">,</span> <span class="s2">&quot;OPTION&quot;</span><span class="p">)</span>
</span><span id="L-8076"><a href="#L-8076"><span class="linenos">8076</span></a>
</span><span id="L-8077"><a href="#L-8077"><span class="linenos">8077</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="L-8078"><a href="#L-8078"><span class="linenos">8078</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="L-8079"><a href="#L-8079"><span class="linenos">8079</span></a>
</span><span id="L-8080"><a href="#L-8080"><span class="linenos">8080</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-8081"><a href="#L-8081"><span class="linenos">8081</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Grant</span><span class="p">,</span>
</span><span id="L-8082"><a href="#L-8082"><span class="linenos">8082</span></a> <span class="n">privileges</span><span class="o">=</span><span class="n">privileges</span><span class="p">,</span>
</span><span id="L-8083"><a href="#L-8083"><span class="linenos">8083</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="L-8084"><a href="#L-8084"><span class="linenos">8084</span></a> <span class="n">securable</span><span class="o">=</span><span class="n">securable</span><span class="p">,</span>
</span><span id="L-8085"><a href="#L-8085"><span class="linenos">8085</span></a> <span class="n">principals</span><span class="o">=</span><span class="n">principals</span><span class="p">,</span>
</span><span id="L-8086"><a href="#L-8086"><span class="linenos">8086</span></a> <span class="n">grant_option</span><span class="o">=</span><span class="n">grant_option</span><span class="p">,</span>
</span><span id="L-8087"><a href="#L-8087"><span class="linenos">8087</span></a> <span class="p">)</span>
</span><span id="L-8088"><a href="#L-8088"><span class="linenos">8088</span></a>
</span><span id="L-8089"><a href="#L-8089"><span class="linenos">8089</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_overlay</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Overlay</span><span class="p">:</span>
</span><span id="L-8090"><a href="#L-8090"><span class="linenos">8090</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-8091"><a href="#L-8091"><span class="linenos">8091</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Overlay</span><span class="p">,</span>
</span><span id="L-8092"><a href="#L-8092"><span class="linenos">8092</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
</span><span id="L-8093"><a href="#L-8093"><span class="linenos">8093</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="L-8094"><a href="#L-8094"><span class="linenos">8094</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PLACING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="L-8095"><a href="#L-8095"><span class="linenos">8095</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="L-8096"><a href="#L-8096"><span class="linenos">8096</span></a> <span class="s2">&quot;for&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="L-8097"><a href="#L-8097"><span class="linenos">8097</span></a> <span class="p">},</span>
</span><span id="L-8098"><a href="#L-8098"><span class="linenos">8098</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="logger">
<div class="attr variable">
<span class="name">logger</span> =
<span class="default_value">&lt;Logger sqlglot (WARNING)&gt;</span>
</div>
<a class="headerlink" href="#logger"></a>
</section>
<section id="OPTIONS_TYPE">
<div class="attr variable">
<span class="name">OPTIONS_TYPE</span> =
<span class="default_value">typing.Dict[str, typing.Sequence[typing.Union[typing.Sequence[str], str]]]</span>
</div>
<a class="headerlink" href="#OPTIONS_TYPE"></a>
</section>
<section id="build_var_map">
<input id="build_var_map-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">build_var_map</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#StarMap">sqlglot.expressions.StarMap</a></span> <span class="o">|</span> <span class="n"><a href="expressions.html#VarMap">sqlglot.expressions.VarMap</a></span>:</span></span>
<label class="view-source-button" for="build_var_map-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_var_map"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_var_map-27"><a href="#build_var_map-27"><span class="linenos">27</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_var_map</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">StarMap</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">:</span>
</span><span id="build_var_map-28"><a href="#build_var_map-28"><span class="linenos">28</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">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">is_star</span><span class="p">:</span>
</span><span id="build_var_map-29"><a href="#build_var_map-29"><span class="linenos">29</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">StarMap</span><span class="p">(</span><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><span id="build_var_map-30"><a href="#build_var_map-30"><span class="linenos">30</span></a>
</span><span id="build_var_map-31"><a href="#build_var_map-31"><span class="linenos">31</span></a> <span class="n">keys</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="build_var_map-32"><a href="#build_var_map-32"><span class="linenos">32</span></a> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="build_var_map-33"><a href="#build_var_map-33"><span class="linenos">33</span></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</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="build_var_map-34"><a href="#build_var_map-34"><span class="linenos">34</span></a> <span class="n">keys</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
</span><span id="build_var_map-35"><a href="#build_var_map-35"><span class="linenos">35</span></a> <span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">])</span>
</span><span id="build_var_map-36"><a href="#build_var_map-36"><span class="linenos">36</span></a>
</span><span id="build_var_map-37"><a href="#build_var_map-37"><span class="linenos">37</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">VarMap</span><span class="p">(</span><span class="n">keys</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="o">*</span><span class="n">keys</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">values</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="o">*</span><span class="n">values</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
</span></pre></div>
</section>
<section id="build_like">
<input id="build_like-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">build_like</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#Escape">sqlglot.expressions.Escape</a></span> <span class="o">|</span> <span class="n"><a href="expressions.html#Like">sqlglot.expressions.Like</a></span>:</span></span>
<label class="view-source-button" for="build_like-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_like"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_like-40"><a href="#build_like-40"><span class="linenos">40</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_like</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">Escape</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Like</span><span class="p">:</span>
</span><span id="build_like-41"><a href="#build_like-41"><span class="linenos">41</span></a> <span class="n">like</span> <span class="o">=</span> <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">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">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">0</span><span class="p">))</span>
</span><span id="build_like-42"><a href="#build_like-42"><span class="linenos">42</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Escape</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">like</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">2</span><span class="p">))</span> <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">&gt;</span> <span class="mi">2</span> <span class="k">else</span> <span class="n">like</span>
</span></pre></div>
</section>
<section id="binary_range_parser">
<input id="binary_range_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">binary_range_parser</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">expr_type</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">reverse_args</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="#Parser">Parser</a></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 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="binary_range_parser-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#binary_range_parser"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="binary_range_parser-45"><a href="#binary_range_parser-45"><span class="linenos">45</span></a><span class="k">def</span><span class="w"> </span><span class="nf">binary_range_parser</span><span class="p">(</span>
</span><span id="binary_range_parser-46"><a href="#binary_range_parser-46"><span class="linenos">46</span></a> <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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">reverse_args</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="binary_range_parser-47"><a href="#binary_range_parser-47"><span class="linenos">47</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">Parser</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 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="binary_range_parser-48"><a href="#binary_range_parser-48"><span class="linenos">48</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_binary_range</span><span class="p">(</span>
</span><span id="binary_range_parser-49"><a href="#binary_range_parser-49"><span class="linenos">49</span></a> <span class="bp">self</span><span class="p">:</span> <span class="n">Parser</span><span class="p">,</span> <span class="n">this</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="binary_range_parser-50"><a href="#binary_range_parser-50"><span class="linenos">50</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="binary_range_parser-51"><a href="#binary_range_parser-51"><span class="linenos">51</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="binary_range_parser-52"><a href="#binary_range_parser-52"><span class="linenos">52</span></a> <span class="k">if</span> <span class="n">reverse_args</span><span class="p">:</span>
</span><span id="binary_range_parser-53"><a href="#binary_range_parser-53"><span class="linenos">53</span></a> <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">this</span>
</span><span id="binary_range_parser-54"><a href="#binary_range_parser-54"><span class="linenos">54</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_escape</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</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">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="binary_range_parser-55"><a href="#binary_range_parser-55"><span class="linenos">55</span></a>
</span><span id="binary_range_parser-56"><a href="#binary_range_parser-56"><span class="linenos">56</span></a> <span class="k">return</span> <span class="n">_parse_binary_range</span>
</span></pre></div>
</section>
<section id="build_logarithm">
<input id="build_logarithm-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">build_logarithm</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="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span></span><span class="return-annotation">) -> <span class="n"><a href="expressions.html#Func">sqlglot.expressions.Func</a></span>:</span></span>
<label class="view-source-button" for="build_logarithm-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_logarithm"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_logarithm-59"><a href="#build_logarithm-59"><span class="linenos">59</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_logarithm</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="n">dialect</span><span class="p">:</span> <span class="n">Dialect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">:</span>
</span><span id="build_logarithm-60"><a href="#build_logarithm-60"><span class="linenos">60</span></a> <span class="c1"># Default argument order is base, expression</span>
</span><span id="build_logarithm-61"><a href="#build_logarithm-61"><span class="linenos">61</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="build_logarithm-62"><a href="#build_logarithm-62"><span class="linenos">62</span></a> <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="build_logarithm-63"><a href="#build_logarithm-63"><span class="linenos">63</span></a>
</span><span id="build_logarithm-64"><a href="#build_logarithm-64"><span class="linenos">64</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="build_logarithm-65"><a href="#build_logarithm-65"><span class="linenos">65</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">dialect</span><span class="o">.</span><span class="n">LOG_BASE_FIRST</span><span class="p">:</span>
</span><span id="build_logarithm-66"><a href="#build_logarithm-66"><span class="linenos">66</span></a> <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">this</span>
</span><span id="build_logarithm-67"><a href="#build_logarithm-67"><span class="linenos">67</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</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">expression</span><span class="p">)</span>
</span><span id="build_logarithm-68"><a href="#build_logarithm-68"><span class="linenos">68</span></a>
</span><span id="build_logarithm-69"><a href="#build_logarithm-69"><span class="linenos">69</span></a> <span class="k">return</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Ln</span> <span class="k">if</span> <span class="n">dialect</span><span class="o">.</span><span class="n">parser_class</span><span class="o">.</span><span class="n">LOG_DEFAULTS_TO_LN</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</span><span class="p">)(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="build_hex">
<input id="build_hex-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">build_hex</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="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span></span><span class="return-annotation">) -> <span class="n"><a href="expressions.html#Hex">sqlglot.expressions.Hex</a></span> <span class="o">|</span> <span class="n"><a href="expressions.html#LowerHex">sqlglot.expressions.LowerHex</a></span>:</span></span>
<label class="view-source-button" for="build_hex-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_hex"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_hex-72"><a href="#build_hex-72"><span class="linenos">72</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_hex</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="n">dialect</span><span class="p">:</span> <span class="n">Dialect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">LowerHex</span><span class="p">:</span>
</span><span id="build_hex-73"><a href="#build_hex-73"><span class="linenos">73</span></a> <span class="n">arg</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="build_hex-74"><a href="#build_hex-74"><span class="linenos">74</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">LowerHex</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="p">)</span> <span class="k">if</span> <span class="n">dialect</span><span class="o">.</span><span class="n">HEX_LOWERCASE</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="build_lower">
<input id="build_lower-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">build_lower</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#Lower">sqlglot.expressions.Lower</a></span> <span class="o">|</span> <span class="n"><a href="expressions.html#Hex">sqlglot.expressions.Hex</a></span>:</span></span>
<label class="view-source-button" for="build_lower-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_lower"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_lower-77"><a href="#build_lower-77"><span class="linenos">77</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_lower</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">Lower</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">:</span>
</span><span id="build_lower-78"><a href="#build_lower-78"><span class="linenos">78</span></a> <span class="c1"># LOWER(HEX(..)) can be simplified to LowerHex to simplify its transpilation</span>
</span><span id="build_lower-79"><a href="#build_lower-79"><span class="linenos">79</span></a> <span class="n">arg</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="build_lower-80"><a href="#build_lower-80"><span class="linenos">80</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">LowerHex</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">)</span> <span class="k">else</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">arg</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="build_upper">
<input id="build_upper-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">build_upper</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#Upper">sqlglot.expressions.Upper</a></span> <span class="o">|</span> <span class="n"><a href="expressions.html#Hex">sqlglot.expressions.Hex</a></span>:</span></span>
<label class="view-source-button" for="build_upper-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_upper"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_upper-83"><a href="#build_upper-83"><span class="linenos">83</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_upper</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">Upper</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">:</span>
</span><span id="build_upper-84"><a href="#build_upper-84"><span class="linenos">84</span></a> <span class="c1"># UPPER(HEX(..)) can be simplified to Hex to simplify its transpilation</span>
</span><span id="build_upper-85"><a href="#build_upper-85"><span class="linenos">85</span></a> <span class="n">arg</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="build_upper-86"><a href="#build_upper-86"><span class="linenos">86</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hex</span><span class="p">)</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Upper</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">arg</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="build_extract_json_with_path">
<input id="build_extract_json_with_path-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">build_extract_json_with_path</span><span class="signature pdoc-code multiline">(<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">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"><a href="dialects.html#Dialect">sqlglot.dialects.Dialect</a></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="build_extract_json_with_path-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_extract_json_with_path"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_extract_json_with_path-89"><a href="#build_extract_json_with_path-89"><span class="linenos">89</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_extract_json_with_path</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">E</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">Dialect</span><span class="p">],</span> <span class="n">E</span><span class="p">]:</span>
</span><span id="build_extract_json_with_path-90"><a href="#build_extract_json_with_path-90"><span class="linenos">90</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_builder</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="n">dialect</span><span class="p">:</span> <span class="n">Dialect</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="build_extract_json_with_path-91"><a href="#build_extract_json_with_path-91"><span class="linenos">91</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expr_type</span><span class="p">(</span>
</span><span id="build_extract_json_with_path-92"><a href="#build_extract_json_with_path-92"><span class="linenos">92</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 class="n">expression</span><span class="o">=</span><span class="n">dialect</span><span class="o">.</span><span class="n">to_json_path</span><span class="p">(</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="build_extract_json_with_path-93"><a href="#build_extract_json_with_path-93"><span class="linenos">93</span></a> <span class="p">)</span>
</span><span id="build_extract_json_with_path-94"><a href="#build_extract_json_with_path-94"><span class="linenos">94</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">&gt;</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">expr_type</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span>
</span><span id="build_extract_json_with_path-95"><a href="#build_extract_json_with_path-95"><span class="linenos">95</span></a> <span class="n">expression</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="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span>
</span><span id="build_extract_json_with_path-96"><a href="#build_extract_json_with_path-96"><span class="linenos">96</span></a>
</span><span id="build_extract_json_with_path-97"><a href="#build_extract_json_with_path-97"><span class="linenos">97</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="build_extract_json_with_path-98"><a href="#build_extract_json_with_path-98"><span class="linenos">98</span></a>
</span><span id="build_extract_json_with_path-99"><a href="#build_extract_json_with_path-99"><span class="linenos">99</span></a> <span class="k">return</span> <span class="n">_builder</span>
</span></pre></div>
</section>
<section id="build_mod">
<input id="build_mod-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">build_mod</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#Mod">sqlglot.expressions.Mod</a></span>:</span></span>
<label class="view-source-button" for="build_mod-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_mod"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_mod-102"><a href="#build_mod-102"><span class="linenos">102</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_mod</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">Mod</span><span class="p">:</span>
</span><span id="build_mod-103"><a href="#build_mod-103"><span class="linenos">103</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="build_mod-104"><a href="#build_mod-104"><span class="linenos">104</span></a> <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="build_mod-105"><a href="#build_mod-105"><span class="linenos">105</span></a>
</span><span id="build_mod-106"><a href="#build_mod-106"><span class="linenos">106</span></a> <span class="c1"># Wrap the operands if they are binary nodes, e.g. MOD(a + 1, 7) -&gt; (a + 1) % 7</span>
</span><span id="build_mod-107"><a href="#build_mod-107"><span class="linenos">107</span></a> <span class="n">this</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">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span> <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">Binary</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
</span><span id="build_mod-108"><a href="#build_mod-108"><span class="linenos">108</span></a> <span class="n">expression</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">this</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span> <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">Binary</span><span class="p">)</span> <span class="k">else</span> <span class="n">expression</span>
</span><span id="build_mod-109"><a href="#build_mod-109"><span class="linenos">109</span></a>
</span><span id="build_mod-110"><a href="#build_mod-110"><span class="linenos">110</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mod</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">expression</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="build_pad">
<input id="build_pad-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">build_pad</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="param"><span class="n">is_left</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></span>
<label class="view-source-button" for="build_pad-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_pad"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_pad-113"><a href="#build_pad-113"><span class="linenos">113</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_pad</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="n">is_left</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
</span><span id="build_pad-114"><a href="#build_pad-114"><span class="linenos">114</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pad</span><span class="p">(</span>
</span><span id="build_pad-115"><a href="#build_pad-115"><span class="linenos">115</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="build_pad-116"><a href="#build_pad-116"><span class="linenos">116</span></a> <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="build_pad-117"><a href="#build_pad-117"><span class="linenos">117</span></a> <span class="n">fill_pattern</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="build_pad-118"><a href="#build_pad-118"><span class="linenos">118</span></a> <span class="n">is_left</span><span class="o">=</span><span class="n">is_left</span><span class="p">,</span>
</span><span id="build_pad-119"><a href="#build_pad-119"><span class="linenos">119</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="build_array_constructor">
<input id="build_array_constructor-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">build_array_constructor</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">args</span><span class="p">:</span> <span class="n">List</span>,</span><span class="param"> <span class="n">bracket_kind</span><span class="p">:</span> <span class="n"><a href="tokens.html#TokenType">sqlglot.tokens.TokenType</a></span>,</span><span class="param"> <span class="n">dialect</span><span class="p">:</span> <span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span></span><span class="return-annotation">) -> <span class="n"><a href="expressions.html#Expression">sqlglot.expressions.Expression</a></span>:</span></span>
<label class="view-source-button" for="build_array_constructor-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_array_constructor"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_array_constructor-122"><a href="#build_array_constructor-122"><span class="linenos">122</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_array_constructor</span><span class="p">(</span>
</span><span id="build_array_constructor-123"><a href="#build_array_constructor-123"><span class="linenos">123</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">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="n">bracket_kind</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">Dialect</span>
</span><span id="build_array_constructor-124"><a href="#build_array_constructor-124"><span class="linenos">124</span></a><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="build_array_constructor-125"><a href="#build_array_constructor-125"><span class="linenos">125</span></a> <span class="n">array_exp</span> <span class="o">=</span> <span class="n">exp_class</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="build_array_constructor-126"><a href="#build_array_constructor-126"><span class="linenos">126</span></a>
</span><span id="build_array_constructor-127"><a href="#build_array_constructor-127"><span class="linenos">127</span></a> <span class="k">if</span> <span class="n">exp_class</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span> <span class="ow">and</span> <span class="n">dialect</span><span class="o">.</span><span class="n">HAS_DISTINCT_ARRAY_CONSTRUCTORS</span><span class="p">:</span>
</span><span id="build_array_constructor-128"><a href="#build_array_constructor-128"><span class="linenos">128</span></a> <span class="n">array_exp</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;bracket_notation&quot;</span><span class="p">,</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)</span>
</span><span id="build_array_constructor-129"><a href="#build_array_constructor-129"><span class="linenos">129</span></a>
</span><span id="build_array_constructor-130"><a href="#build_array_constructor-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="n">array_exp</span>
</span></pre></div>
</section>
<section id="build_convert_timezone">
<input id="build_convert_timezone-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">build_convert_timezone</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="param"> <span class="n">default_source_tz</span><span class="p">:</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 class="return-annotation">) -> <span class="n">Union</span><span class="p">[</span><span class="n"><a href="expressions.html#ConvertTimezone">sqlglot.expressions.ConvertTimezone</a></span><span class="p">,</span> <span class="n"><a href="expressions.html#Anonymous">sqlglot.expressions.Anonymous</a></span><span class="p">]</span>:</span></span>
<label class="view-source-button" for="build_convert_timezone-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_convert_timezone"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_convert_timezone-133"><a href="#build_convert_timezone-133"><span class="linenos">133</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_convert_timezone</span><span class="p">(</span>
</span><span id="build_convert_timezone-134"><a href="#build_convert_timezone-134"><span class="linenos">134</span></a> <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="n">default_source_tz</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="build_convert_timezone-135"><a href="#build_convert_timezone-135"><span class="linenos">135</span></a><span class="p">)</span> <span class="o">-&gt;</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">ConvertTimezone</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">]:</span>
</span><span id="build_convert_timezone-136"><a href="#build_convert_timezone-136"><span class="linenos">136</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">==</span> <span class="mi">2</span><span class="p">:</span>
</span><span id="build_convert_timezone-137"><a href="#build_convert_timezone-137"><span class="linenos">137</span></a> <span class="n">source_tz</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">default_source_tz</span><span class="p">)</span> <span class="k">if</span> <span class="n">default_source_tz</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="build_convert_timezone-138"><a href="#build_convert_timezone-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConvertTimezone</span><span class="p">(</span>
</span><span id="build_convert_timezone-139"><a href="#build_convert_timezone-139"><span class="linenos">139</span></a> <span class="n">source_tz</span><span class="o">=</span><span class="n">source_tz</span><span class="p">,</span> <span class="n">target_tz</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">timestamp</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="build_convert_timezone-140"><a href="#build_convert_timezone-140"><span class="linenos">140</span></a> <span class="p">)</span>
</span><span id="build_convert_timezone-141"><a href="#build_convert_timezone-141"><span class="linenos">141</span></a>
</span><span id="build_convert_timezone-142"><a href="#build_convert_timezone-142"><span class="linenos">142</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConvertTimezone</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="build_trim">
<input id="build_trim-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">build_trim</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="param"><span class="n">is_left</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></span>
<label class="view-source-button" for="build_trim-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_trim"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_trim-145"><a href="#build_trim-145"><span class="linenos">145</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_trim</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="n">is_left</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">):</span>
</span><span id="build_trim-146"><a href="#build_trim-146"><span class="linenos">146</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">(</span>
</span><span id="build_trim-147"><a href="#build_trim-147"><span class="linenos">147</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="build_trim-148"><a href="#build_trim-148"><span class="linenos">148</span></a> <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="build_trim-149"><a href="#build_trim-149"><span class="linenos">149</span></a> <span class="n">position</span><span class="o">=</span><span class="s2">&quot;LEADING&quot;</span> <span class="k">if</span> <span class="n">is_left</span> <span class="k">else</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">,</span>
</span><span id="build_trim-150"><a href="#build_trim-150"><span class="linenos">150</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="build_coalesce">
<input id="build_coalesce-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">build_coalesce</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="param"> <span class="n">is_nvl</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="n"><a href="expressions.html#Coalesce">sqlglot.expressions.Coalesce</a></span>:</span></span>
<label class="view-source-button" for="build_coalesce-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_coalesce"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_coalesce-153"><a href="#build_coalesce-153"><span class="linenos">153</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_coalesce</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="n">is_nvl</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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">:</span>
</span><span id="build_coalesce-154"><a href="#build_coalesce-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</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">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="n">is_nvl</span><span class="o">=</span><span class="n">is_nvl</span><span class="p">)</span>
</span></pre></div>
</section>
<section id="build_locate_strposition">
<input id="build_locate_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">build_locate_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></span>
<label class="view-source-button" for="build_locate_strposition-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#build_locate_strposition"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="build_locate_strposition-157"><a href="#build_locate_strposition-157"><span class="linenos">157</span></a><span class="k">def</span><span class="w"> </span><span class="nf">build_locate_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><span id="build_locate_strposition-158"><a href="#build_locate_strposition-158"><span class="linenos">158</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="build_locate_strposition-159"><a href="#build_locate_strposition-159"><span class="linenos">159</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="build_locate_strposition-160"><a href="#build_locate_strposition-160"><span class="linenos">160</span></a> <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><span id="build_locate_strposition-161"><a href="#build_locate_strposition-161"><span class="linenos">161</span></a> <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="build_locate_strposition-162"><a href="#build_locate_strposition-162"><span class="linenos">162</span></a> <span class="p">)</span>
</span></pre></div>
</section>
<section id="Parser">
<input id="Parser-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">Parser</span>:
<label class="view-source-button" for="Parser-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Parser"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Parser-175"><a href="#Parser-175"><span class="linenos"> 175</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Parser</span><span class="p">(</span><span class="n">metaclass</span><span class="o">=</span><span class="n">_Parser</span><span class="p">):</span>
</span><span id="Parser-176"><a href="#Parser-176"><span class="linenos"> 176</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser-177"><a href="#Parser-177"><span class="linenos"> 177</span></a><span class="sd"> Parser consumes a list of tokens produced by the Tokenizer and produces a parsed syntax tree.</span>
</span><span id="Parser-178"><a href="#Parser-178"><span class="linenos"> 178</span></a>
</span><span id="Parser-179"><a href="#Parser-179"><span class="linenos"> 179</span></a><span class="sd"> Args:</span>
</span><span id="Parser-180"><a href="#Parser-180"><span class="linenos"> 180</span></a><span class="sd"> error_level: The desired error level.</span>
</span><span id="Parser-181"><a href="#Parser-181"><span class="linenos"> 181</span></a><span class="sd"> Default: ErrorLevel.IMMEDIATE</span>
</span><span id="Parser-182"><a href="#Parser-182"><span class="linenos"> 182</span></a><span class="sd"> error_message_context: The amount of context to capture from a query string when displaying</span>
</span><span id="Parser-183"><a href="#Parser-183"><span class="linenos"> 183</span></a><span class="sd"> the error message (in number of characters).</span>
</span><span id="Parser-184"><a href="#Parser-184"><span class="linenos"> 184</span></a><span class="sd"> Default: 100</span>
</span><span id="Parser-185"><a href="#Parser-185"><span class="linenos"> 185</span></a><span class="sd"> max_errors: Maximum number of error messages to include in a raised ParseError.</span>
</span><span id="Parser-186"><a href="#Parser-186"><span class="linenos"> 186</span></a><span class="sd"> This is only relevant if error_level is ErrorLevel.RAISE.</span>
</span><span id="Parser-187"><a href="#Parser-187"><span class="linenos"> 187</span></a><span class="sd"> Default: 3</span>
</span><span id="Parser-188"><a href="#Parser-188"><span class="linenos"> 188</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser-189"><a href="#Parser-189"><span class="linenos"> 189</span></a>
</span><span id="Parser-190"><a href="#Parser-190"><span class="linenos"> 190</span></a> <span class="n">FUNCTIONS</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">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-191"><a href="#Parser-191"><span class="linenos"> 191</span></a> <span class="o">**</span><span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">func</span><span class="o">.</span><span class="n">from_arg_list</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">func</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">FUNCTION_BY_NAME</span><span class="o">.</span><span class="n">items</span><span class="p">()},</span>
</span><span id="Parser-192"><a href="#Parser-192"><span class="linenos"> 192</span></a> <span class="o">**</span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">((</span><span class="s2">&quot;COALESCE&quot;</span><span class="p">,</span> <span class="s2">&quot;IFNULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NVL&quot;</span><span class="p">),</span> <span class="n">build_coalesce</span><span class="p">),</span>
</span><span id="Parser-193"><a href="#Parser-193"><span class="linenos"> 193</span></a> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">,</span> <span class="n">dialect</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="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="Parser-194"><a href="#Parser-194"><span class="linenos"> 194</span></a> <span class="s2">&quot;ARRAYAGG&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">(</span>
</span><span id="Parser-195"><a href="#Parser-195"><span class="linenos"> 195</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 class="n">nulls_excluded</span><span class="o">=</span><span class="n">dialect</span><span class="o">.</span><span class="n">ARRAY_AGG_INCLUDES_NULLS</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="Parser-196"><a href="#Parser-196"><span class="linenos"> 196</span></a> <span class="p">),</span>
</span><span id="Parser-197"><a href="#Parser-197"><span class="linenos"> 197</span></a> <span class="s2">&quot;ARRAY_AGG&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ArrayAgg</span><span class="p">(</span>
</span><span id="Parser-198"><a href="#Parser-198"><span class="linenos"> 198</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 class="n">nulls_excluded</span><span class="o">=</span><span class="n">dialect</span><span class="o">.</span><span class="n">ARRAY_AGG_INCLUDES_NULLS</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="Parser-199"><a href="#Parser-199"><span class="linenos"> 199</span></a> <span class="p">),</span>
</span><span id="Parser-200"><a href="#Parser-200"><span class="linenos"> 200</span></a> <span class="s2">&quot;CHAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Chr</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="Parser-201"><a href="#Parser-201"><span class="linenos"> 201</span></a> <span class="s2">&quot;CHR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Chr</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">),</span>
</span><span id="Parser-202"><a href="#Parser-202"><span class="linenos"> 202</span></a> <span class="s2">&quot;COUNT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Count</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">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="n">big_int</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-203"><a href="#Parser-203"><span class="linenos"> 203</span></a> <span class="s2">&quot;CONCAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">(</span>
</span><span id="Parser-204"><a href="#Parser-204"><span class="linenos"> 204</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">,</span>
</span><span id="Parser-205"><a href="#Parser-205"><span class="linenos"> 205</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
</span><span id="Parser-206"><a href="#Parser-206"><span class="linenos"> 206</span></a> <span class="n">coalesce</span><span class="o">=</span><span class="n">dialect</span><span class="o">.</span><span class="n">CONCAT_COALESCE</span><span class="p">,</span>
</span><span id="Parser-207"><a href="#Parser-207"><span class="linenos"> 207</span></a> <span class="p">),</span>
</span><span id="Parser-208"><a href="#Parser-208"><span class="linenos"> 208</span></a> <span class="s2">&quot;CONCAT_WS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ConcatWs</span><span class="p">(</span>
</span><span id="Parser-209"><a href="#Parser-209"><span class="linenos"> 209</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">,</span>
</span><span id="Parser-210"><a href="#Parser-210"><span class="linenos"> 210</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
</span><span id="Parser-211"><a href="#Parser-211"><span class="linenos"> 211</span></a> <span class="n">coalesce</span><span class="o">=</span><span class="n">dialect</span><span class="o">.</span><span class="n">CONCAT_COALESCE</span><span class="p">,</span>
</span><span id="Parser-212"><a href="#Parser-212"><span class="linenos"> 212</span></a> <span class="p">),</span>
</span><span id="Parser-213"><a href="#Parser-213"><span class="linenos"> 213</span></a> <span class="s2">&quot;CONVERT_TIMEZONE&quot;</span><span class="p">:</span> <span class="n">build_convert_timezone</span><span class="p">,</span>
</span><span id="Parser-214"><a href="#Parser-214"><span class="linenos"> 214</span></a> <span class="s2">&quot;DATE_TO_DATE_STR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
</span><span id="Parser-215"><a href="#Parser-215"><span class="linenos"> 215</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="Parser-216"><a href="#Parser-216"><span class="linenos"> 216</span></a> <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="p">(</span><span class="n">this</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">TEXT</span><span class="p">),</span>
</span><span id="Parser-217"><a href="#Parser-217"><span class="linenos"> 217</span></a> <span class="p">),</span>
</span><span id="Parser-218"><a href="#Parser-218"><span class="linenos"> 218</span></a> <span class="s2">&quot;GENERATE_DATE_ARRAY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GenerateDateArray</span><span class="p">(</span>
</span><span id="Parser-219"><a href="#Parser-219"><span class="linenos"> 219</span></a> <span class="n">start</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="Parser-220"><a href="#Parser-220"><span class="linenos"> 220</span></a> <span class="n">end</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="Parser-221"><a href="#Parser-221"><span class="linenos"> 221</span></a> <span class="n">step</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 class="ow">or</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">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">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="s2">&quot;DAY&quot;</span><span class="p">)),</span>
</span><span id="Parser-222"><a href="#Parser-222"><span class="linenos"> 222</span></a> <span class="p">),</span>
</span><span id="Parser-223"><a href="#Parser-223"><span class="linenos"> 223</span></a> <span class="s2">&quot;GLOB&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Glob</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">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">0</span><span class="p">)),</span>
</span><span id="Parser-224"><a href="#Parser-224"><span class="linenos"> 224</span></a> <span class="s2">&quot;HEX&quot;</span><span class="p">:</span> <span class="n">build_hex</span><span class="p">,</span>
</span><span id="Parser-225"><a href="#Parser-225"><span class="linenos"> 225</span></a> <span class="s2">&quot;JSON_EXTRACT&quot;</span><span class="p">:</span> <span class="n">build_extract_json_with_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">),</span>
</span><span id="Parser-226"><a href="#Parser-226"><span class="linenos"> 226</span></a> <span class="s2">&quot;JSON_EXTRACT_SCALAR&quot;</span><span class="p">:</span> <span class="n">build_extract_json_with_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">),</span>
</span><span id="Parser-227"><a href="#Parser-227"><span class="linenos"> 227</span></a> <span class="s2">&quot;JSON_EXTRACT_PATH_TEXT&quot;</span><span class="p">:</span> <span class="n">build_extract_json_with_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">),</span>
</span><span id="Parser-228"><a href="#Parser-228"><span class="linenos"> 228</span></a> <span class="s2">&quot;LIKE&quot;</span><span class="p">:</span> <span class="n">build_like</span><span class="p">,</span>
</span><span id="Parser-229"><a href="#Parser-229"><span class="linenos"> 229</span></a> <span class="s2">&quot;LOG&quot;</span><span class="p">:</span> <span class="n">build_logarithm</span><span class="p">,</span>
</span><span id="Parser-230"><a href="#Parser-230"><span class="linenos"> 230</span></a> <span class="s2">&quot;LOG2&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</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">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">2</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">0</span><span class="p">)),</span>
</span><span id="Parser-231"><a href="#Parser-231"><span class="linenos"> 231</span></a> <span class="s2">&quot;LOG10&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Log</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">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">10</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">0</span><span class="p">)),</span>
</span><span id="Parser-232"><a href="#Parser-232"><span class="linenos"> 232</span></a> <span class="s2">&quot;LOWER&quot;</span><span class="p">:</span> <span class="n">build_lower</span><span class="p">,</span>
</span><span id="Parser-233"><a href="#Parser-233"><span class="linenos"> 233</span></a> <span class="s2">&quot;LPAD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_pad</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
</span><span id="Parser-234"><a href="#Parser-234"><span class="linenos"> 234</span></a> <span class="s2">&quot;LEFTPAD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_pad</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
</span><span id="Parser-235"><a href="#Parser-235"><span class="linenos"> 235</span></a> <span class="s2">&quot;LTRIM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_trim</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
</span><span id="Parser-236"><a href="#Parser-236"><span class="linenos"> 236</span></a> <span class="s2">&quot;MOD&quot;</span><span class="p">:</span> <span class="n">build_mod</span><span class="p">,</span>
</span><span id="Parser-237"><a href="#Parser-237"><span class="linenos"> 237</span></a> <span class="s2">&quot;RIGHTPAD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_pad</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">is_left</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="Parser-238"><a href="#Parser-238"><span class="linenos"> 238</span></a> <span class="s2">&quot;RPAD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_pad</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">is_left</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="Parser-239"><a href="#Parser-239"><span class="linenos"> 239</span></a> <span class="s2">&quot;RTRIM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_trim</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">is_left</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="Parser-240"><a href="#Parser-240"><span class="linenos"> 240</span></a> <span class="s2">&quot;SCOPE_RESOLUTION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ScopeResolution</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">0</span><span class="p">))</span>
</span><span id="Parser-241"><a href="#Parser-241"><span class="linenos"> 241</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">!=</span> <span class="mi">2</span>
</span><span id="Parser-242"><a href="#Parser-242"><span class="linenos"> 242</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">ScopeResolution</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="Parser-243"><a href="#Parser-243"><span class="linenos"> 243</span></a> <span class="s2">&quot;STRPOS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Parser-244"><a href="#Parser-244"><span class="linenos"> 244</span></a> <span class="s2">&quot;CHARINDEX&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_locate_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
</span><span id="Parser-245"><a href="#Parser-245"><span class="linenos"> 245</span></a> <span class="s2">&quot;INSTR&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Parser-246"><a href="#Parser-246"><span class="linenos"> 246</span></a> <span class="s2">&quot;LOCATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">build_locate_strposition</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
</span><span id="Parser-247"><a href="#Parser-247"><span class="linenos"> 247</span></a> <span class="s2">&quot;TIME_TO_TIME_STR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span>
</span><span id="Parser-248"><a href="#Parser-248"><span class="linenos"> 248</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="Parser-249"><a href="#Parser-249"><span class="linenos"> 249</span></a> <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="p">(</span><span class="n">this</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">TEXT</span><span class="p">),</span>
</span><span id="Parser-250"><a href="#Parser-250"><span class="linenos"> 250</span></a> <span class="p">),</span>
</span><span id="Parser-251"><a href="#Parser-251"><span class="linenos"> 251</span></a> <span class="s2">&quot;TO_HEX&quot;</span><span class="p">:</span> <span class="n">build_hex</span><span class="p">,</span>
</span><span id="Parser-252"><a href="#Parser-252"><span class="linenos"> 252</span></a> <span class="s2">&quot;TS_OR_DS_TO_DATE_STR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
</span><span id="Parser-253"><a href="#Parser-253"><span class="linenos"> 253</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><span id="Parser-254"><a href="#Parser-254"><span class="linenos"> 254</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="Parser-255"><a href="#Parser-255"><span class="linenos"> 255</span></a> <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="p">(</span><span class="n">this</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">TEXT</span><span class="p">),</span>
</span><span id="Parser-256"><a href="#Parser-256"><span class="linenos"> 256</span></a> <span class="p">),</span>
</span><span id="Parser-257"><a href="#Parser-257"><span class="linenos"> 257</span></a> <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><span id="Parser-258"><a href="#Parser-258"><span class="linenos"> 258</span></a> <span class="n">length</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">10</span><span class="p">),</span>
</span><span id="Parser-259"><a href="#Parser-259"><span class="linenos"> 259</span></a> <span class="p">),</span>
</span><span id="Parser-260"><a href="#Parser-260"><span class="linenos"> 260</span></a> <span class="s2">&quot;UNNEST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">ensure_list</span><span class="p">(</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="Parser-261"><a href="#Parser-261"><span class="linenos"> 261</span></a> <span class="s2">&quot;UPPER&quot;</span><span class="p">:</span> <span class="n">build_upper</span><span class="p">,</span>
</span><span id="Parser-262"><a href="#Parser-262"><span class="linenos"> 262</span></a> <span class="s2">&quot;VAR_MAP&quot;</span><span class="p">:</span> <span class="n">build_var_map</span><span class="p">,</span>
</span><span id="Parser-263"><a href="#Parser-263"><span class="linenos"> 263</span></a> <span class="p">}</span>
</span><span id="Parser-264"><a href="#Parser-264"><span class="linenos"> 264</span></a>
</span><span id="Parser-265"><a href="#Parser-265"><span class="linenos"> 265</span></a> <span class="n">NO_PAREN_FUNCTIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-266"><a href="#Parser-266"><span class="linenos"> 266</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">,</span>
</span><span id="Parser-267"><a href="#Parser-267"><span class="linenos"> 267</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentDate</span><span class="p">,</span>
</span><span id="Parser-268"><a href="#Parser-268"><span class="linenos"> 268</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTime</span><span class="p">,</span>
</span><span id="Parser-269"><a href="#Parser-269"><span class="linenos"> 269</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">,</span>
</span><span id="Parser-270"><a href="#Parser-270"><span class="linenos"> 270</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentUser</span><span class="p">,</span>
</span><span id="Parser-271"><a href="#Parser-271"><span class="linenos"> 271</span></a> <span class="p">}</span>
</span><span id="Parser-272"><a href="#Parser-272"><span class="linenos"> 272</span></a>
</span><span id="Parser-273"><a href="#Parser-273"><span class="linenos"> 273</span></a> <span class="n">STRUCT_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-274"><a href="#Parser-274"><span class="linenos"> 274</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NESTED</span><span class="p">,</span>
</span><span id="Parser-275"><a href="#Parser-275"><span class="linenos"> 275</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT</span><span class="p">,</span>
</span><span id="Parser-276"><a href="#Parser-276"><span class="linenos"> 276</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">,</span>
</span><span id="Parser-277"><a href="#Parser-277"><span class="linenos"> 277</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">,</span>
</span><span id="Parser-278"><a href="#Parser-278"><span class="linenos"> 278</span></a> <span class="p">}</span>
</span><span id="Parser-279"><a href="#Parser-279"><span class="linenos"> 279</span></a>
</span><span id="Parser-280"><a href="#Parser-280"><span class="linenos"> 280</span></a> <span class="n">NESTED_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-281"><a href="#Parser-281"><span class="linenos"> 281</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span>
</span><span id="Parser-282"><a href="#Parser-282"><span class="linenos"> 282</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIST</span><span class="p">,</span>
</span><span id="Parser-283"><a href="#Parser-283"><span class="linenos"> 283</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOWCARDINALITY</span><span class="p">,</span>
</span><span id="Parser-284"><a href="#Parser-284"><span class="linenos"> 284</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span><span class="p">,</span>
</span><span id="Parser-285"><a href="#Parser-285"><span class="linenos"> 285</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLABLE</span><span class="p">,</span>
</span><span id="Parser-286"><a href="#Parser-286"><span class="linenos"> 286</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
</span><span id="Parser-287"><a href="#Parser-287"><span class="linenos"> 287</span></a> <span class="o">*</span><span class="n">STRUCT_TYPE_TOKENS</span><span class="p">,</span>
</span><span id="Parser-288"><a href="#Parser-288"><span class="linenos"> 288</span></a> <span class="p">}</span>
</span><span id="Parser-289"><a href="#Parser-289"><span class="linenos"> 289</span></a>
</span><span id="Parser-290"><a href="#Parser-290"><span class="linenos"> 290</span></a> <span class="n">ENUM_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-291"><a href="#Parser-291"><span class="linenos"> 291</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DYNAMIC</span><span class="p">,</span>
</span><span id="Parser-292"><a href="#Parser-292"><span class="linenos"> 292</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM</span><span class="p">,</span>
</span><span id="Parser-293"><a href="#Parser-293"><span class="linenos"> 293</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM8</span><span class="p">,</span>
</span><span id="Parser-294"><a href="#Parser-294"><span class="linenos"> 294</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ENUM16</span><span class="p">,</span>
</span><span id="Parser-295"><a href="#Parser-295"><span class="linenos"> 295</span></a> <span class="p">}</span>
</span><span id="Parser-296"><a href="#Parser-296"><span class="linenos"> 296</span></a>
</span><span id="Parser-297"><a href="#Parser-297"><span class="linenos"> 297</span></a> <span class="n">AGGREGATE_TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-298"><a href="#Parser-298"><span class="linenos"> 298</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AGGREGATEFUNCTION</span><span class="p">,</span>
</span><span id="Parser-299"><a href="#Parser-299"><span class="linenos"> 299</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMPLEAGGREGATEFUNCTION</span><span class="p">,</span>
</span><span id="Parser-300"><a href="#Parser-300"><span class="linenos"> 300</span></a> <span class="p">}</span>
</span><span id="Parser-301"><a href="#Parser-301"><span class="linenos"> 301</span></a>
</span><span id="Parser-302"><a href="#Parser-302"><span class="linenos"> 302</span></a> <span class="n">TYPE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-303"><a href="#Parser-303"><span class="linenos"> 303</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT</span><span class="p">,</span>
</span><span id="Parser-304"><a href="#Parser-304"><span class="linenos"> 304</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BOOLEAN</span><span class="p">,</span>
</span><span id="Parser-305"><a href="#Parser-305"><span class="linenos"> 305</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">,</span>
</span><span id="Parser-306"><a href="#Parser-306"><span class="linenos"> 306</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
</span><span id="Parser-307"><a href="#Parser-307"><span class="linenos"> 307</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">,</span>
</span><span id="Parser-308"><a href="#Parser-308"><span class="linenos"> 308</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
</span><span id="Parser-309"><a href="#Parser-309"><span class="linenos"> 309</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
</span><span id="Parser-310"><a href="#Parser-310"><span class="linenos"> 310</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
</span><span id="Parser-311"><a href="#Parser-311"><span class="linenos"> 311</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">,</span>
</span><span id="Parser-312"><a href="#Parser-312"><span class="linenos"> 312</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
</span><span id="Parser-313"><a href="#Parser-313"><span class="linenos"> 313</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT128</span><span class="p">,</span>
</span><span id="Parser-314"><a href="#Parser-314"><span class="linenos"> 314</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT128</span><span class="p">,</span>
</span><span id="Parser-315"><a href="#Parser-315"><span class="linenos"> 315</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT256</span><span class="p">,</span>
</span><span id="Parser-316"><a href="#Parser-316"><span class="linenos"> 316</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT256</span><span class="p">,</span>
</span><span id="Parser-317"><a href="#Parser-317"><span class="linenos"> 317</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">,</span>
</span><span id="Parser-318"><a href="#Parser-318"><span class="linenos"> 318</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UMEDIUMINT</span><span class="p">,</span>
</span><span id="Parser-319"><a href="#Parser-319"><span class="linenos"> 319</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIXEDSTRING</span><span class="p">,</span>
</span><span id="Parser-320"><a href="#Parser-320"><span class="linenos"> 320</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FLOAT</span><span class="p">,</span>
</span><span id="Parser-321"><a href="#Parser-321"><span class="linenos"> 321</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">,</span>
</span><span id="Parser-322"><a href="#Parser-322"><span class="linenos"> 322</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UDOUBLE</span><span class="p">,</span>
</span><span id="Parser-323"><a href="#Parser-323"><span class="linenos"> 323</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CHAR</span><span class="p">,</span>
</span><span id="Parser-324"><a href="#Parser-324"><span class="linenos"> 324</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NCHAR</span><span class="p">,</span>
</span><span id="Parser-325"><a href="#Parser-325"><span class="linenos"> 325</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">,</span>
</span><span id="Parser-326"><a href="#Parser-326"><span class="linenos"> 326</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NVARCHAR</span><span class="p">,</span>
</span><span id="Parser-327"><a href="#Parser-327"><span class="linenos"> 327</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BPCHAR</span><span class="p">,</span>
</span><span id="Parser-328"><a href="#Parser-328"><span class="linenos"> 328</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEXT</span><span class="p">,</span>
</span><span id="Parser-329"><a href="#Parser-329"><span class="linenos"> 329</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMTEXT</span><span class="p">,</span>
</span><span id="Parser-330"><a href="#Parser-330"><span class="linenos"> 330</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGTEXT</span><span class="p">,</span>
</span><span id="Parser-331"><a href="#Parser-331"><span class="linenos"> 331</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BLOB</span><span class="p">,</span>
</span><span id="Parser-332"><a href="#Parser-332"><span class="linenos"> 332</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMBLOB</span><span class="p">,</span>
</span><span id="Parser-333"><a href="#Parser-333"><span class="linenos"> 333</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LONGBLOB</span><span class="p">,</span>
</span><span id="Parser-334"><a href="#Parser-334"><span class="linenos"> 334</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BINARY</span><span class="p">,</span>
</span><span id="Parser-335"><a href="#Parser-335"><span class="linenos"> 335</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
</span><span id="Parser-336"><a href="#Parser-336"><span class="linenos"> 336</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">,</span>
</span><span id="Parser-337"><a href="#Parser-337"><span class="linenos"> 337</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSONB</span><span class="p">,</span>
</span><span id="Parser-338"><a href="#Parser-338"><span class="linenos"> 338</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
</span><span id="Parser-339"><a href="#Parser-339"><span class="linenos"> 339</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYBLOB</span><span class="p">,</span>
</span><span id="Parser-340"><a href="#Parser-340"><span class="linenos"> 340</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYTEXT</span><span class="p">,</span>
</span><span id="Parser-341"><a href="#Parser-341"><span class="linenos"> 341</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
</span><span id="Parser-342"><a href="#Parser-342"><span class="linenos"> 342</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
</span><span id="Parser-343"><a href="#Parser-343"><span class="linenos"> 343</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
</span><span id="Parser-344"><a href="#Parser-344"><span class="linenos"> 344</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_S</span><span class="p">,</span>
</span><span id="Parser-345"><a href="#Parser-345"><span class="linenos"> 345</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_MS</span><span class="p">,</span>
</span><span id="Parser-346"><a href="#Parser-346"><span class="linenos"> 346</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_NS</span><span class="p">,</span>
</span><span id="Parser-347"><a href="#Parser-347"><span class="linenos"> 347</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
</span><span id="Parser-348"><a href="#Parser-348"><span class="linenos"> 348</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
</span><span id="Parser-349"><a href="#Parser-349"><span class="linenos"> 349</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPNTZ</span><span class="p">,</span>
</span><span id="Parser-350"><a href="#Parser-350"><span class="linenos"> 350</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
</span><span id="Parser-351"><a href="#Parser-351"><span class="linenos"> 351</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME2</span><span class="p">,</span>
</span><span id="Parser-352"><a href="#Parser-352"><span class="linenos"> 352</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME64</span><span class="p">,</span>
</span><span id="Parser-353"><a href="#Parser-353"><span class="linenos"> 353</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLDATETIME</span><span class="p">,</span>
</span><span id="Parser-354"><a href="#Parser-354"><span class="linenos"> 354</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
</span><span id="Parser-355"><a href="#Parser-355"><span class="linenos"> 355</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE32</span><span class="p">,</span>
</span><span id="Parser-356"><a href="#Parser-356"><span class="linenos"> 356</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4RANGE</span><span class="p">,</span>
</span><span id="Parser-357"><a href="#Parser-357"><span class="linenos"> 357</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT4MULTIRANGE</span><span class="p">,</span>
</span><span id="Parser-358"><a href="#Parser-358"><span class="linenos"> 358</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8RANGE</span><span class="p">,</span>
</span><span id="Parser-359"><a href="#Parser-359"><span class="linenos"> 359</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT8MULTIRANGE</span><span class="p">,</span>
</span><span id="Parser-360"><a href="#Parser-360"><span class="linenos"> 360</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMRANGE</span><span class="p">,</span>
</span><span id="Parser-361"><a href="#Parser-361"><span class="linenos"> 361</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMMULTIRANGE</span><span class="p">,</span>
</span><span id="Parser-362"><a href="#Parser-362"><span class="linenos"> 362</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSRANGE</span><span class="p">,</span>
</span><span id="Parser-363"><a href="#Parser-363"><span class="linenos"> 363</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSMULTIRANGE</span><span class="p">,</span>
</span><span id="Parser-364"><a href="#Parser-364"><span class="linenos"> 364</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZRANGE</span><span class="p">,</span>
</span><span id="Parser-365"><a href="#Parser-365"><span class="linenos"> 365</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TSTZMULTIRANGE</span><span class="p">,</span>
</span><span id="Parser-366"><a href="#Parser-366"><span class="linenos"> 366</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATERANGE</span><span class="p">,</span>
</span><span id="Parser-367"><a href="#Parser-367"><span class="linenos"> 367</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATEMULTIRANGE</span><span class="p">,</span>
</span><span id="Parser-368"><a href="#Parser-368"><span class="linenos"> 368</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">,</span>
</span><span id="Parser-369"><a href="#Parser-369"><span class="linenos"> 369</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL32</span><span class="p">,</span>
</span><span id="Parser-370"><a href="#Parser-370"><span class="linenos"> 370</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL64</span><span class="p">,</span>
</span><span id="Parser-371"><a href="#Parser-371"><span class="linenos"> 371</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL128</span><span class="p">,</span>
</span><span id="Parser-372"><a href="#Parser-372"><span class="linenos"> 372</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL256</span><span class="p">,</span>
</span><span id="Parser-373"><a href="#Parser-373"><span class="linenos"> 373</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UDECIMAL</span><span class="p">,</span>
</span><span id="Parser-374"><a href="#Parser-374"><span class="linenos"> 374</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGDECIMAL</span><span class="p">,</span>
</span><span id="Parser-375"><a href="#Parser-375"><span class="linenos"> 375</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UUID</span><span class="p">,</span>
</span><span id="Parser-376"><a href="#Parser-376"><span class="linenos"> 376</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOGRAPHY</span><span class="p">,</span>
</span><span id="Parser-377"><a href="#Parser-377"><span class="linenos"> 377</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GEOMETRY</span><span class="p">,</span>
</span><span id="Parser-378"><a href="#Parser-378"><span class="linenos"> 378</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">POINT</span><span class="p">,</span>
</span><span id="Parser-379"><a href="#Parser-379"><span class="linenos"> 379</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RING</span><span class="p">,</span>
</span><span id="Parser-380"><a href="#Parser-380"><span class="linenos"> 380</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LINESTRING</span><span class="p">,</span>
</span><span id="Parser-381"><a href="#Parser-381"><span class="linenos"> 381</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MULTILINESTRING</span><span class="p">,</span>
</span><span id="Parser-382"><a href="#Parser-382"><span class="linenos"> 382</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">POLYGON</span><span class="p">,</span>
</span><span id="Parser-383"><a href="#Parser-383"><span class="linenos"> 383</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MULTIPOLYGON</span><span class="p">,</span>
</span><span id="Parser-384"><a href="#Parser-384"><span class="linenos"> 384</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
</span><span id="Parser-385"><a href="#Parser-385"><span class="linenos"> 385</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HSTORE</span><span class="p">,</span>
</span><span id="Parser-386"><a href="#Parser-386"><span class="linenos"> 386</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">,</span>
</span><span id="Parser-387"><a href="#Parser-387"><span class="linenos"> 387</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
</span><span id="Parser-388"><a href="#Parser-388"><span class="linenos"> 388</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SERIAL</span><span class="p">,</span>
</span><span id="Parser-389"><a href="#Parser-389"><span class="linenos"> 389</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLSERIAL</span><span class="p">,</span>
</span><span id="Parser-390"><a href="#Parser-390"><span class="linenos"> 390</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGSERIAL</span><span class="p">,</span>
</span><span id="Parser-391"><a href="#Parser-391"><span class="linenos"> 391</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XML</span><span class="p">,</span>
</span><span id="Parser-392"><a href="#Parser-392"><span class="linenos"> 392</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">YEAR</span><span class="p">,</span>
</span><span id="Parser-393"><a href="#Parser-393"><span class="linenos"> 393</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USERDEFINED</span><span class="p">,</span>
</span><span id="Parser-394"><a href="#Parser-394"><span class="linenos"> 394</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MONEY</span><span class="p">,</span>
</span><span id="Parser-395"><a href="#Parser-395"><span class="linenos"> 395</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLMONEY</span><span class="p">,</span>
</span><span id="Parser-396"><a href="#Parser-396"><span class="linenos"> 396</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWVERSION</span><span class="p">,</span>
</span><span id="Parser-397"><a href="#Parser-397"><span class="linenos"> 397</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IMAGE</span><span class="p">,</span>
</span><span id="Parser-398"><a href="#Parser-398"><span class="linenos"> 398</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARIANT</span><span class="p">,</span>
</span><span id="Parser-399"><a href="#Parser-399"><span class="linenos"> 399</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VECTOR</span><span class="p">,</span>
</span><span id="Parser-400"><a href="#Parser-400"><span class="linenos"> 400</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT</span><span class="p">,</span>
</span><span id="Parser-401"><a href="#Parser-401"><span class="linenos"> 401</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">,</span>
</span><span id="Parser-402"><a href="#Parser-402"><span class="linenos"> 402</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INET</span><span class="p">,</span>
</span><span id="Parser-403"><a href="#Parser-403"><span class="linenos"> 403</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPADDRESS</span><span class="p">,</span>
</span><span id="Parser-404"><a href="#Parser-404"><span class="linenos"> 404</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPPREFIX</span><span class="p">,</span>
</span><span id="Parser-405"><a href="#Parser-405"><span class="linenos"> 405</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV4</span><span class="p">,</span>
</span><span id="Parser-406"><a href="#Parser-406"><span class="linenos"> 406</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IPV6</span><span class="p">,</span>
</span><span id="Parser-407"><a href="#Parser-407"><span class="linenos"> 407</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">,</span>
</span><span id="Parser-408"><a href="#Parser-408"><span class="linenos"> 408</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">,</span>
</span><span id="Parser-409"><a href="#Parser-409"><span class="linenos"> 409</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NAME</span><span class="p">,</span>
</span><span id="Parser-410"><a href="#Parser-410"><span class="linenos"> 410</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TDIGEST</span><span class="p">,</span>
</span><span id="Parser-411"><a href="#Parser-411"><span class="linenos"> 411</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DYNAMIC</span><span class="p">,</span>
</span><span id="Parser-412"><a href="#Parser-412"><span class="linenos"> 412</span></a> <span class="o">*</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">,</span>
</span><span id="Parser-413"><a href="#Parser-413"><span class="linenos"> 413</span></a> <span class="o">*</span><span class="n">NESTED_TYPE_TOKENS</span><span class="p">,</span>
</span><span id="Parser-414"><a href="#Parser-414"><span class="linenos"> 414</span></a> <span class="o">*</span><span class="n">AGGREGATE_TYPE_TOKENS</span><span class="p">,</span>
</span><span id="Parser-415"><a href="#Parser-415"><span class="linenos"> 415</span></a> <span class="p">}</span>
</span><span id="Parser-416"><a href="#Parser-416"><span class="linenos"> 416</span></a>
</span><span id="Parser-417"><a href="#Parser-417"><span class="linenos"> 417</span></a> <span class="n">SIGNED_TO_UNSIGNED_TYPE_TOKEN</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-418"><a href="#Parser-418"><span class="linenos"> 418</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UBIGINT</span><span class="p">,</span>
</span><span id="Parser-419"><a href="#Parser-419"><span class="linenos"> 419</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UINT</span><span class="p">,</span>
</span><span id="Parser-420"><a href="#Parser-420"><span class="linenos"> 420</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MEDIUMINT</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UMEDIUMINT</span><span class="p">,</span>
</span><span id="Parser-421"><a href="#Parser-421"><span class="linenos"> 421</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USMALLINT</span><span class="p">,</span>
</span><span id="Parser-422"><a href="#Parser-422"><span class="linenos"> 422</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UTINYINT</span><span class="p">,</span>
</span><span id="Parser-423"><a href="#Parser-423"><span class="linenos"> 423</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DECIMAL</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UDECIMAL</span><span class="p">,</span>
</span><span id="Parser-424"><a href="#Parser-424"><span class="linenos"> 424</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOUBLE</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UDOUBLE</span><span class="p">,</span>
</span><span id="Parser-425"><a href="#Parser-425"><span class="linenos"> 425</span></a> <span class="p">}</span>
</span><span id="Parser-426"><a href="#Parser-426"><span class="linenos"> 426</span></a>
</span><span id="Parser-427"><a href="#Parser-427"><span class="linenos"> 427</span></a> <span class="n">SUBQUERY_PREDICATES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-428"><a href="#Parser-428"><span class="linenos"> 428</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
</span><span id="Parser-429"><a href="#Parser-429"><span class="linenos"> 429</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">All</span><span class="p">,</span>
</span><span id="Parser-430"><a href="#Parser-430"><span class="linenos"> 430</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">,</span>
</span><span id="Parser-431"><a href="#Parser-431"><span class="linenos"> 431</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOME</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span>
</span><span id="Parser-432"><a href="#Parser-432"><span class="linenos"> 432</span></a> <span class="p">}</span>
</span><span id="Parser-433"><a href="#Parser-433"><span class="linenos"> 433</span></a>
</span><span id="Parser-434"><a href="#Parser-434"><span class="linenos"> 434</span></a> <span class="n">RESERVED_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-435"><a href="#Parser-435"><span class="linenos"> 435</span></a> <span class="o">*</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span>
</span><span id="Parser-436"><a href="#Parser-436"><span class="linenos"> 436</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span>
</span><span id="Parser-437"><a href="#Parser-437"><span class="linenos"> 437</span></a> <span class="p">}</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">}</span>
</span><span id="Parser-438"><a href="#Parser-438"><span class="linenos"> 438</span></a>
</span><span id="Parser-439"><a href="#Parser-439"><span class="linenos"> 439</span></a> <span class="n">DB_CREATABLES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-440"><a href="#Parser-440"><span class="linenos"> 440</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">,</span>
</span><span id="Parser-441"><a href="#Parser-441"><span class="linenos"> 441</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
</span><span id="Parser-442"><a href="#Parser-442"><span class="linenos"> 442</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MODEL</span><span class="p">,</span>
</span><span id="Parser-443"><a href="#Parser-443"><span class="linenos"> 443</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NAMESPACE</span><span class="p">,</span>
</span><span id="Parser-444"><a href="#Parser-444"><span class="linenos"> 444</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">,</span>
</span><span id="Parser-445"><a href="#Parser-445"><span class="linenos"> 445</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEQUENCE</span><span class="p">,</span>
</span><span id="Parser-446"><a href="#Parser-446"><span class="linenos"> 446</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SINK</span><span class="p">,</span>
</span><span id="Parser-447"><a href="#Parser-447"><span class="linenos"> 447</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOURCE</span><span class="p">,</span>
</span><span id="Parser-448"><a href="#Parser-448"><span class="linenos"> 448</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STORAGE_INTEGRATION</span><span class="p">,</span>
</span><span id="Parser-449"><a href="#Parser-449"><span class="linenos"> 449</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STREAMLIT</span><span class="p">,</span>
</span><span id="Parser-450"><a href="#Parser-450"><span class="linenos"> 450</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
</span><span id="Parser-451"><a href="#Parser-451"><span class="linenos"> 451</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TAG</span><span class="p">,</span>
</span><span id="Parser-452"><a href="#Parser-452"><span class="linenos"> 452</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">,</span>
</span><span id="Parser-453"><a href="#Parser-453"><span class="linenos"> 453</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WAREHOUSE</span><span class="p">,</span>
</span><span id="Parser-454"><a href="#Parser-454"><span class="linenos"> 454</span></a> <span class="p">}</span>
</span><span id="Parser-455"><a href="#Parser-455"><span class="linenos"> 455</span></a>
</span><span id="Parser-456"><a href="#Parser-456"><span class="linenos"> 456</span></a> <span class="n">CREATABLES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-457"><a href="#Parser-457"><span class="linenos"> 457</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">,</span>
</span><span id="Parser-458"><a href="#Parser-458"><span class="linenos"> 458</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">,</span>
</span><span id="Parser-459"><a href="#Parser-459"><span class="linenos"> 459</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">,</span>
</span><span id="Parser-460"><a href="#Parser-460"><span class="linenos"> 460</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span>
</span><span id="Parser-461"><a href="#Parser-461"><span class="linenos"> 461</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
</span><span id="Parser-462"><a href="#Parser-462"><span class="linenos"> 462</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">,</span>
</span><span id="Parser-463"><a href="#Parser-463"><span class="linenos"> 463</span></a> <span class="o">*</span><span class="n">DB_CREATABLES</span><span class="p">,</span>
</span><span id="Parser-464"><a href="#Parser-464"><span class="linenos"> 464</span></a> <span class="p">}</span>
</span><span id="Parser-465"><a href="#Parser-465"><span class="linenos"> 465</span></a>
</span><span id="Parser-466"><a href="#Parser-466"><span class="linenos"> 466</span></a> <span class="n">ALTERABLES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-467"><a href="#Parser-467"><span class="linenos"> 467</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
</span><span id="Parser-468"><a href="#Parser-468"><span class="linenos"> 468</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
</span><span id="Parser-469"><a href="#Parser-469"><span class="linenos"> 469</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">,</span>
</span><span id="Parser-470"><a href="#Parser-470"><span class="linenos"> 470</span></a> <span class="p">}</span>
</span><span id="Parser-471"><a href="#Parser-471"><span class="linenos"> 471</span></a>
</span><span id="Parser-472"><a href="#Parser-472"><span class="linenos"> 472</span></a> <span class="c1"># Tokens that can represent identifiers</span>
</span><span id="Parser-473"><a href="#Parser-473"><span class="linenos"> 473</span></a> <span class="n">ID_VAR_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-474"><a href="#Parser-474"><span class="linenos"> 474</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">,</span>
</span><span id="Parser-475"><a href="#Parser-475"><span class="linenos"> 475</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ATTACH</span><span class="p">,</span>
</span><span id="Parser-476"><a href="#Parser-476"><span class="linenos"> 476</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span>
</span><span id="Parser-477"><a href="#Parser-477"><span class="linenos"> 477</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
</span><span id="Parser-478"><a href="#Parser-478"><span class="linenos"> 478</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
</span><span id="Parser-479"><a href="#Parser-479"><span class="linenos"> 479</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span>
</span><span id="Parser-480"><a href="#Parser-480"><span class="linenos"> 480</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
</span><span id="Parser-481"><a href="#Parser-481"><span class="linenos"> 481</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AUTO_INCREMENT</span><span class="p">,</span>
</span><span id="Parser-482"><a href="#Parser-482"><span class="linenos"> 482</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">,</span>
</span><span id="Parser-483"><a href="#Parser-483"><span class="linenos"> 483</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BPCHAR</span><span class="p">,</span>
</span><span id="Parser-484"><a href="#Parser-484"><span class="linenos"> 484</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</span><span class="p">,</span>
</span><span id="Parser-485"><a href="#Parser-485"><span class="linenos"> 485</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CASE</span><span class="p">,</span>
</span><span id="Parser-486"><a href="#Parser-486"><span class="linenos"> 486</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">,</span>
</span><span id="Parser-487"><a href="#Parser-487"><span class="linenos"> 487</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
</span><span id="Parser-488"><a href="#Parser-488"><span class="linenos"> 488</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">,</span>
</span><span id="Parser-489"><a href="#Parser-489"><span class="linenos"> 489</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMIT</span><span class="p">,</span>
</span><span id="Parser-490"><a href="#Parser-490"><span class="linenos"> 490</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">,</span>
</span><span id="Parser-491"><a href="#Parser-491"><span class="linenos"> 491</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COPY</span><span class="p">,</span>
</span><span id="Parser-492"><a href="#Parser-492"><span class="linenos"> 492</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">,</span>
</span><span id="Parser-493"><a href="#Parser-493"><span class="linenos"> 493</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_SCHEMA</span><span class="p">,</span>
</span><span id="Parser-494"><a href="#Parser-494"><span class="linenos"> 494</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">,</span>
</span><span id="Parser-495"><a href="#Parser-495"><span class="linenos"> 495</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span>
</span><span id="Parser-496"><a href="#Parser-496"><span class="linenos"> 496</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">,</span>
</span><span id="Parser-497"><a href="#Parser-497"><span class="linenos"> 497</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</span><span class="p">,</span>
</span><span id="Parser-498"><a href="#Parser-498"><span class="linenos"> 498</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DETACH</span><span class="p">,</span>
</span><span id="Parser-499"><a href="#Parser-499"><span class="linenos"> 499</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DICTIONARY</span><span class="p">,</span>
</span><span id="Parser-500"><a href="#Parser-500"><span class="linenos"> 500</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DIV</span><span class="p">,</span>
</span><span id="Parser-501"><a href="#Parser-501"><span class="linenos"> 501</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">,</span>
</span><span id="Parser-502"><a href="#Parser-502"><span class="linenos"> 502</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXECUTE</span><span class="p">,</span>
</span><span id="Parser-503"><a href="#Parser-503"><span class="linenos"> 503</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXPORT</span><span class="p">,</span>
</span><span id="Parser-504"><a href="#Parser-504"><span class="linenos"> 504</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">,</span>
</span><span id="Parser-505"><a href="#Parser-505"><span class="linenos"> 505</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">,</span>
</span><span id="Parser-506"><a href="#Parser-506"><span class="linenos"> 506</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span>
</span><span id="Parser-507"><a href="#Parser-507"><span class="linenos"> 507</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span>
</span><span id="Parser-508"><a href="#Parser-508"><span class="linenos"> 508</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FINAL</span><span class="p">,</span>
</span><span id="Parser-509"><a href="#Parser-509"><span class="linenos"> 509</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
</span><span id="Parser-510"><a href="#Parser-510"><span class="linenos"> 510</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
</span><span id="Parser-511"><a href="#Parser-511"><span class="linenos"> 511</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
</span><span id="Parser-512"><a href="#Parser-512"><span class="linenos"> 512</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">,</span>
</span><span id="Parser-513"><a href="#Parser-513"><span class="linenos"> 513</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">,</span>
</span><span id="Parser-514"><a href="#Parser-514"><span class="linenos"> 514</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span>
</span><span id="Parser-515"><a href="#Parser-515"><span class="linenos"> 515</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">KEEP</span><span class="p">,</span>
</span><span id="Parser-516"><a href="#Parser-516"><span class="linenos"> 516</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">KILL</span><span class="p">,</span>
</span><span id="Parser-517"><a href="#Parser-517"><span class="linenos"> 517</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
</span><span id="Parser-518"><a href="#Parser-518"><span class="linenos"> 518</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">,</span>
</span><span id="Parser-519"><a href="#Parser-519"><span class="linenos"> 519</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">,</span>
</span><span id="Parser-520"><a href="#Parser-520"><span class="linenos"> 520</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
</span><span id="Parser-521"><a href="#Parser-521"><span class="linenos"> 521</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
</span><span id="Parser-522"><a href="#Parser-522"><span class="linenos"> 522</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">,</span>
</span><span id="Parser-523"><a href="#Parser-523"><span class="linenos"> 523</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
</span><span id="Parser-524"><a href="#Parser-524"><span class="linenos"> 524</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OPERATOR</span><span class="p">,</span>
</span><span id="Parser-525"><a href="#Parser-525"><span class="linenos"> 525</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">,</span>
</span><span id="Parser-526"><a href="#Parser-526"><span class="linenos"> 526</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERLAPS</span><span class="p">,</span>
</span><span id="Parser-527"><a href="#Parser-527"><span class="linenos"> 527</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">,</span>
</span><span id="Parser-528"><a href="#Parser-528"><span class="linenos"> 528</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span>
</span><span id="Parser-529"><a href="#Parser-529"><span class="linenos"> 529</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span>
</span><span id="Parser-530"><a href="#Parser-530"><span class="linenos"> 530</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span>
</span><span id="Parser-531"><a href="#Parser-531"><span class="linenos"> 531</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">,</span>
</span><span id="Parser-532"><a href="#Parser-532"><span class="linenos"> 532</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PUT</span><span class="p">,</span>
</span><span id="Parser-533"><a href="#Parser-533"><span class="linenos"> 533</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
</span><span id="Parser-534"><a href="#Parser-534"><span class="linenos"> 534</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RECURSIVE</span><span class="p">,</span>
</span><span id="Parser-535"><a href="#Parser-535"><span class="linenos"> 535</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">,</span>
</span><span id="Parser-536"><a href="#Parser-536"><span class="linenos"> 536</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFRESH</span><span class="p">,</span>
</span><span id="Parser-537"><a href="#Parser-537"><span class="linenos"> 537</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RENAME</span><span class="p">,</span>
</span><span id="Parser-538"><a href="#Parser-538"><span class="linenos"> 538</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
</span><span id="Parser-539"><a href="#Parser-539"><span class="linenos"> 539</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
</span><span id="Parser-540"><a href="#Parser-540"><span class="linenos"> 540</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">,</span>
</span><span id="Parser-541"><a href="#Parser-541"><span class="linenos"> 541</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
</span><span id="Parser-542"><a href="#Parser-542"><span class="linenos"> 542</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span>
</span><span id="Parser-543"><a href="#Parser-543"><span class="linenos"> 543</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
</span><span id="Parser-544"><a href="#Parser-544"><span class="linenos"> 544</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span>
</span><span id="Parser-545"><a href="#Parser-545"><span class="linenos"> 545</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SETTINGS</span><span class="p">,</span>
</span><span id="Parser-546"><a href="#Parser-546"><span class="linenos"> 546</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SHOW</span><span class="p">,</span>
</span><span id="Parser-547"><a href="#Parser-547"><span class="linenos"> 547</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">,</span>
</span><span id="Parser-548"><a href="#Parser-548"><span class="linenos"> 548</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="Parser-549"><a href="#Parser-549"><span class="linenos"> 549</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">,</span>
</span><span id="Parser-550"><a href="#Parser-550"><span class="linenos"> 550</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUNCATE</span><span class="p">,</span>
</span><span id="Parser-551"><a href="#Parser-551"><span class="linenos"> 551</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
</span><span id="Parser-552"><a href="#Parser-552"><span class="linenos"> 552</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">,</span>
</span><span id="Parser-553"><a href="#Parser-553"><span class="linenos"> 553</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">,</span>
</span><span id="Parser-554"><a href="#Parser-554"><span class="linenos"> 554</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">,</span>
</span><span id="Parser-555"><a href="#Parser-555"><span class="linenos"> 555</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</span><span class="p">,</span>
</span><span id="Parser-556"><a href="#Parser-556"><span class="linenos"> 556</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VOLATILE</span><span class="p">,</span>
</span><span id="Parser-557"><a href="#Parser-557"><span class="linenos"> 557</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
</span><span id="Parser-558"><a href="#Parser-558"><span class="linenos"> 558</span></a> <span class="o">*</span><span class="n">CREATABLES</span><span class="p">,</span>
</span><span id="Parser-559"><a href="#Parser-559"><span class="linenos"> 559</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
</span><span id="Parser-560"><a href="#Parser-560"><span class="linenos"> 560</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
</span><span id="Parser-561"><a href="#Parser-561"><span class="linenos"> 561</span></a> <span class="o">*</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">,</span>
</span><span id="Parser-562"><a href="#Parser-562"><span class="linenos"> 562</span></a> <span class="p">}</span>
</span><span id="Parser-563"><a href="#Parser-563"><span class="linenos"> 563</span></a> <span class="n">ID_VAR_TOKENS</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">)</span>
</span><span id="Parser-564"><a href="#Parser-564"><span class="linenos"> 564</span></a>
</span><span id="Parser-565"><a href="#Parser-565"><span class="linenos"> 565</span></a> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span>
</span><span id="Parser-566"><a href="#Parser-566"><span class="linenos"> 566</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
</span><span id="Parser-567"><a href="#Parser-567"><span class="linenos"> 567</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span>
</span><span id="Parser-568"><a href="#Parser-568"><span class="linenos"> 568</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
</span><span id="Parser-569"><a href="#Parser-569"><span class="linenos"> 569</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
</span><span id="Parser-570"><a href="#Parser-570"><span class="linenos"> 570</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
</span><span id="Parser-571"><a href="#Parser-571"><span class="linenos"> 571</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">,</span>
</span><span id="Parser-572"><a href="#Parser-572"><span class="linenos"> 572</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
</span><span id="Parser-573"><a href="#Parser-573"><span class="linenos"> 573</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
</span><span id="Parser-574"><a href="#Parser-574"><span class="linenos"> 574</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
</span><span id="Parser-575"><a href="#Parser-575"><span class="linenos"> 575</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
</span><span id="Parser-576"><a href="#Parser-576"><span class="linenos"> 576</span></a> <span class="p">}</span>
</span><span id="Parser-577"><a href="#Parser-577"><span class="linenos"> 577</span></a>
</span><span id="Parser-578"><a href="#Parser-578"><span class="linenos"> 578</span></a> <span class="n">ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span>
</span><span id="Parser-579"><a href="#Parser-579"><span class="linenos"> 579</span></a>
</span><span id="Parser-580"><a href="#Parser-580"><span class="linenos"> 580</span></a> <span class="n">ARRAY_CONSTRUCTORS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-581"><a href="#Parser-581"><span class="linenos"> 581</span></a> <span class="s2">&quot;ARRAY&quot;</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="Parser-582"><a href="#Parser-582"><span class="linenos"> 582</span></a> <span class="s2">&quot;LIST&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">List</span><span class="p">,</span>
</span><span id="Parser-583"><a href="#Parser-583"><span class="linenos"> 583</span></a> <span class="p">}</span>
</span><span id="Parser-584"><a href="#Parser-584"><span class="linenos"> 584</span></a>
</span><span id="Parser-585"><a href="#Parser-585"><span class="linenos"> 585</span></a> <span class="n">COMMENT_TABLE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">}</span>
</span><span id="Parser-586"><a href="#Parser-586"><span class="linenos"> 586</span></a>
</span><span id="Parser-587"><a href="#Parser-587"><span class="linenos"> 587</span></a> <span class="n">UPDATE_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">TABLE_ALIAS_TOKENS</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">}</span>
</span><span id="Parser-588"><a href="#Parser-588"><span class="linenos"> 588</span></a>
</span><span id="Parser-589"><a href="#Parser-589"><span class="linenos"> 589</span></a> <span class="n">TRIM_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;LEADING&quot;</span><span class="p">,</span> <span class="s2">&quot;TRAILING&quot;</span><span class="p">,</span> <span class="s2">&quot;BOTH&quot;</span><span class="p">}</span>
</span><span id="Parser-590"><a href="#Parser-590"><span class="linenos"> 590</span></a>
</span><span id="Parser-591"><a href="#Parser-591"><span class="linenos"> 591</span></a> <span class="n">FUNC_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-592"><a href="#Parser-592"><span class="linenos"> 592</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">,</span>
</span><span id="Parser-593"><a href="#Parser-593"><span class="linenos"> 593</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
</span><span id="Parser-594"><a href="#Parser-594"><span class="linenos"> 594</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATE</span><span class="p">,</span>
</span><span id="Parser-595"><a href="#Parser-595"><span class="linenos"> 595</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_DATETIME</span><span class="p">,</span>
</span><span id="Parser-596"><a href="#Parser-596"><span class="linenos"> 596</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_SCHEMA</span><span class="p">,</span>
</span><span id="Parser-597"><a href="#Parser-597"><span class="linenos"> 597</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
</span><span id="Parser-598"><a href="#Parser-598"><span class="linenos"> 598</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIME</span><span class="p">,</span>
</span><span id="Parser-599"><a href="#Parser-599"><span class="linenos"> 599</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_USER</span><span class="p">,</span>
</span><span id="Parser-600"><a href="#Parser-600"><span class="linenos"> 600</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span>
</span><span id="Parser-601"><a href="#Parser-601"><span class="linenos"> 601</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span>
</span><span id="Parser-602"><a href="#Parser-602"><span class="linenos"> 602</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span>
</span><span id="Parser-603"><a href="#Parser-603"><span class="linenos"> 603</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</span><span class="p">,</span>
</span><span id="Parser-604"><a href="#Parser-604"><span class="linenos"> 604</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
</span><span id="Parser-605"><a href="#Parser-605"><span class="linenos"> 605</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
</span><span id="Parser-606"><a href="#Parser-606"><span class="linenos"> 606</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">,</span>
</span><span id="Parser-607"><a href="#Parser-607"><span class="linenos"> 607</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">,</span>
</span><span id="Parser-608"><a href="#Parser-608"><span class="linenos"> 608</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">,</span>
</span><span id="Parser-609"><a href="#Parser-609"><span class="linenos"> 609</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">,</span>
</span><span id="Parser-610"><a href="#Parser-610"><span class="linenos"> 610</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">,</span>
</span><span id="Parser-611"><a href="#Parser-611"><span class="linenos"> 611</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">,</span>
</span><span id="Parser-612"><a href="#Parser-612"><span class="linenos"> 612</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">,</span>
</span><span id="Parser-613"><a href="#Parser-613"><span class="linenos"> 613</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">,</span>
</span><span id="Parser-614"><a href="#Parser-614"><span class="linenos"> 614</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">,</span>
</span><span id="Parser-615"><a href="#Parser-615"><span class="linenos"> 615</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span>
</span><span id="Parser-616"><a href="#Parser-616"><span class="linenos"> 616</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">,</span>
</span><span id="Parser-617"><a href="#Parser-617"><span class="linenos"> 617</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span>
</span><span id="Parser-618"><a href="#Parser-618"><span class="linenos"> 618</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">,</span>
</span><span id="Parser-619"><a href="#Parser-619"><span class="linenos"> 619</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span>
</span><span id="Parser-620"><a href="#Parser-620"><span class="linenos"> 620</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
</span><span id="Parser-621"><a href="#Parser-621"><span class="linenos"> 621</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
</span><span id="Parser-622"><a href="#Parser-622"><span class="linenos"> 622</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEQUENCE</span><span class="p">,</span>
</span><span id="Parser-623"><a href="#Parser-623"><span class="linenos"> 623</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATE</span><span class="p">,</span>
</span><span id="Parser-624"><a href="#Parser-624"><span class="linenos"> 624</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DATETIME</span><span class="p">,</span>
</span><span id="Parser-625"><a href="#Parser-625"><span class="linenos"> 625</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span>
</span><span id="Parser-626"><a href="#Parser-626"><span class="linenos"> 626</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
</span><span id="Parser-627"><a href="#Parser-627"><span class="linenos"> 627</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
</span><span id="Parser-628"><a href="#Parser-628"><span class="linenos"> 628</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUNCATE</span><span class="p">,</span>
</span><span id="Parser-629"><a href="#Parser-629"><span class="linenos"> 629</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">,</span>
</span><span id="Parser-630"><a href="#Parser-630"><span class="linenos"> 630</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">XOR</span><span class="p">,</span>
</span><span id="Parser-631"><a href="#Parser-631"><span class="linenos"> 631</span></a> <span class="o">*</span><span class="n">TYPE_TOKENS</span><span class="p">,</span>
</span><span id="Parser-632"><a href="#Parser-632"><span class="linenos"> 632</span></a> <span class="o">*</span><span class="n">SUBQUERY_PREDICATES</span><span class="p">,</span>
</span><span id="Parser-633"><a href="#Parser-633"><span class="linenos"> 633</span></a> <span class="p">}</span>
</span><span id="Parser-634"><a href="#Parser-634"><span class="linenos"> 634</span></a>
</span><span id="Parser-635"><a href="#Parser-635"><span class="linenos"> 635</span></a> <span class="n">CONJUNCTION</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="n">TokenType</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-636"><a href="#Parser-636"><span class="linenos"> 636</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">,</span>
</span><span id="Parser-637"><a href="#Parser-637"><span class="linenos"> 637</span></a> <span class="p">}</span>
</span><span id="Parser-638"><a href="#Parser-638"><span class="linenos"> 638</span></a>
</span><span id="Parser-639"><a href="#Parser-639"><span class="linenos"> 639</span></a> <span class="n">ASSIGNMENT</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="n">TokenType</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-640"><a href="#Parser-640"><span class="linenos"> 640</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON_EQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</span><span class="p">,</span>
</span><span id="Parser-641"><a href="#Parser-641"><span class="linenos"> 641</span></a> <span class="p">}</span>
</span><span id="Parser-642"><a href="#Parser-642"><span class="linenos"> 642</span></a>
</span><span id="Parser-643"><a href="#Parser-643"><span class="linenos"> 643</span></a> <span class="n">DISJUNCTION</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="n">TokenType</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-644"><a href="#Parser-644"><span class="linenos"> 644</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">,</span>
</span><span id="Parser-645"><a href="#Parser-645"><span class="linenos"> 645</span></a> <span class="p">}</span>
</span><span id="Parser-646"><a href="#Parser-646"><span class="linenos"> 646</span></a>
</span><span id="Parser-647"><a href="#Parser-647"><span class="linenos"> 647</span></a> <span class="n">EQUALITY</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-648"><a href="#Parser-648"><span class="linenos"> 648</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span>
</span><span id="Parser-649"><a href="#Parser-649"><span class="linenos"> 649</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NEQ</span><span class="p">,</span>
</span><span id="Parser-650"><a href="#Parser-650"><span class="linenos"> 650</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLSAFE_EQ</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span><span class="p">,</span>
</span><span id="Parser-651"><a href="#Parser-651"><span class="linenos"> 651</span></a> <span class="p">}</span>
</span><span id="Parser-652"><a href="#Parser-652"><span class="linenos"> 652</span></a>
</span><span id="Parser-653"><a href="#Parser-653"><span class="linenos"> 653</span></a> <span class="n">COMPARISON</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-654"><a href="#Parser-654"><span class="linenos"> 654</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span>
</span><span id="Parser-655"><a href="#Parser-655"><span class="linenos"> 655</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">GTE</span><span class="p">,</span>
</span><span id="Parser-656"><a href="#Parser-656"><span class="linenos"> 656</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span>
</span><span id="Parser-657"><a href="#Parser-657"><span class="linenos"> 657</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LTE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">LTE</span><span class="p">,</span>
</span><span id="Parser-658"><a href="#Parser-658"><span class="linenos"> 658</span></a> <span class="p">}</span>
</span><span id="Parser-659"><a href="#Parser-659"><span class="linenos"> 659</span></a>
</span><span id="Parser-660"><a href="#Parser-660"><span class="linenos"> 660</span></a> <span class="n">BITWISE</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-661"><a href="#Parser-661"><span class="linenos"> 661</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AMP</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseAnd</span><span class="p">,</span>
</span><span id="Parser-662"><a href="#Parser-662"><span class="linenos"> 662</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CARET</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseXor</span><span class="p">,</span>
</span><span id="Parser-663"><a href="#Parser-663"><span class="linenos"> 663</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIPE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseOr</span><span class="p">,</span>
</span><span id="Parser-664"><a href="#Parser-664"><span class="linenos"> 664</span></a> <span class="p">}</span>
</span><span id="Parser-665"><a href="#Parser-665"><span class="linenos"> 665</span></a>
</span><span id="Parser-666"><a href="#Parser-666"><span class="linenos"> 666</span></a> <span class="n">TERM</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-667"><a href="#Parser-667"><span class="linenos"> 667</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">,</span>
</span><span id="Parser-668"><a href="#Parser-668"><span class="linenos"> 668</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span>
</span><span id="Parser-669"><a href="#Parser-669"><span class="linenos"> 669</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mod</span><span class="p">,</span>
</span><span id="Parser-670"><a href="#Parser-670"><span class="linenos"> 670</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Collate</span><span class="p">,</span>
</span><span id="Parser-671"><a href="#Parser-671"><span class="linenos"> 671</span></a> <span class="p">}</span>
</span><span id="Parser-672"><a href="#Parser-672"><span class="linenos"> 672</span></a>
</span><span id="Parser-673"><a href="#Parser-673"><span class="linenos"> 673</span></a> <span class="n">FACTOR</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-674"><a href="#Parser-674"><span class="linenos"> 674</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DIV</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span><span class="p">,</span>
</span><span id="Parser-675"><a href="#Parser-675"><span class="linenos"> 675</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LR_ARROW</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Distance</span><span class="p">,</span>
</span><span id="Parser-676"><a href="#Parser-676"><span class="linenos"> 676</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Div</span><span class="p">,</span>
</span><span id="Parser-677"><a href="#Parser-677"><span class="linenos"> 677</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Mul</span><span class="p">,</span>
</span><span id="Parser-678"><a href="#Parser-678"><span class="linenos"> 678</span></a> <span class="p">}</span>
</span><span id="Parser-679"><a href="#Parser-679"><span class="linenos"> 679</span></a>
</span><span id="Parser-680"><a href="#Parser-680"><span class="linenos"> 680</span></a> <span class="n">EXPONENT</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="n">TokenType</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Parser-681"><a href="#Parser-681"><span class="linenos"> 681</span></a>
</span><span id="Parser-682"><a href="#Parser-682"><span class="linenos"> 682</span></a> <span class="n">TIMES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-683"><a href="#Parser-683"><span class="linenos"> 683</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIME</span><span class="p">,</span>
</span><span id="Parser-684"><a href="#Parser-684"><span class="linenos"> 684</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMETZ</span><span class="p">,</span>
</span><span id="Parser-685"><a href="#Parser-685"><span class="linenos"> 685</span></a> <span class="p">}</span>
</span><span id="Parser-686"><a href="#Parser-686"><span class="linenos"> 686</span></a>
</span><span id="Parser-687"><a href="#Parser-687"><span class="linenos"> 687</span></a> <span class="n">TIMESTAMPS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-688"><a href="#Parser-688"><span class="linenos"> 688</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
</span><span id="Parser-689"><a href="#Parser-689"><span class="linenos"> 689</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPNTZ</span><span class="p">,</span>
</span><span id="Parser-690"><a href="#Parser-690"><span class="linenos"> 690</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
</span><span id="Parser-691"><a href="#Parser-691"><span class="linenos"> 691</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span>
</span><span id="Parser-692"><a href="#Parser-692"><span class="linenos"> 692</span></a> <span class="o">*</span><span class="n">TIMES</span><span class="p">,</span>
</span><span id="Parser-693"><a href="#Parser-693"><span class="linenos"> 693</span></a> <span class="p">}</span>
</span><span id="Parser-694"><a href="#Parser-694"><span class="linenos"> 694</span></a>
</span><span id="Parser-695"><a href="#Parser-695"><span class="linenos"> 695</span></a> <span class="n">SET_OPERATIONS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-696"><a href="#Parser-696"><span class="linenos"> 696</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">,</span>
</span><span id="Parser-697"><a href="#Parser-697"><span class="linenos"> 697</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERSECT</span><span class="p">,</span>
</span><span id="Parser-698"><a href="#Parser-698"><span class="linenos"> 698</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">,</span>
</span><span id="Parser-699"><a href="#Parser-699"><span class="linenos"> 699</span></a> <span class="p">}</span>
</span><span id="Parser-700"><a href="#Parser-700"><span class="linenos"> 700</span></a>
</span><span id="Parser-701"><a href="#Parser-701"><span class="linenos"> 701</span></a> <span class="n">JOIN_METHODS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-702"><a href="#Parser-702"><span class="linenos"> 702</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ASOF</span><span class="p">,</span>
</span><span id="Parser-703"><a href="#Parser-703"><span class="linenos"> 703</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATURAL</span><span class="p">,</span>
</span><span id="Parser-704"><a href="#Parser-704"><span class="linenos"> 704</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">POSITIONAL</span><span class="p">,</span>
</span><span id="Parser-705"><a href="#Parser-705"><span class="linenos"> 705</span></a> <span class="p">}</span>
</span><span id="Parser-706"><a href="#Parser-706"><span class="linenos"> 706</span></a>
</span><span id="Parser-707"><a href="#Parser-707"><span class="linenos"> 707</span></a> <span class="n">JOIN_SIDES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-708"><a href="#Parser-708"><span class="linenos"> 708</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LEFT</span><span class="p">,</span>
</span><span id="Parser-709"><a href="#Parser-709"><span class="linenos"> 709</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">,</span>
</span><span id="Parser-710"><a href="#Parser-710"><span class="linenos"> 710</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FULL</span><span class="p">,</span>
</span><span id="Parser-711"><a href="#Parser-711"><span class="linenos"> 711</span></a> <span class="p">}</span>
</span><span id="Parser-712"><a href="#Parser-712"><span class="linenos"> 712</span></a>
</span><span id="Parser-713"><a href="#Parser-713"><span class="linenos"> 713</span></a> <span class="n">JOIN_KINDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-714"><a href="#Parser-714"><span class="linenos"> 714</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANTI</span><span class="p">,</span>
</span><span id="Parser-715"><a href="#Parser-715"><span class="linenos"> 715</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span>
</span><span id="Parser-716"><a href="#Parser-716"><span class="linenos"> 716</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INNER</span><span class="p">,</span>
</span><span id="Parser-717"><a href="#Parser-717"><span class="linenos"> 717</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span>
</span><span id="Parser-718"><a href="#Parser-718"><span class="linenos"> 718</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMI</span><span class="p">,</span>
</span><span id="Parser-719"><a href="#Parser-719"><span class="linenos"> 719</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRAIGHT_JOIN</span><span class="p">,</span>
</span><span id="Parser-720"><a href="#Parser-720"><span class="linenos"> 720</span></a> <span class="p">}</span>
</span><span id="Parser-721"><a href="#Parser-721"><span class="linenos"> 721</span></a>
</span><span id="Parser-722"><a href="#Parser-722"><span class="linenos"> 722</span></a> <span class="n">JOIN_HINTS</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="Parser-723"><a href="#Parser-723"><span class="linenos"> 723</span></a>
</span><span id="Parser-724"><a href="#Parser-724"><span class="linenos"> 724</span></a> <span class="n">LAMBDAS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-725"><a href="#Parser-725"><span class="linenos"> 725</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-726"><a href="#Parser-726"><span class="linenos"> 726</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">,</span>
</span><span id="Parser-727"><a href="#Parser-727"><span class="linenos"> 727</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_replace_lambda</span><span class="p">(</span>
</span><span id="Parser-728"><a href="#Parser-728"><span class="linenos"> 728</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span>
</span><span id="Parser-729"><a href="#Parser-729"><span class="linenos"> 729</span></a> <span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-730"><a href="#Parser-730"><span class="linenos"> 730</span></a> <span class="p">),</span>
</span><span id="Parser-731"><a href="#Parser-731"><span class="linenos"> 731</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-732"><a href="#Parser-732"><span class="linenos"> 732</span></a> <span class="p">),</span>
</span><span id="Parser-733"><a href="#Parser-733"><span class="linenos"> 733</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-734"><a href="#Parser-734"><span class="linenos"> 734</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">,</span>
</span><span id="Parser-735"><a href="#Parser-735"><span class="linenos"> 735</span></a> <span class="n">this</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">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
</span><span id="Parser-736"><a href="#Parser-736"><span class="linenos"> 736</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span>
</span><span id="Parser-737"><a href="#Parser-737"><span class="linenos"> 737</span></a> <span class="p">),</span>
</span><span id="Parser-738"><a href="#Parser-738"><span class="linenos"> 738</span></a> <span class="p">}</span>
</span><span id="Parser-739"><a href="#Parser-739"><span class="linenos"> 739</span></a>
</span><span id="Parser-740"><a href="#Parser-740"><span class="linenos"> 740</span></a> <span class="n">COLUMN_OPERATORS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-741"><a href="#Parser-741"><span class="linenos"> 741</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-742"><a href="#Parser-742"><span class="linenos"> 742</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOTCOLON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-743"><a href="#Parser-743"><span class="linenos"> 743</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONCast</span><span class="p">,</span>
</span><span id="Parser-744"><a href="#Parser-744"><span class="linenos"> 744</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-745"><a href="#Parser-745"><span class="linenos"> 745</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
</span><span id="Parser-746"><a href="#Parser-746"><span class="linenos"> 746</span></a> <span class="p">),</span>
</span><span id="Parser-747"><a href="#Parser-747"><span class="linenos"> 747</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-748"><a href="#Parser-748"><span class="linenos"> 748</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
</span><span id="Parser-749"><a href="#Parser-749"><span class="linenos"> 749</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-750"><a href="#Parser-750"><span class="linenos"> 750</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
</span><span id="Parser-751"><a href="#Parser-751"><span class="linenos"> 751</span></a> <span class="p">),</span>
</span><span id="Parser-752"><a href="#Parser-752"><span class="linenos"> 752</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-753"><a href="#Parser-753"><span class="linenos"> 753</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
</span><span id="Parser-754"><a href="#Parser-754"><span class="linenos"> 754</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-755"><a href="#Parser-755"><span class="linenos"> 755</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">to_json_path</span><span class="p">(</span><span class="n">path</span><span class="p">),</span>
</span><span id="Parser-756"><a href="#Parser-756"><span class="linenos"> 756</span></a> <span class="n">only_json_types</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_ARROWS_REQUIRE_JSON_TYPE</span><span class="p">,</span>
</span><span id="Parser-757"><a href="#Parser-757"><span class="linenos"> 757</span></a> <span class="p">),</span>
</span><span id="Parser-758"><a href="#Parser-758"><span class="linenos"> 758</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-759"><a href="#Parser-759"><span class="linenos"> 759</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">,</span>
</span><span id="Parser-760"><a href="#Parser-760"><span class="linenos"> 760</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-761"><a href="#Parser-761"><span class="linenos"> 761</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">to_json_path</span><span class="p">(</span><span class="n">path</span><span class="p">),</span>
</span><span id="Parser-762"><a href="#Parser-762"><span class="linenos"> 762</span></a> <span class="n">only_json_types</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_ARROWS_REQUIRE_JSON_TYPE</span><span class="p">,</span>
</span><span id="Parser-763"><a href="#Parser-763"><span class="linenos"> 763</span></a> <span class="p">),</span>
</span><span id="Parser-764"><a href="#Parser-764"><span class="linenos"> 764</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HASH_ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-765"><a href="#Parser-765"><span class="linenos"> 765</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtract</span><span class="p">,</span>
</span><span id="Parser-766"><a href="#Parser-766"><span class="linenos"> 766</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-767"><a href="#Parser-767"><span class="linenos"> 767</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
</span><span id="Parser-768"><a href="#Parser-768"><span class="linenos"> 768</span></a> <span class="p">),</span>
</span><span id="Parser-769"><a href="#Parser-769"><span class="linenos"> 769</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DHASH_ARROW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-770"><a href="#Parser-770"><span class="linenos"> 770</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBExtractScalar</span><span class="p">,</span>
</span><span id="Parser-771"><a href="#Parser-771"><span class="linenos"> 771</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-772"><a href="#Parser-772"><span class="linenos"> 772</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
</span><span id="Parser-773"><a href="#Parser-773"><span class="linenos"> 773</span></a> <span class="p">),</span>
</span><span id="Parser-774"><a href="#Parser-774"><span class="linenos"> 774</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-775"><a href="#Parser-775"><span class="linenos"> 775</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONBContains</span><span class="p">,</span>
</span><span id="Parser-776"><a href="#Parser-776"><span class="linenos"> 776</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-777"><a href="#Parser-777"><span class="linenos"> 777</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
</span><span id="Parser-778"><a href="#Parser-778"><span class="linenos"> 778</span></a> <span class="p">),</span>
</span><span id="Parser-779"><a href="#Parser-779"><span class="linenos"> 779</span></a> <span class="p">}</span>
</span><span id="Parser-780"><a href="#Parser-780"><span class="linenos"> 780</span></a>
</span><span id="Parser-781"><a href="#Parser-781"><span class="linenos"> 781</span></a> <span class="n">EXPRESSION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-782"><a href="#Parser-782"><span class="linenos"> 782</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">),</span>
</span><span id="Parser-783"><a href="#Parser-783"><span class="linenos"> 783</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
</span><span id="Parser-784"><a href="#Parser-784"><span class="linenos"> 784</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Condition</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span>
</span><span id="Parser-785"><a href="#Parser-785"><span class="linenos"> 785</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-786"><a href="#Parser-786"><span class="linenos"> 786</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">(),</span>
</span><span id="Parser-787"><a href="#Parser-787"><span class="linenos"> 787</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-788"><a href="#Parser-788"><span class="linenos"> 788</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">(),</span>
</span><span id="Parser-789"><a href="#Parser-789"><span class="linenos"> 789</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_having</span><span class="p">(),</span>
</span><span id="Parser-790"><a href="#Parser-790"><span class="linenos"> 790</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint_body</span><span class="p">(),</span>
</span><span id="Parser-791"><a href="#Parser-791"><span class="linenos"> 791</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span>
</span><span id="Parser-792"><a href="#Parser-792"><span class="linenos"> 792</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">(),</span>
</span><span id="Parser-793"><a href="#Parser-793"><span class="linenos"> 793</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(),</span>
</span><span id="Parser-794"><a href="#Parser-794"><span class="linenos"> 794</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">(),</span>
</span><span id="Parser-795"><a href="#Parser-795"><span class="linenos"> 795</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(),</span>
</span><span id="Parser-796"><a href="#Parser-796"><span class="linenos"> 796</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_offset</span><span class="p">(),</span>
</span><span id="Parser-797"><a href="#Parser-797"><span class="linenos"> 797</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(),</span>
</span><span id="Parser-798"><a href="#Parser-798"><span class="linenos"> 798</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(),</span>
</span><span id="Parser-799"><a href="#Parser-799"><span class="linenos"> 799</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">(),</span>
</span><span id="Parser-800"><a href="#Parser-800"><span class="linenos"> 800</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_qualify</span><span class="p">(),</span>
</span><span id="Parser-801"><a href="#Parser-801"><span class="linenos"> 801</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
</span><span id="Parser-802"><a href="#Parser-802"><span class="linenos"> 802</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(),</span>
</span><span id="Parser-803"><a href="#Parser-803"><span class="linenos"> 803</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Sort</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Sort</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">),</span>
</span><span id="Parser-804"><a href="#Parser-804"><span class="linenos"> 804</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(),</span>
</span><span id="Parser-805"><a href="#Parser-805"><span class="linenos"> 805</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
</span><span id="Parser-806"><a href="#Parser-806"><span class="linenos"> 806</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
</span><span id="Parser-807"><a href="#Parser-807"><span class="linenos"> 807</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Whens</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_when_matched</span><span class="p">(),</span>
</span><span id="Parser-808"><a href="#Parser-808"><span class="linenos"> 808</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
</span><span id="Parser-809"><a href="#Parser-809"><span class="linenos"> 809</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_named_window</span><span class="p">(),</span>
</span><span id="Parser-810"><a href="#Parser-810"><span class="linenos"> 810</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_with</span><span class="p">(),</span>
</span><span id="Parser-811"><a href="#Parser-811"><span class="linenos"> 811</span></a> <span class="s2">&quot;JOIN_TYPE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">(),</span>
</span><span id="Parser-812"><a href="#Parser-812"><span class="linenos"> 812</span></a> <span class="p">}</span>
</span><span id="Parser-813"><a href="#Parser-813"><span class="linenos"> 813</span></a>
</span><span id="Parser-814"><a href="#Parser-814"><span class="linenos"> 814</span></a> <span class="n">STATEMENT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-815"><a href="#Parser-815"><span class="linenos"> 815</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALTER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter</span><span class="p">(),</span>
</span><span id="Parser-816"><a href="#Parser-816"><span class="linenos"> 816</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANALYZE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze</span><span class="p">(),</span>
</span><span id="Parser-817"><a href="#Parser-817"><span class="linenos"> 817</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_transaction</span><span class="p">(),</span>
</span><span id="Parser-818"><a href="#Parser-818"><span class="linenos"> 818</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CACHE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cache</span><span class="p">(),</span>
</span><span id="Parser-819"><a href="#Parser-819"><span class="linenos"> 819</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_comment</span><span class="p">(),</span>
</span><span id="Parser-820"><a href="#Parser-820"><span class="linenos"> 820</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMIT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_commit_or_rollback</span><span class="p">(),</span>
</span><span id="Parser-821"><a href="#Parser-821"><span class="linenos"> 821</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COPY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_copy</span><span class="p">(),</span>
</span><span id="Parser-822"><a href="#Parser-822"><span class="linenos"> 822</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_create</span><span class="p">(),</span>
</span><span id="Parser-823"><a href="#Parser-823"><span class="linenos"> 823</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_delete</span><span class="p">(),</span>
</span><span id="Parser-824"><a href="#Parser-824"><span class="linenos"> 824</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_describe</span><span class="p">(),</span>
</span><span id="Parser-825"><a href="#Parser-825"><span class="linenos"> 825</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_describe</span><span class="p">(),</span>
</span><span id="Parser-826"><a href="#Parser-826"><span class="linenos"> 826</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">(),</span>
</span><span id="Parser-827"><a href="#Parser-827"><span class="linenos"> 827</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GRANT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_grant</span><span class="p">(),</span>
</span><span id="Parser-828"><a href="#Parser-828"><span class="linenos"> 828</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_insert</span><span class="p">(),</span>
</span><span id="Parser-829"><a href="#Parser-829"><span class="linenos"> 829</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">KILL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_kill</span><span class="p">(),</span>
</span><span id="Parser-830"><a href="#Parser-830"><span class="linenos"> 830</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOAD</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_load</span><span class="p">(),</span>
</span><span id="Parser-831"><a href="#Parser-831"><span class="linenos"> 831</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MERGE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_merge</span><span class="p">(),</span>
</span><span id="Parser-832"><a href="#Parser-832"><span class="linenos"> 832</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</span><span class="p">(),</span>
</span><span id="Parser-833"><a href="#Parser-833"><span class="linenos"> 833</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRAGMA</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pragma</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()),</span>
</span><span id="Parser-834"><a href="#Parser-834"><span class="linenos"> 834</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFRESH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_refresh</span><span class="p">(),</span>
</span><span id="Parser-835"><a href="#Parser-835"><span class="linenos"> 835</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_commit_or_rollback</span><span class="p">(),</span>
</span><span id="Parser-836"><a href="#Parser-836"><span class="linenos"> 836</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set</span><span class="p">(),</span>
</span><span id="Parser-837"><a href="#Parser-837"><span class="linenos"> 837</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUNCATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_truncate_table</span><span class="p">(),</span>
</span><span id="Parser-838"><a href="#Parser-838"><span class="linenos"> 838</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNCACHE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_uncache</span><span class="p">(),</span>
</span><span id="Parser-839"><a href="#Parser-839"><span class="linenos"> 839</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</span><span class="p">(</span><span class="n">is_unpivot</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-840"><a href="#Parser-840"><span class="linenos"> 840</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_update</span><span class="p">(),</span>
</span><span id="Parser-841"><a href="#Parser-841"><span class="linenos"> 841</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_use</span><span class="p">(),</span>
</span><span id="Parser-842"><a href="#Parser-842"><span class="linenos"> 842</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Semicolon</span><span class="p">(),</span>
</span><span id="Parser-843"><a href="#Parser-843"><span class="linenos"> 843</span></a> <span class="p">}</span>
</span><span id="Parser-844"><a href="#Parser-844"><span class="linenos"> 844</span></a>
</span><span id="Parser-845"><a href="#Parser-845"><span class="linenos"> 845</span></a> <span class="n">UNARY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-846"><a href="#Parser-846"><span class="linenos"> 846</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">(),</span> <span class="c1"># Unary + is handled as a no-op</span>
</span><span id="Parser-847"><a href="#Parser-847"><span class="linenos"> 847</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">()),</span>
</span><span id="Parser-848"><a href="#Parser-848"><span class="linenos"> 848</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TILDA</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">BitwiseNot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">()),</span>
</span><span id="Parser-849"><a href="#Parser-849"><span class="linenos"> 849</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DASH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Neg</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">()),</span>
</span><span id="Parser-850"><a href="#Parser-850"><span class="linenos"> 850</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PIPE_SLASH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Sqrt</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">()),</span>
</span><span id="Parser-851"><a href="#Parser-851"><span class="linenos"> 851</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE_SLASH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cbrt</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">()),</span>
</span><span id="Parser-852"><a href="#Parser-852"><span class="linenos"> 852</span></a> <span class="p">}</span>
</span><span id="Parser-853"><a href="#Parser-853"><span class="linenos"> 853</span></a>
</span><span id="Parser-854"><a href="#Parser-854"><span class="linenos"> 854</span></a> <span class="n">STRING_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-855"><a href="#Parser-855"><span class="linenos"> 855</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-856"><a href="#Parser-856"><span class="linenos"> 856</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RawString</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-857"><a href="#Parser-857"><span class="linenos"> 857</span></a> <span class="p">),</span>
</span><span id="Parser-858"><a href="#Parser-858"><span class="linenos"> 858</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NATIONAL_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-859"><a href="#Parser-859"><span class="linenos"> 859</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">National</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-860"><a href="#Parser-860"><span class="linenos"> 860</span></a> <span class="p">),</span>
</span><span id="Parser-861"><a href="#Parser-861"><span class="linenos"> 861</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RawString</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">),</span>
</span><span id="Parser-862"><a href="#Parser-862"><span class="linenos"> 862</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-863"><a href="#Parser-863"><span class="linenos"> 863</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">True</span>
</span><span id="Parser-864"><a href="#Parser-864"><span class="linenos"> 864</span></a> <span class="p">),</span>
</span><span id="Parser-865"><a href="#Parser-865"><span class="linenos"> 865</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNICODE_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-866"><a href="#Parser-866"><span class="linenos"> 866</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnicodeString</span><span class="p">,</span>
</span><span id="Parser-867"><a href="#Parser-867"><span class="linenos"> 867</span></a> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
</span><span id="Parser-868"><a href="#Parser-868"><span class="linenos"> 868</span></a> <span class="n">escape</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UESCAPE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="Parser-869"><a href="#Parser-869"><span class="linenos"> 869</span></a> <span class="p">),</span>
</span><span id="Parser-870"><a href="#Parser-870"><span class="linenos"> 870</span></a> <span class="p">}</span>
</span><span id="Parser-871"><a href="#Parser-871"><span class="linenos"> 871</span></a>
</span><span id="Parser-872"><a href="#Parser-872"><span class="linenos"> 872</span></a> <span class="n">NUMERIC_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-873"><a href="#Parser-873"><span class="linenos"> 873</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BIT_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">BitString</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">),</span>
</span><span id="Parser-874"><a href="#Parser-874"><span class="linenos"> 874</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BYTE_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ByteString</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">),</span>
</span><span id="Parser-875"><a href="#Parser-875"><span class="linenos"> 875</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HEX_STRING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-876"><a href="#Parser-876"><span class="linenos"> 876</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HexString</span><span class="p">,</span>
</span><span id="Parser-877"><a href="#Parser-877"><span class="linenos"> 877</span></a> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
</span><span id="Parser-878"><a href="#Parser-878"><span class="linenos"> 878</span></a> <span class="n">is_integer</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">HEX_STRING_IS_INTEGER_TYPE</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-879"><a href="#Parser-879"><span class="linenos"> 879</span></a> <span class="p">),</span>
</span><span id="Parser-880"><a href="#Parser-880"><span class="linenos"> 880</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-881"><a href="#Parser-881"><span class="linenos"> 881</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">is_string</span><span class="o">=</span><span class="kc">False</span>
</span><span id="Parser-882"><a href="#Parser-882"><span class="linenos"> 882</span></a> <span class="p">),</span>
</span><span id="Parser-883"><a href="#Parser-883"><span class="linenos"> 883</span></a> <span class="p">}</span>
</span><span id="Parser-884"><a href="#Parser-884"><span class="linenos"> 884</span></a>
</span><span id="Parser-885"><a href="#Parser-885"><span class="linenos"> 885</span></a> <span class="n">PRIMARY_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-886"><a href="#Parser-886"><span class="linenos"> 886</span></a> <span class="o">**</span><span class="n">STRING_PARSERS</span><span class="p">,</span>
</span><span id="Parser-887"><a href="#Parser-887"><span class="linenos"> 887</span></a> <span class="o">**</span><span class="n">NUMERIC_PARSERS</span><span class="p">,</span>
</span><span id="Parser-888"><a href="#Parser-888"><span class="linenos"> 888</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTRODUCER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_introducer</span><span class="p">(</span><span class="n">token</span><span class="p">),</span>
</span><span id="Parser-889"><a href="#Parser-889"><span class="linenos"> 889</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">),</span>
</span><span id="Parser-890"><a href="#Parser-890"><span class="linenos"> 890</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-891"><a href="#Parser-891"><span class="linenos"> 891</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Boolean</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="Parser-892"><a href="#Parser-892"><span class="linenos"> 892</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SESSION_PARAMETER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_session_parameter</span><span class="p">(),</span>
</span><span id="Parser-893"><a href="#Parser-893"><span class="linenos"> 893</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star_ops</span><span class="p">(),</span>
</span><span id="Parser-894"><a href="#Parser-894"><span class="linenos"> 894</span></a> <span class="p">}</span>
</span><span id="Parser-895"><a href="#Parser-895"><span class="linenos"> 895</span></a>
</span><span id="Parser-896"><a href="#Parser-896"><span class="linenos"> 896</span></a> <span class="n">PLACEHOLDER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-897"><a href="#Parser-897"><span class="linenos"> 897</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PLACEHOLDER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">),</span>
</span><span id="Parser-898"><a href="#Parser-898"><span class="linenos"> 898</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_parameter</span><span class="p">(),</span>
</span><span id="Parser-899"><a href="#Parser-899"><span class="linenos"> 899</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
</span><span id="Parser-900"><a href="#Parser-900"><span class="linenos"> 900</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Placeholder</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="Parser-901"><a href="#Parser-901"><span class="linenos"> 901</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">)</span>
</span><span id="Parser-902"><a href="#Parser-902"><span class="linenos"> 902</span></a> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-903"><a href="#Parser-903"><span class="linenos"> 903</span></a> <span class="p">),</span>
</span><span id="Parser-904"><a href="#Parser-904"><span class="linenos"> 904</span></a> <span class="p">}</span>
</span><span id="Parser-905"><a href="#Parser-905"><span class="linenos"> 905</span></a>
</span><span id="Parser-906"><a href="#Parser-906"><span class="linenos"> 906</span></a> <span class="n">RANGE_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-907"><a href="#Parser-907"><span class="linenos"> 907</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">AT_GT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContainsAll</span><span class="p">),</span>
</span><span id="Parser-908"><a href="#Parser-908"><span class="linenos"> 908</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_between</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
</span><span id="Parser-909"><a href="#Parser-909"><span class="linenos"> 909</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GLOB</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Glob</span><span class="p">),</span>
</span><span id="Parser-910"><a href="#Parser-910"><span class="linenos"> 910</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ILIKE</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">),</span>
</span><span id="Parser-911"><a href="#Parser-911"><span class="linenos"> 911</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
</span><span id="Parser-912"><a href="#Parser-912"><span class="linenos"> 912</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IRLIKE</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RegexpILike</span><span class="p">),</span>
</span><span id="Parser-913"><a href="#Parser-913"><span class="linenos"> 913</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_is</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
</span><span id="Parser-914"><a href="#Parser-914"><span class="linenos"> 914</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIKE</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Like</span><span class="p">),</span>
</span><span id="Parser-915"><a href="#Parser-915"><span class="linenos"> 915</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT_AT</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayContainsAll</span><span class="p">,</span> <span class="n">reverse_args</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-916"><a href="#Parser-916"><span class="linenos"> 916</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OVERLAPS</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Overlaps</span><span class="p">),</span>
</span><span id="Parser-917"><a href="#Parser-917"><span class="linenos"> 917</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">RLIKE</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RegexpLike</span><span class="p">),</span>
</span><span id="Parser-918"><a href="#Parser-918"><span class="linenos"> 918</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SIMILAR_TO</span><span class="p">:</span> <span class="n">binary_range_parser</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SimilarTo</span><span class="p">),</span>
</span><span id="Parser-919"><a href="#Parser-919"><span class="linenos"> 919</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_comprehension</span><span class="p">(</span><span class="n">this</span><span class="p">),</span>
</span><span id="Parser-920"><a href="#Parser-920"><span class="linenos"> 920</span></a> <span class="p">}</span>
</span><span id="Parser-921"><a href="#Parser-921"><span class="linenos"> 921</span></a>
</span><span id="Parser-922"><a href="#Parser-922"><span class="linenos"> 922</span></a> <span class="n">PROPERTY_PARSERS</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">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-923"><a href="#Parser-923"><span class="linenos"> 923</span></a> <span class="s2">&quot;ALLOWED_VALUES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-924"><a href="#Parser-924"><span class="linenos"> 924</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AllowedValuesProperty</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">)</span>
</span><span id="Parser-925"><a href="#Parser-925"><span class="linenos"> 925</span></a> <span class="p">),</span>
</span><span id="Parser-926"><a href="#Parser-926"><span class="linenos"> 926</span></a> <span class="s2">&quot;ALGORITHM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlgorithmProperty</span><span class="p">),</span>
</span><span id="Parser-927"><a href="#Parser-927"><span class="linenos"> 927</span></a> <span class="s2">&quot;AUTO&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_auto_property</span><span class="p">(),</span>
</span><span id="Parser-928"><a href="#Parser-928"><span class="linenos"> 928</span></a> <span class="s2">&quot;AUTO_INCREMENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">),</span>
</span><span id="Parser-929"><a href="#Parser-929"><span class="linenos"> 929</span></a> <span class="s2">&quot;BACKUP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-930"><a href="#Parser-930"><span class="linenos"> 930</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BackupProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-931"><a href="#Parser-931"><span class="linenos"> 931</span></a> <span class="p">),</span>
</span><span id="Parser-932"><a href="#Parser-932"><span class="linenos"> 932</span></a> <span class="s2">&quot;BLOCKCOMPRESSION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_blockcompression</span><span class="p">(),</span>
</span><span id="Parser-933"><a href="#Parser-933"><span class="linenos"> 933</span></a> <span class="s2">&quot;CHARSET&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_character_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="Parser-934"><a href="#Parser-934"><span class="linenos"> 934</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_character_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="Parser-935"><a href="#Parser-935"><span class="linenos"> 935</span></a> <span class="s2">&quot;CHECKSUM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_checksum</span><span class="p">(),</span>
</span><span id="Parser-936"><a href="#Parser-936"><span class="linenos"> 936</span></a> <span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cluster</span><span class="p">(),</span>
</span><span id="Parser-937"><a href="#Parser-937"><span class="linenos"> 937</span></a> <span class="s2">&quot;CLUSTERED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_clustered_by</span><span class="p">(),</span>
</span><span id="Parser-938"><a href="#Parser-938"><span class="linenos"> 938</span></a> <span class="s2">&quot;COLLATE&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span>
</span><span id="Parser-939"><a href="#Parser-939"><span class="linenos"> 939</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
</span><span id="Parser-940"><a href="#Parser-940"><span class="linenos"> 940</span></a> <span class="p">),</span>
</span><span id="Parser-941"><a href="#Parser-941"><span class="linenos"> 941</span></a> <span class="s2">&quot;COMMENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SchemaCommentProperty</span><span class="p">),</span>
</span><span id="Parser-942"><a href="#Parser-942"><span class="linenos"> 942</span></a> <span class="s2">&quot;CONTAINS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_contains_property</span><span class="p">(),</span>
</span><span id="Parser-943"><a href="#Parser-943"><span class="linenos"> 943</span></a> <span class="s2">&quot;COPY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_copy_property</span><span class="p">(),</span>
</span><span id="Parser-944"><a href="#Parser-944"><span class="linenos"> 944</span></a> <span class="s2">&quot;DATABLOCKSIZE&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_datablocksize</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="Parser-945"><a href="#Parser-945"><span class="linenos"> 945</span></a> <span class="s2">&quot;DATA_DELETION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_data_deletion_property</span><span class="p">(),</span>
</span><span id="Parser-946"><a href="#Parser-946"><span class="linenos"> 946</span></a> <span class="s2">&quot;DEFINER&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_definer</span><span class="p">(),</span>
</span><span id="Parser-947"><a href="#Parser-947"><span class="linenos"> 947</span></a> <span class="s2">&quot;DETERMINISTIC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-948"><a href="#Parser-948"><span class="linenos"> 948</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;IMMUTABLE&quot;</span><span class="p">)</span>
</span><span id="Parser-949"><a href="#Parser-949"><span class="linenos"> 949</span></a> <span class="p">),</span>
</span><span id="Parser-950"><a href="#Parser-950"><span class="linenos"> 950</span></a> <span class="s2">&quot;DISTRIBUTED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_distributed_property</span><span class="p">(),</span>
</span><span id="Parser-951"><a href="#Parser-951"><span class="linenos"> 951</span></a> <span class="s2">&quot;DUPLICATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_composite_key_property</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DuplicateKeyProperty</span><span class="p">),</span>
</span><span id="Parser-952"><a href="#Parser-952"><span class="linenos"> 952</span></a> <span class="s2">&quot;DYNAMIC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DynamicProperty</span><span class="p">),</span>
</span><span id="Parser-953"><a href="#Parser-953"><span class="linenos"> 953</span></a> <span class="s2">&quot;DISTKEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_distkey</span><span class="p">(),</span>
</span><span id="Parser-954"><a href="#Parser-954"><span class="linenos"> 954</span></a> <span class="s2">&quot;DISTSTYLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">),</span>
</span><span id="Parser-955"><a href="#Parser-955"><span class="linenos"> 955</span></a> <span class="s2">&quot;EMPTY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EmptyProperty</span><span class="p">),</span>
</span><span id="Parser-956"><a href="#Parser-956"><span class="linenos"> 956</span></a> <span class="s2">&quot;ENGINE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">),</span>
</span><span id="Parser-957"><a href="#Parser-957"><span class="linenos"> 957</span></a> <span class="s2">&quot;EXECUTE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">),</span>
</span><span id="Parser-958"><a href="#Parser-958"><span class="linenos"> 958</span></a> <span class="s2">&quot;EXTERNAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ExternalProperty</span><span class="p">),</span>
</span><span id="Parser-959"><a href="#Parser-959"><span class="linenos"> 959</span></a> <span class="s2">&quot;FALLBACK&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_fallback</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="Parser-960"><a href="#Parser-960"><span class="linenos"> 960</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">),</span>
</span><span id="Parser-961"><a href="#Parser-961"><span class="linenos"> 961</span></a> <span class="s2">&quot;FREESPACE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_freespace</span><span class="p">(),</span>
</span><span id="Parser-962"><a href="#Parser-962"><span class="linenos"> 962</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GlobalProperty</span><span class="p">),</span>
</span><span id="Parser-963"><a href="#Parser-963"><span class="linenos"> 963</span></a> <span class="s2">&quot;HEAP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">HeapProperty</span><span class="p">),</span>
</span><span id="Parser-964"><a href="#Parser-964"><span class="linenos"> 964</span></a> <span class="s2">&quot;ICEBERG&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">IcebergProperty</span><span class="p">),</span>
</span><span id="Parser-965"><a href="#Parser-965"><span class="linenos"> 965</span></a> <span class="s2">&quot;IMMUTABLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-966"><a href="#Parser-966"><span class="linenos"> 966</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;IMMUTABLE&quot;</span><span class="p">)</span>
</span><span id="Parser-967"><a href="#Parser-967"><span class="linenos"> 967</span></a> <span class="p">),</span>
</span><span id="Parser-968"><a href="#Parser-968"><span class="linenos"> 968</span></a> <span class="s2">&quot;INHERITS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-969"><a href="#Parser-969"><span class="linenos"> 969</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InheritsProperty</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">)</span>
</span><span id="Parser-970"><a href="#Parser-970"><span class="linenos"> 970</span></a> <span class="p">),</span>
</span><span id="Parser-971"><a href="#Parser-971"><span class="linenos"> 971</span></a> <span class="s2">&quot;INPUT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">InputModelProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()),</span>
</span><span id="Parser-972"><a href="#Parser-972"><span class="linenos"> 972</span></a> <span class="s2">&quot;JOURNAL&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_journal</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="Parser-973"><a href="#Parser-973"><span class="linenos"> 973</span></a> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LanguageProperty</span><span class="p">),</span>
</span><span id="Parser-974"><a href="#Parser-974"><span class="linenos"> 974</span></a> <span class="s2">&quot;LAYOUT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_property</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;LAYOUT&quot;</span><span class="p">),</span>
</span><span id="Parser-975"><a href="#Parser-975"><span class="linenos"> 975</span></a> <span class="s2">&quot;LIFETIME&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_range</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;LIFETIME&quot;</span><span class="p">),</span>
</span><span id="Parser-976"><a href="#Parser-976"><span class="linenos"> 976</span></a> <span class="s2">&quot;LIKE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_create_like</span><span class="p">(),</span>
</span><span id="Parser-977"><a href="#Parser-977"><span class="linenos"> 977</span></a> <span class="s2">&quot;LOCATION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LocationProperty</span><span class="p">),</span>
</span><span id="Parser-978"><a href="#Parser-978"><span class="linenos"> 978</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locking</span><span class="p">(),</span>
</span><span id="Parser-979"><a href="#Parser-979"><span class="linenos"> 979</span></a> <span class="s2">&quot;LOCKING&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locking</span><span class="p">(),</span>
</span><span id="Parser-980"><a href="#Parser-980"><span class="linenos"> 980</span></a> <span class="s2">&quot;LOG&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_log</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="Parser-981"><a href="#Parser-981"><span class="linenos"> 981</span></a> <span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MaterializedProperty</span><span class="p">),</span>
</span><span id="Parser-982"><a href="#Parser-982"><span class="linenos"> 982</span></a> <span class="s2">&quot;MERGEBLOCKRATIO&quot;</span><span class="p">:</span> <span class="k">lambda</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="bp">self</span><span class="o">.</span><span class="n">_parse_mergeblockratio</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">),</span>
</span><span id="Parser-983"><a href="#Parser-983"><span class="linenos"> 983</span></a> <span class="s2">&quot;MODIFIES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_modifies_property</span><span class="p">(),</span>
</span><span id="Parser-984"><a href="#Parser-984"><span class="linenos"> 984</span></a> <span class="s2">&quot;MULTISET&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">,</span> <span class="n">multi</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-985"><a href="#Parser-985"><span class="linenos"> 985</span></a> <span class="s2">&quot;NO&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_no_property</span><span class="p">(),</span>
</span><span id="Parser-986"><a href="#Parser-986"><span class="linenos"> 986</span></a> <span class="s2">&quot;ON&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_property</span><span class="p">(),</span>
</span><span id="Parser-987"><a href="#Parser-987"><span class="linenos"> 987</span></a> <span class="s2">&quot;ORDER BY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">skip_order_token</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-988"><a href="#Parser-988"><span class="linenos"> 988</span></a> <span class="s2">&quot;OUTPUT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OutputModelProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()),</span>
</span><span id="Parser-989"><a href="#Parser-989"><span class="linenos"> 989</span></a> <span class="s2">&quot;PARTITION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partitioned_of</span><span class="p">(),</span>
</span><span id="Parser-990"><a href="#Parser-990"><span class="linenos"> 990</span></a> <span class="s2">&quot;PARTITION BY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partitioned_by</span><span class="p">(),</span>
</span><span id="Parser-991"><a href="#Parser-991"><span class="linenos"> 991</span></a> <span class="s2">&quot;PARTITIONED BY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partitioned_by</span><span class="p">(),</span>
</span><span id="Parser-992"><a href="#Parser-992"><span class="linenos"> 992</span></a> <span class="s2">&quot;PARTITIONED_BY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partitioned_by</span><span class="p">(),</span>
</span><span id="Parser-993"><a href="#Parser-993"><span class="linenos"> 993</span></a> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(</span><span class="n">in_props</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-994"><a href="#Parser-994"><span class="linenos"> 994</span></a> <span class="s2">&quot;RANGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_range</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;RANGE&quot;</span><span class="p">),</span>
</span><span id="Parser-995"><a href="#Parser-995"><span class="linenos"> 995</span></a> <span class="s2">&quot;READS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_reads_property</span><span class="p">(),</span>
</span><span id="Parser-996"><a href="#Parser-996"><span class="linenos"> 996</span></a> <span class="s2">&quot;REMOTE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_remote_with_connection</span><span class="p">(),</span>
</span><span id="Parser-997"><a href="#Parser-997"><span class="linenos"> 997</span></a> <span class="s2">&quot;RETURNS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returns</span><span class="p">(),</span>
</span><span id="Parser-998"><a href="#Parser-998"><span class="linenos"> 998</span></a> <span class="s2">&quot;STRICT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StrictProperty</span><span class="p">),</span>
</span><span id="Parser-999"><a href="#Parser-999"><span class="linenos"> 999</span></a> <span class="s2">&quot;STREAMING&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StreamingTableProperty</span><span class="p">),</span>
</span><span id="Parser-1000"><a href="#Parser-1000"><span class="linenos">1000</span></a> <span class="s2">&quot;ROW&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_row</span><span class="p">(),</span>
</span><span id="Parser-1001"><a href="#Parser-1001"><span class="linenos">1001</span></a> <span class="s2">&quot;ROW_FORMAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatProperty</span><span class="p">),</span>
</span><span id="Parser-1002"><a href="#Parser-1002"><span class="linenos">1002</span></a> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1003"><a href="#Parser-1003"><span class="linenos">1003</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SampleProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-1004"><a href="#Parser-1004"><span class="linenos">1004</span></a> <span class="p">),</span>
</span><span id="Parser-1005"><a href="#Parser-1005"><span class="linenos">1005</span></a> <span class="s2">&quot;SECURE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SecureProperty</span><span class="p">),</span>
</span><span id="Parser-1006"><a href="#Parser-1006"><span class="linenos">1006</span></a> <span class="s2">&quot;SECURITY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_security</span><span class="p">(),</span>
</span><span id="Parser-1007"><a href="#Parser-1007"><span class="linenos">1007</span></a> <span class="s2">&quot;SET&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetProperty</span><span class="p">,</span> <span class="n">multi</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="Parser-1008"><a href="#Parser-1008"><span class="linenos">1008</span></a> <span class="s2">&quot;SETTINGS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_settings_property</span><span class="p">(),</span>
</span><span id="Parser-1009"><a href="#Parser-1009"><span class="linenos">1009</span></a> <span class="s2">&quot;SHARING&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SharingProperty</span><span class="p">),</span>
</span><span id="Parser-1010"><a href="#Parser-1010"><span class="linenos">1010</span></a> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sortkey</span><span class="p">(),</span>
</span><span id="Parser-1011"><a href="#Parser-1011"><span class="linenos">1011</span></a> <span class="s2">&quot;SOURCE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dict_property</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;SOURCE&quot;</span><span class="p">),</span>
</span><span id="Parser-1012"><a href="#Parser-1012"><span class="linenos">1012</span></a> <span class="s2">&quot;STABLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1013"><a href="#Parser-1013"><span class="linenos">1013</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;STABLE&quot;</span><span class="p">)</span>
</span><span id="Parser-1014"><a href="#Parser-1014"><span class="linenos">1014</span></a> <span class="p">),</span>
</span><span id="Parser-1015"><a href="#Parser-1015"><span class="linenos">1015</span></a> <span class="s2">&quot;STORED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_stored</span><span class="p">(),</span>
</span><span id="Parser-1016"><a href="#Parser-1016"><span class="linenos">1016</span></a> <span class="s2">&quot;SYSTEM_VERSIONING&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_system_versioning_property</span><span class="p">(),</span>
</span><span id="Parser-1017"><a href="#Parser-1017"><span class="linenos">1017</span></a> <span class="s2">&quot;TBLPROPERTIES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_properties</span><span class="p">(),</span>
</span><span id="Parser-1018"><a href="#Parser-1018"><span class="linenos">1018</span></a> <span class="s2">&quot;TEMP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">),</span>
</span><span id="Parser-1019"><a href="#Parser-1019"><span class="linenos">1019</span></a> <span class="s2">&quot;TEMPORARY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TemporaryProperty</span><span class="p">),</span>
</span><span id="Parser-1020"><a href="#Parser-1020"><span class="linenos">1020</span></a> <span class="s2">&quot;TO&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_to_table</span><span class="p">(),</span>
</span><span id="Parser-1021"><a href="#Parser-1021"><span class="linenos">1021</span></a> <span class="s2">&quot;TRANSIENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TransientProperty</span><span class="p">),</span>
</span><span id="Parser-1022"><a href="#Parser-1022"><span class="linenos">1022</span></a> <span class="s2">&quot;TRANSFORM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1023"><a href="#Parser-1023"><span class="linenos">1023</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TransformModelProperty</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
</span><span id="Parser-1024"><a href="#Parser-1024"><span class="linenos">1024</span></a> <span class="p">),</span>
</span><span id="Parser-1025"><a href="#Parser-1025"><span class="linenos">1025</span></a> <span class="s2">&quot;TTL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ttl</span><span class="p">(),</span>
</span><span id="Parser-1026"><a href="#Parser-1026"><span class="linenos">1026</span></a> <span class="s2">&quot;USING&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_assignment</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">),</span>
</span><span id="Parser-1027"><a href="#Parser-1027"><span class="linenos">1027</span></a> <span class="s2">&quot;UNLOGGED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">UnloggedProperty</span><span class="p">),</span>
</span><span id="Parser-1028"><a href="#Parser-1028"><span class="linenos">1028</span></a> <span class="s2">&quot;VOLATILE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_volatile_property</span><span class="p">(),</span>
</span><span id="Parser-1029"><a href="#Parser-1029"><span class="linenos">1029</span></a> <span class="s2">&quot;WITH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_with_property</span><span class="p">(),</span>
</span><span id="Parser-1030"><a href="#Parser-1030"><span class="linenos">1030</span></a> <span class="p">}</span>
</span><span id="Parser-1031"><a href="#Parser-1031"><span class="linenos">1031</span></a>
</span><span id="Parser-1032"><a href="#Parser-1032"><span class="linenos">1032</span></a> <span class="n">CONSTRAINT_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1033"><a href="#Parser-1033"><span class="linenos">1033</span></a> <span class="s2">&quot;AUTOINCREMENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_auto_increment</span><span class="p">(),</span>
</span><span id="Parser-1034"><a href="#Parser-1034"><span class="linenos">1034</span></a> <span class="s2">&quot;AUTO_INCREMENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_auto_increment</span><span class="p">(),</span>
</span><span id="Parser-1035"><a href="#Parser-1035"><span class="linenos">1035</span></a> <span class="s2">&quot;CASESPECIFIC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="Parser-1036"><a href="#Parser-1036"><span class="linenos">1036</span></a> <span class="s2">&quot;CHARACTER SET&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1037"><a href="#Parser-1037"><span class="linenos">1037</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">()</span>
</span><span id="Parser-1038"><a href="#Parser-1038"><span class="linenos">1038</span></a> <span class="p">),</span>
</span><span id="Parser-1039"><a href="#Parser-1039"><span class="linenos">1039</span></a> <span class="s2">&quot;CHECK&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1040"><a href="#Parser-1040"><span class="linenos">1040</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CheckColumnConstraint</span><span class="p">,</span>
</span><span id="Parser-1041"><a href="#Parser-1041"><span class="linenos">1041</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">),</span>
</span><span id="Parser-1042"><a href="#Parser-1042"><span class="linenos">1042</span></a> <span class="n">enforced</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENFORCED&quot;</span><span class="p">),</span>
</span><span id="Parser-1043"><a href="#Parser-1043"><span class="linenos">1043</span></a> <span class="p">),</span>
</span><span id="Parser-1044"><a href="#Parser-1044"><span class="linenos">1044</span></a> <span class="s2">&quot;COLLATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1045"><a href="#Parser-1045"><span class="linenos">1045</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateColumnConstraint</span><span class="p">,</span>
</span><span id="Parser-1046"><a href="#Parser-1046"><span class="linenos">1046</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
</span><span id="Parser-1047"><a href="#Parser-1047"><span class="linenos">1047</span></a> <span class="p">),</span>
</span><span id="Parser-1048"><a href="#Parser-1048"><span class="linenos">1048</span></a> <span class="s2">&quot;COMMENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1049"><a href="#Parser-1049"><span class="linenos">1049</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CommentColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-1050"><a href="#Parser-1050"><span class="linenos">1050</span></a> <span class="p">),</span>
</span><span id="Parser-1051"><a href="#Parser-1051"><span class="linenos">1051</span></a> <span class="s2">&quot;COMPRESS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_compress</span><span class="p">(),</span>
</span><span id="Parser-1052"><a href="#Parser-1052"><span class="linenos">1052</span></a> <span class="s2">&quot;CLUSTERED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1053"><a href="#Parser-1053"><span class="linenos">1053</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">)</span>
</span><span id="Parser-1054"><a href="#Parser-1054"><span class="linenos">1054</span></a> <span class="p">),</span>
</span><span id="Parser-1055"><a href="#Parser-1055"><span class="linenos">1055</span></a> <span class="s2">&quot;NONCLUSTERED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1056"><a href="#Parser-1056"><span class="linenos">1056</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NonClusteredColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">)</span>
</span><span id="Parser-1057"><a href="#Parser-1057"><span class="linenos">1057</span></a> <span class="p">),</span>
</span><span id="Parser-1058"><a href="#Parser-1058"><span class="linenos">1058</span></a> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1059"><a href="#Parser-1059"><span class="linenos">1059</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DefaultColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-1060"><a href="#Parser-1060"><span class="linenos">1060</span></a> <span class="p">),</span>
</span><span id="Parser-1061"><a href="#Parser-1061"><span class="linenos">1061</span></a> <span class="s2">&quot;ENCODE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EncodeColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()),</span>
</span><span id="Parser-1062"><a href="#Parser-1062"><span class="linenos">1062</span></a> <span class="s2">&quot;EPHEMERAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1063"><a href="#Parser-1063"><span class="linenos">1063</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EphemeralColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-1064"><a href="#Parser-1064"><span class="linenos">1064</span></a> <span class="p">),</span>
</span><span id="Parser-1065"><a href="#Parser-1065"><span class="linenos">1065</span></a> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1066"><a href="#Parser-1066"><span class="linenos">1066</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExcludeColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_params</span><span class="p">()</span>
</span><span id="Parser-1067"><a href="#Parser-1067"><span class="linenos">1067</span></a> <span class="p">),</span>
</span><span id="Parser-1068"><a href="#Parser-1068"><span class="linenos">1068</span></a> <span class="s2">&quot;FOREIGN KEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_foreign_key</span><span class="p">(),</span>
</span><span id="Parser-1069"><a href="#Parser-1069"><span class="linenos">1069</span></a> <span class="s2">&quot;FORMAT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1070"><a href="#Parser-1070"><span class="linenos">1070</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFormatColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">()</span>
</span><span id="Parser-1071"><a href="#Parser-1071"><span class="linenos">1071</span></a> <span class="p">),</span>
</span><span id="Parser-1072"><a href="#Parser-1072"><span class="linenos">1072</span></a> <span class="s2">&quot;GENERATED&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_generated_as_identity</span><span class="p">(),</span>
</span><span id="Parser-1073"><a href="#Parser-1073"><span class="linenos">1073</span></a> <span class="s2">&quot;IDENTITY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_auto_increment</span><span class="p">(),</span>
</span><span id="Parser-1074"><a href="#Parser-1074"><span class="linenos">1074</span></a> <span class="s2">&quot;INLINE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_inline</span><span class="p">(),</span>
</span><span id="Parser-1075"><a href="#Parser-1075"><span class="linenos">1075</span></a> <span class="s2">&quot;LIKE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_create_like</span><span class="p">(),</span>
</span><span id="Parser-1076"><a href="#Parser-1076"><span class="linenos">1076</span></a> <span class="s2">&quot;NOT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_not_constraint</span><span class="p">(),</span>
</span><span id="Parser-1077"><a href="#Parser-1077"><span class="linenos">1077</span></a> <span class="s2">&quot;NULL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">,</span> <span class="n">allow_null</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-1078"><a href="#Parser-1078"><span class="linenos">1078</span></a> <span class="s2">&quot;ON&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
</span><span id="Parser-1079"><a href="#Parser-1079"><span class="linenos">1079</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">)</span>
</span><span id="Parser-1080"><a href="#Parser-1080"><span class="linenos">1080</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnUpdateColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
</span><span id="Parser-1081"><a href="#Parser-1081"><span class="linenos">1081</span></a> <span class="p">)</span>
</span><span id="Parser-1082"><a href="#Parser-1082"><span class="linenos">1082</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()),</span>
</span><span id="Parser-1083"><a href="#Parser-1083"><span class="linenos">1083</span></a> <span class="s2">&quot;PATH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PathColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()),</span>
</span><span id="Parser-1084"><a href="#Parser-1084"><span class="linenos">1084</span></a> <span class="s2">&quot;PERIOD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_period_for_system_time</span><span class="p">(),</span>
</span><span id="Parser-1085"><a href="#Parser-1085"><span class="linenos">1085</span></a> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">(),</span>
</span><span id="Parser-1086"><a href="#Parser-1086"><span class="linenos">1086</span></a> <span class="s2">&quot;REFERENCES&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_references</span><span class="p">(</span><span class="n">match</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="Parser-1087"><a href="#Parser-1087"><span class="linenos">1087</span></a> <span class="s2">&quot;TITLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1088"><a href="#Parser-1088"><span class="linenos">1088</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TitleColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">()</span>
</span><span id="Parser-1089"><a href="#Parser-1089"><span class="linenos">1089</span></a> <span class="p">),</span>
</span><span id="Parser-1090"><a href="#Parser-1090"><span class="linenos">1090</span></a> <span class="s2">&quot;TTL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()]),</span>
</span><span id="Parser-1091"><a href="#Parser-1091"><span class="linenos">1091</span></a> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unique</span><span class="p">(),</span>
</span><span id="Parser-1092"><a href="#Parser-1092"><span class="linenos">1092</span></a> <span class="s2">&quot;UPPERCASE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">UppercaseColumnConstraint</span><span class="p">),</span>
</span><span id="Parser-1093"><a href="#Parser-1093"><span class="linenos">1093</span></a> <span class="s2">&quot;WATERMARK&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1094"><a href="#Parser-1094"><span class="linenos">1094</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WatermarkColumnConstraint</span><span class="p">,</span>
</span><span id="Parser-1095"><a href="#Parser-1095"><span class="linenos">1095</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
</span><span id="Parser-1096"><a href="#Parser-1096"><span class="linenos">1096</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_disjunction</span><span class="p">(),</span>
</span><span id="Parser-1097"><a href="#Parser-1097"><span class="linenos">1097</span></a> <span class="p">),</span>
</span><span id="Parser-1098"><a href="#Parser-1098"><span class="linenos">1098</span></a> <span class="s2">&quot;WITH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1099"><a href="#Parser-1099"><span class="linenos">1099</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_properties</span><span class="p">()</span>
</span><span id="Parser-1100"><a href="#Parser-1100"><span class="linenos">1100</span></a> <span class="p">),</span>
</span><span id="Parser-1101"><a href="#Parser-1101"><span class="linenos">1101</span></a> <span class="p">}</span>
</span><span id="Parser-1102"><a href="#Parser-1102"><span class="linenos">1102</span></a>
</span><span id="Parser-1103"><a href="#Parser-1103"><span class="linenos">1103</span></a> <span class="n">ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1104"><a href="#Parser-1104"><span class="linenos">1104</span></a> <span class="s2">&quot;ADD&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_table_add</span><span class="p">(),</span>
</span><span id="Parser-1105"><a href="#Parser-1105"><span class="linenos">1105</span></a> <span class="s2">&quot;AS&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(),</span>
</span><span id="Parser-1106"><a href="#Parser-1106"><span class="linenos">1106</span></a> <span class="s2">&quot;ALTER&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_table_alter</span><span class="p">(),</span>
</span><span id="Parser-1107"><a href="#Parser-1107"><span class="linenos">1107</span></a> <span class="s2">&quot;CLUSTER BY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cluster</span><span class="p">(</span><span class="n">wrapped</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-1108"><a href="#Parser-1108"><span class="linenos">1108</span></a> <span class="s2">&quot;DELETE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">()),</span>
</span><span id="Parser-1109"><a href="#Parser-1109"><span class="linenos">1109</span></a> <span class="s2">&quot;DROP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_table_drop</span><span class="p">(),</span>
</span><span id="Parser-1110"><a href="#Parser-1110"><span class="linenos">1110</span></a> <span class="s2">&quot;RENAME&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_table_rename</span><span class="p">(),</span>
</span><span id="Parser-1111"><a href="#Parser-1111"><span class="linenos">1111</span></a> <span class="s2">&quot;SET&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_table_set</span><span class="p">(),</span>
</span><span id="Parser-1112"><a href="#Parser-1112"><span class="linenos">1112</span></a> <span class="s2">&quot;SWAP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1113"><a href="#Parser-1113"><span class="linenos">1113</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SwapTable</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-1114"><a href="#Parser-1114"><span class="linenos">1114</span></a> <span class="p">),</span>
</span><span id="Parser-1115"><a href="#Parser-1115"><span class="linenos">1115</span></a> <span class="p">}</span>
</span><span id="Parser-1116"><a href="#Parser-1116"><span class="linenos">1116</span></a>
</span><span id="Parser-1117"><a href="#Parser-1117"><span class="linenos">1117</span></a> <span class="n">ALTER_ALTER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1118"><a href="#Parser-1118"><span class="linenos">1118</span></a> <span class="s2">&quot;DISTKEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_diststyle</span><span class="p">(),</span>
</span><span id="Parser-1119"><a href="#Parser-1119"><span class="linenos">1119</span></a> <span class="s2">&quot;DISTSTYLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_diststyle</span><span class="p">(),</span>
</span><span id="Parser-1120"><a href="#Parser-1120"><span class="linenos">1120</span></a> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_sortkey</span><span class="p">(),</span>
</span><span id="Parser-1121"><a href="#Parser-1121"><span class="linenos">1121</span></a> <span class="s2">&quot;COMPOUND&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alter_sortkey</span><span class="p">(</span><span class="n">compound</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-1122"><a href="#Parser-1122"><span class="linenos">1122</span></a> <span class="p">}</span>
</span><span id="Parser-1123"><a href="#Parser-1123"><span class="linenos">1123</span></a>
</span><span id="Parser-1124"><a href="#Parser-1124"><span class="linenos">1124</span></a> <span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1125"><a href="#Parser-1125"><span class="linenos">1125</span></a> <span class="s2">&quot;CHECK&quot;</span><span class="p">,</span>
</span><span id="Parser-1126"><a href="#Parser-1126"><span class="linenos">1126</span></a> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">,</span>
</span><span id="Parser-1127"><a href="#Parser-1127"><span class="linenos">1127</span></a> <span class="s2">&quot;FOREIGN KEY&quot;</span><span class="p">,</span>
</span><span id="Parser-1128"><a href="#Parser-1128"><span class="linenos">1128</span></a> <span class="s2">&quot;LIKE&quot;</span><span class="p">,</span>
</span><span id="Parser-1129"><a href="#Parser-1129"><span class="linenos">1129</span></a> <span class="s2">&quot;PERIOD&quot;</span><span class="p">,</span>
</span><span id="Parser-1130"><a href="#Parser-1130"><span class="linenos">1130</span></a> <span class="s2">&quot;PRIMARY KEY&quot;</span><span class="p">,</span>
</span><span id="Parser-1131"><a href="#Parser-1131"><span class="linenos">1131</span></a> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">,</span>
</span><span id="Parser-1132"><a href="#Parser-1132"><span class="linenos">1132</span></a> <span class="s2">&quot;WATERMARK&quot;</span><span class="p">,</span>
</span><span id="Parser-1133"><a href="#Parser-1133"><span class="linenos">1133</span></a> <span class="p">}</span>
</span><span id="Parser-1134"><a href="#Parser-1134"><span class="linenos">1134</span></a>
</span><span id="Parser-1135"><a href="#Parser-1135"><span class="linenos">1135</span></a> <span class="n">NO_PAREN_FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1136"><a href="#Parser-1136"><span class="linenos">1136</span></a> <span class="s2">&quot;ANY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()),</span>
</span><span id="Parser-1137"><a href="#Parser-1137"><span class="linenos">1137</span></a> <span class="s2">&quot;CASE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_case</span><span class="p">(),</span>
</span><span id="Parser-1138"><a href="#Parser-1138"><span class="linenos">1138</span></a> <span class="s2">&quot;CONNECT_BY_ROOT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1139"><a href="#Parser-1139"><span class="linenos">1139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ConnectByRoot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-1140"><a href="#Parser-1140"><span class="linenos">1140</span></a> <span class="p">),</span>
</span><span id="Parser-1141"><a href="#Parser-1141"><span class="linenos">1141</span></a> <span class="s2">&quot;IF&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_if</span><span class="p">(),</span>
</span><span id="Parser-1142"><a href="#Parser-1142"><span class="linenos">1142</span></a> <span class="p">}</span>
</span><span id="Parser-1143"><a href="#Parser-1143"><span class="linenos">1143</span></a>
</span><span id="Parser-1144"><a href="#Parser-1144"><span class="linenos">1144</span></a> <span class="n">INVALID_FUNC_NAME_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1145"><a href="#Parser-1145"><span class="linenos">1145</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span>
</span><span id="Parser-1146"><a href="#Parser-1146"><span class="linenos">1146</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span>
</span><span id="Parser-1147"><a href="#Parser-1147"><span class="linenos">1147</span></a> <span class="p">}</span>
</span><span id="Parser-1148"><a href="#Parser-1148"><span class="linenos">1148</span></a>
</span><span id="Parser-1149"><a href="#Parser-1149"><span class="linenos">1149</span></a> <span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;STRUCT&quot;</span><span class="p">}</span>
</span><span id="Parser-1150"><a href="#Parser-1150"><span class="linenos">1150</span></a>
</span><span id="Parser-1151"><a href="#Parser-1151"><span class="linenos">1151</span></a> <span class="n">KEY_VALUE_DEFINITIONS</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">)</span>
</span><span id="Parser-1152"><a href="#Parser-1152"><span class="linenos">1152</span></a>
</span><span id="Parser-1153"><a href="#Parser-1153"><span class="linenos">1153</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1154"><a href="#Parser-1154"><span class="linenos">1154</span></a> <span class="s2">&quot;CAST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cast</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span><span class="p">),</span>
</span><span id="Parser-1155"><a href="#Parser-1155"><span class="linenos">1155</span></a> <span class="s2">&quot;CEIL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ceil_floor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Ceil</span><span class="p">),</span>
</span><span id="Parser-1156"><a href="#Parser-1156"><span class="linenos">1156</span></a> <span class="s2">&quot;CONVERT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_convert</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRICT_CAST</span><span class="p">),</span>
</span><span id="Parser-1157"><a href="#Parser-1157"><span class="linenos">1157</span></a> <span class="s2">&quot;DECODE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_decode</span><span class="p">(),</span>
</span><span id="Parser-1158"><a href="#Parser-1158"><span class="linenos">1158</span></a> <span class="s2">&quot;EXTRACT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_extract</span><span class="p">(),</span>
</span><span id="Parser-1159"><a href="#Parser-1159"><span class="linenos">1159</span></a> <span class="s2">&quot;FLOOR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ceil_floor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Floor</span><span class="p">),</span>
</span><span id="Parser-1160"><a href="#Parser-1160"><span class="linenos">1160</span></a> <span class="s2">&quot;GAP_FILL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_gap_fill</span><span class="p">(),</span>
</span><span id="Parser-1161"><a href="#Parser-1161"><span class="linenos">1161</span></a> <span class="s2">&quot;JSON_OBJECT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_object</span><span class="p">(),</span>
</span><span id="Parser-1162"><a href="#Parser-1162"><span class="linenos">1162</span></a> <span class="s2">&quot;JSON_OBJECTAGG&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_object</span><span class="p">(</span><span class="n">agg</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-1163"><a href="#Parser-1163"><span class="linenos">1163</span></a> <span class="s2">&quot;JSON_TABLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_table</span><span class="p">(),</span>
</span><span id="Parser-1164"><a href="#Parser-1164"><span class="linenos">1164</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_match_against</span><span class="p">(),</span>
</span><span id="Parser-1165"><a href="#Parser-1165"><span class="linenos">1165</span></a> <span class="s2">&quot;NORMALIZE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_normalize</span><span class="p">(),</span>
</span><span id="Parser-1166"><a href="#Parser-1166"><span class="linenos">1166</span></a> <span class="s2">&quot;OPENJSON&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_open_json</span><span class="p">(),</span>
</span><span id="Parser-1167"><a href="#Parser-1167"><span class="linenos">1167</span></a> <span class="s2">&quot;OVERLAY&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_overlay</span><span class="p">(),</span>
</span><span id="Parser-1168"><a href="#Parser-1168"><span class="linenos">1168</span></a> <span class="s2">&quot;POSITION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_position</span><span class="p">(),</span>
</span><span id="Parser-1169"><a href="#Parser-1169"><span class="linenos">1169</span></a> <span class="s2">&quot;PREDICT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_predict</span><span class="p">(),</span>
</span><span id="Parser-1170"><a href="#Parser-1170"><span class="linenos">1170</span></a> <span class="s2">&quot;SAFE_CAST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cast</span><span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-1171"><a href="#Parser-1171"><span class="linenos">1171</span></a> <span class="s2">&quot;STRING_AGG&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_agg</span><span class="p">(),</span>
</span><span id="Parser-1172"><a href="#Parser-1172"><span class="linenos">1172</span></a> <span class="s2">&quot;SUBSTRING&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_substring</span><span class="p">(),</span>
</span><span id="Parser-1173"><a href="#Parser-1173"><span class="linenos">1173</span></a> <span class="s2">&quot;TRIM&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_trim</span><span class="p">(),</span>
</span><span id="Parser-1174"><a href="#Parser-1174"><span class="linenos">1174</span></a> <span class="s2">&quot;TRY_CAST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cast</span><span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-1175"><a href="#Parser-1175"><span class="linenos">1175</span></a> <span class="s2">&quot;TRY_CONVERT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_convert</span><span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-1176"><a href="#Parser-1176"><span class="linenos">1176</span></a> <span class="s2">&quot;XMLELEMENT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1177"><a href="#Parser-1177"><span class="linenos">1177</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">XMLElement</span><span class="p">,</span>
</span><span id="Parser-1178"><a href="#Parser-1178"><span class="linenos">1178</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NAME&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span>
</span><span id="Parser-1179"><a href="#Parser-1179"><span class="linenos">1179</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">),</span>
</span><span id="Parser-1180"><a href="#Parser-1180"><span class="linenos">1180</span></a> <span class="p">),</span>
</span><span id="Parser-1181"><a href="#Parser-1181"><span class="linenos">1181</span></a> <span class="s2">&quot;XMLTABLE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_xml_table</span><span class="p">(),</span>
</span><span id="Parser-1182"><a href="#Parser-1182"><span class="linenos">1182</span></a> <span class="p">}</span>
</span><span id="Parser-1183"><a href="#Parser-1183"><span class="linenos">1183</span></a>
</span><span id="Parser-1184"><a href="#Parser-1184"><span class="linenos">1184</span></a> <span class="n">QUERY_MODIFIER_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1185"><a href="#Parser-1185"><span class="linenos">1185</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;match&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_match_recognize</span><span class="p">()),</span>
</span><span id="Parser-1186"><a href="#Parser-1186"><span class="linenos">1186</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PREWHERE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;prewhere&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_prewhere</span><span class="p">()),</span>
</span><span id="Parser-1187"><a href="#Parser-1187"><span class="linenos">1187</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;where&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">()),</span>
</span><span id="Parser-1188"><a href="#Parser-1188"><span class="linenos">1188</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;group&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()),</span>
</span><span id="Parser-1189"><a href="#Parser-1189"><span class="linenos">1189</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;having&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_having</span><span class="p">()),</span>
</span><span id="Parser-1190"><a href="#Parser-1190"><span class="linenos">1190</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;qualify&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_qualify</span><span class="p">()),</span>
</span><span id="Parser-1191"><a href="#Parser-1191"><span class="linenos">1191</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;windows&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_clause</span><span class="p">()),</span>
</span><span id="Parser-1192"><a href="#Parser-1192"><span class="linenos">1192</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;order&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()),</span>
</span><span id="Parser-1193"><a href="#Parser-1193"><span class="linenos">1193</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;limit&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">()),</span>
</span><span id="Parser-1194"><a href="#Parser-1194"><span class="linenos">1194</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;limit&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">()),</span>
</span><span id="Parser-1195"><a href="#Parser-1195"><span class="linenos">1195</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_offset</span><span class="p">()),</span>
</span><span id="Parser-1196"><a href="#Parser-1196"><span class="linenos">1196</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locks</span><span class="p">()),</span>
</span><span id="Parser-1197"><a href="#Parser-1197"><span class="linenos">1197</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">LOCK</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_locks</span><span class="p">()),</span>
</span><span id="Parser-1198"><a href="#Parser-1198"><span class="linenos">1198</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sample&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">(</span><span class="n">as_modifier</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
</span><span id="Parser-1199"><a href="#Parser-1199"><span class="linenos">1199</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sample&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">(</span><span class="n">as_modifier</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
</span><span id="Parser-1200"><a href="#Parser-1200"><span class="linenos">1200</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
</span><span id="Parser-1201"><a href="#Parser-1201"><span class="linenos">1201</span></a> <span class="s2">&quot;cluster&quot;</span><span class="p">,</span>
</span><span id="Parser-1202"><a href="#Parser-1202"><span class="linenos">1202</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CLUSTER_BY</span><span class="p">),</span>
</span><span id="Parser-1203"><a href="#Parser-1203"><span class="linenos">1203</span></a> <span class="p">),</span>
</span><span id="Parser-1204"><a href="#Parser-1204"><span class="linenos">1204</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span>
</span><span id="Parser-1205"><a href="#Parser-1205"><span class="linenos">1205</span></a> <span class="s2">&quot;distribute&quot;</span><span class="p">,</span>
</span><span id="Parser-1206"><a href="#Parser-1206"><span class="linenos">1206</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distribute</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DISTRIBUTE_BY</span><span class="p">),</span>
</span><span id="Parser-1207"><a href="#Parser-1207"><span class="linenos">1207</span></a> <span class="p">),</span>
</span><span id="Parser-1208"><a href="#Parser-1208"><span class="linenos">1208</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;sort&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sort</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Sort</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SORT_BY</span><span class="p">)),</span>
</span><span id="Parser-1209"><a href="#Parser-1209"><span class="linenos">1209</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;connect&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_connect</span><span class="p">(</span><span class="n">skip_start_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)),</span>
</span><span id="Parser-1210"><a href="#Parser-1210"><span class="linenos">1210</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;connect&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_connect</span><span class="p">()),</span>
</span><span id="Parser-1211"><a href="#Parser-1211"><span class="linenos">1211</span></a> <span class="p">}</span>
</span><span id="Parser-1212"><a href="#Parser-1212"><span class="linenos">1212</span></a>
</span><span id="Parser-1213"><a href="#Parser-1213"><span class="linenos">1213</span></a> <span class="n">SET_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1214"><a href="#Parser-1214"><span class="linenos">1214</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;GLOBAL&quot;</span><span class="p">),</span>
</span><span id="Parser-1215"><a href="#Parser-1215"><span class="linenos">1215</span></a> <span class="s2">&quot;LOCAL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">),</span>
</span><span id="Parser-1216"><a href="#Parser-1216"><span class="linenos">1216</span></a> <span class="s2">&quot;SESSION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="s2">&quot;SESSION&quot;</span><span class="p">),</span>
</span><span id="Parser-1217"><a href="#Parser-1217"><span class="linenos">1217</span></a> <span class="s2">&quot;TRANSACTION&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_transaction</span><span class="p">(),</span>
</span><span id="Parser-1218"><a href="#Parser-1218"><span class="linenos">1218</span></a> <span class="p">}</span>
</span><span id="Parser-1219"><a href="#Parser-1219"><span class="linenos">1219</span></a>
</span><span id="Parser-1220"><a href="#Parser-1220"><span class="linenos">1220</span></a> <span class="n">SHOW_PARSERS</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">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Parser-1221"><a href="#Parser-1221"><span class="linenos">1221</span></a>
</span><span id="Parser-1222"><a href="#Parser-1222"><span class="linenos">1222</span></a> <span class="n">TYPE_LITERAL_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1223"><a href="#Parser-1223"><span class="linenos">1223</span></a> <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">JSON</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">_</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ParseJSON</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="Parser-1224"><a href="#Parser-1224"><span class="linenos">1224</span></a> <span class="p">}</span>
</span><span id="Parser-1225"><a href="#Parser-1225"><span class="linenos">1225</span></a>
</span><span id="Parser-1226"><a href="#Parser-1226"><span class="linenos">1226</span></a> <span class="n">TYPE_CONVERTERS</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="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Parser-1227"><a href="#Parser-1227"><span class="linenos">1227</span></a>
</span><span id="Parser-1228"><a href="#Parser-1228"><span class="linenos">1228</span></a> <span class="n">DDL_SELECT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">}</span>
</span><span id="Parser-1229"><a href="#Parser-1229"><span class="linenos">1229</span></a>
</span><span id="Parser-1230"><a href="#Parser-1230"><span class="linenos">1230</span></a> <span class="n">PRE_VOLATILE_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CREATE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">}</span>
</span><span id="Parser-1231"><a href="#Parser-1231"><span class="linenos">1231</span></a>
</span><span id="Parser-1232"><a href="#Parser-1232"><span class="linenos">1232</span></a> <span class="n">TRANSACTION_KIND</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;DEFERRED&quot;</span><span class="p">,</span> <span class="s2">&quot;IMMEDIATE&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUSIVE&quot;</span><span class="p">}</span>
</span><span id="Parser-1233"><a href="#Parser-1233"><span class="linenos">1233</span></a> <span class="n">TRANSACTION_CHARACTERISTICS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1234"><a href="#Parser-1234"><span class="linenos">1234</span></a> <span class="s2">&quot;ISOLATION&quot;</span><span class="p">:</span> <span class="p">(</span>
</span><span id="Parser-1235"><a href="#Parser-1235"><span class="linenos">1235</span></a> <span class="p">(</span><span class="s2">&quot;LEVEL&quot;</span><span class="p">,</span> <span class="s2">&quot;REPEATABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;READ&quot;</span><span class="p">),</span>
</span><span id="Parser-1236"><a href="#Parser-1236"><span class="linenos">1236</span></a> <span class="p">(</span><span class="s2">&quot;LEVEL&quot;</span><span class="p">,</span> <span class="s2">&quot;READ&quot;</span><span class="p">,</span> <span class="s2">&quot;COMMITTED&quot;</span><span class="p">),</span>
</span><span id="Parser-1237"><a href="#Parser-1237"><span class="linenos">1237</span></a> <span class="p">(</span><span class="s2">&quot;LEVEL&quot;</span><span class="p">,</span> <span class="s2">&quot;READ&quot;</span><span class="p">,</span> <span class="s2">&quot;UNCOMITTED&quot;</span><span class="p">),</span>
</span><span id="Parser-1238"><a href="#Parser-1238"><span class="linenos">1238</span></a> <span class="p">(</span><span class="s2">&quot;LEVEL&quot;</span><span class="p">,</span> <span class="s2">&quot;SERIALIZABLE&quot;</span><span class="p">),</span>
</span><span id="Parser-1239"><a href="#Parser-1239"><span class="linenos">1239</span></a> <span class="p">),</span>
</span><span id="Parser-1240"><a href="#Parser-1240"><span class="linenos">1240</span></a> <span class="s2">&quot;READ&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;WRITE&quot;</span><span class="p">,</span> <span class="s2">&quot;ONLY&quot;</span><span class="p">),</span>
</span><span id="Parser-1241"><a href="#Parser-1241"><span class="linenos">1241</span></a> <span class="p">}</span>
</span><span id="Parser-1242"><a href="#Parser-1242"><span class="linenos">1242</span></a>
</span><span id="Parser-1243"><a href="#Parser-1243"><span class="linenos">1243</span></a> <span class="n">CONFLICT_ACTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">(</span>
</span><span id="Parser-1244"><a href="#Parser-1244"><span class="linenos">1244</span></a> <span class="p">(</span><span class="s2">&quot;ABORT&quot;</span><span class="p">,</span> <span class="s2">&quot;FAIL&quot;</span><span class="p">,</span> <span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLACE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROLLBACK&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">),</span> <span class="nb">tuple</span><span class="p">()</span>
</span><span id="Parser-1245"><a href="#Parser-1245"><span class="linenos">1245</span></a> <span class="p">)</span>
</span><span id="Parser-1246"><a href="#Parser-1246"><span class="linenos">1246</span></a> <span class="n">CONFLICT_ACTIONS</span><span class="p">[</span><span class="s2">&quot;DO&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;NOTHING&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">)</span>
</span><span id="Parser-1247"><a href="#Parser-1247"><span class="linenos">1247</span></a>
</span><span id="Parser-1248"><a href="#Parser-1248"><span class="linenos">1248</span></a> <span class="n">CREATE_SEQUENCE</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1249"><a href="#Parser-1249"><span class="linenos">1249</span></a> <span class="s2">&quot;SCALE&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;EXTEND&quot;</span><span class="p">,</span> <span class="s2">&quot;NOEXTEND&quot;</span><span class="p">),</span>
</span><span id="Parser-1250"><a href="#Parser-1250"><span class="linenos">1250</span></a> <span class="s2">&quot;SHARD&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;EXTEND&quot;</span><span class="p">,</span> <span class="s2">&quot;NOEXTEND&quot;</span><span class="p">),</span>
</span><span id="Parser-1251"><a href="#Parser-1251"><span class="linenos">1251</span></a> <span class="s2">&quot;NO&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;CYCLE&quot;</span><span class="p">,</span> <span class="s2">&quot;CACHE&quot;</span><span class="p">,</span> <span class="s2">&quot;MAXVALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;MINVALUE&quot;</span><span class="p">),</span>
</span><span id="Parser-1252"><a href="#Parser-1252"><span class="linenos">1252</span></a> <span class="o">**</span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">(</span>
</span><span id="Parser-1253"><a href="#Parser-1253"><span class="linenos">1253</span></a> <span class="p">(</span>
</span><span id="Parser-1254"><a href="#Parser-1254"><span class="linenos">1254</span></a> <span class="s2">&quot;SESSION&quot;</span><span class="p">,</span>
</span><span id="Parser-1255"><a href="#Parser-1255"><span class="linenos">1255</span></a> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">,</span>
</span><span id="Parser-1256"><a href="#Parser-1256"><span class="linenos">1256</span></a> <span class="s2">&quot;KEEP&quot;</span><span class="p">,</span>
</span><span id="Parser-1257"><a href="#Parser-1257"><span class="linenos">1257</span></a> <span class="s2">&quot;NOKEEP&quot;</span><span class="p">,</span>
</span><span id="Parser-1258"><a href="#Parser-1258"><span class="linenos">1258</span></a> <span class="s2">&quot;ORDER&quot;</span><span class="p">,</span>
</span><span id="Parser-1259"><a href="#Parser-1259"><span class="linenos">1259</span></a> <span class="s2">&quot;NOORDER&quot;</span><span class="p">,</span>
</span><span id="Parser-1260"><a href="#Parser-1260"><span class="linenos">1260</span></a> <span class="s2">&quot;NOCACHE&quot;</span><span class="p">,</span>
</span><span id="Parser-1261"><a href="#Parser-1261"><span class="linenos">1261</span></a> <span class="s2">&quot;CYCLE&quot;</span><span class="p">,</span>
</span><span id="Parser-1262"><a href="#Parser-1262"><span class="linenos">1262</span></a> <span class="s2">&quot;NOCYCLE&quot;</span><span class="p">,</span>
</span><span id="Parser-1263"><a href="#Parser-1263"><span class="linenos">1263</span></a> <span class="s2">&quot;NOMINVALUE&quot;</span><span class="p">,</span>
</span><span id="Parser-1264"><a href="#Parser-1264"><span class="linenos">1264</span></a> <span class="s2">&quot;NOMAXVALUE&quot;</span><span class="p">,</span>
</span><span id="Parser-1265"><a href="#Parser-1265"><span class="linenos">1265</span></a> <span class="s2">&quot;NOSCALE&quot;</span><span class="p">,</span>
</span><span id="Parser-1266"><a href="#Parser-1266"><span class="linenos">1266</span></a> <span class="s2">&quot;NOSHARD&quot;</span><span class="p">,</span>
</span><span id="Parser-1267"><a href="#Parser-1267"><span class="linenos">1267</span></a> <span class="p">),</span>
</span><span id="Parser-1268"><a href="#Parser-1268"><span class="linenos">1268</span></a> <span class="nb">tuple</span><span class="p">(),</span>
</span><span id="Parser-1269"><a href="#Parser-1269"><span class="linenos">1269</span></a> <span class="p">),</span>
</span><span id="Parser-1270"><a href="#Parser-1270"><span class="linenos">1270</span></a> <span class="p">}</span>
</span><span id="Parser-1271"><a href="#Parser-1271"><span class="linenos">1271</span></a>
</span><span id="Parser-1272"><a href="#Parser-1272"><span class="linenos">1272</span></a> <span class="n">ISOLATED_LOADING_OPTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;FOR&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;INSERT&quot;</span><span class="p">,</span> <span class="s2">&quot;NONE&quot;</span><span class="p">)}</span>
</span><span id="Parser-1273"><a href="#Parser-1273"><span class="linenos">1273</span></a>
</span><span id="Parser-1274"><a href="#Parser-1274"><span class="linenos">1274</span></a> <span class="n">USABLES</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">(</span>
</span><span id="Parser-1275"><a href="#Parser-1275"><span class="linenos">1275</span></a> <span class="p">(</span><span class="s2">&quot;ROLE&quot;</span><span class="p">,</span> <span class="s2">&quot;WAREHOUSE&quot;</span><span class="p">,</span> <span class="s2">&quot;DATABASE&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">,</span> <span class="s2">&quot;CATALOG&quot;</span><span class="p">),</span> <span class="nb">tuple</span><span class="p">()</span>
</span><span id="Parser-1276"><a href="#Parser-1276"><span class="linenos">1276</span></a> <span class="p">)</span>
</span><span id="Parser-1277"><a href="#Parser-1277"><span class="linenos">1277</span></a>
</span><span id="Parser-1278"><a href="#Parser-1278"><span class="linenos">1278</span></a> <span class="n">CAST_ACTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">((</span><span class="s2">&quot;RENAME&quot;</span><span class="p">,</span> <span class="s2">&quot;ADD&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;FIELDS&quot;</span><span class="p">,))</span>
</span><span id="Parser-1279"><a href="#Parser-1279"><span class="linenos">1279</span></a>
</span><span id="Parser-1280"><a href="#Parser-1280"><span class="linenos">1280</span></a> <span class="n">SCHEMA_BINDING_OPTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1281"><a href="#Parser-1281"><span class="linenos">1281</span></a> <span class="s2">&quot;TYPE&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;EVOLUTION&quot;</span><span class="p">,),</span>
</span><span id="Parser-1282"><a href="#Parser-1282"><span class="linenos">1282</span></a> <span class="o">**</span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">((</span><span class="s2">&quot;BINDING&quot;</span><span class="p">,</span> <span class="s2">&quot;COMPENSATION&quot;</span><span class="p">,</span> <span class="s2">&quot;EVOLUTION&quot;</span><span class="p">),</span> <span class="nb">tuple</span><span class="p">()),</span>
</span><span id="Parser-1283"><a href="#Parser-1283"><span class="linenos">1283</span></a> <span class="p">}</span>
</span><span id="Parser-1284"><a href="#Parser-1284"><span class="linenos">1284</span></a>
</span><span id="Parser-1285"><a href="#Parser-1285"><span class="linenos">1285</span></a> <span class="n">PROCEDURE_OPTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Parser-1286"><a href="#Parser-1286"><span class="linenos">1286</span></a>
</span><span id="Parser-1287"><a href="#Parser-1287"><span class="linenos">1287</span></a> <span class="n">EXECUTE_AS_OPTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">((</span><span class="s2">&quot;CALLER&quot;</span><span class="p">,</span> <span class="s2">&quot;SELF&quot;</span><span class="p">,</span> <span class="s2">&quot;OWNER&quot;</span><span class="p">),</span> <span class="nb">tuple</span><span class="p">())</span>
</span><span id="Parser-1288"><a href="#Parser-1288"><span class="linenos">1288</span></a>
</span><span id="Parser-1289"><a href="#Parser-1289"><span class="linenos">1289</span></a> <span class="n">KEY_CONSTRAINT_OPTIONS</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1290"><a href="#Parser-1290"><span class="linenos">1290</span></a> <span class="s2">&quot;NOT&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;ENFORCED&quot;</span><span class="p">,),</span>
</span><span id="Parser-1291"><a href="#Parser-1291"><span class="linenos">1291</span></a> <span class="s2">&quot;MATCH&quot;</span><span class="p">:</span> <span class="p">(</span>
</span><span id="Parser-1292"><a href="#Parser-1292"><span class="linenos">1292</span></a> <span class="s2">&quot;FULL&quot;</span><span class="p">,</span>
</span><span id="Parser-1293"><a href="#Parser-1293"><span class="linenos">1293</span></a> <span class="s2">&quot;PARTIAL&quot;</span><span class="p">,</span>
</span><span id="Parser-1294"><a href="#Parser-1294"><span class="linenos">1294</span></a> <span class="s2">&quot;SIMPLE&quot;</span><span class="p">,</span>
</span><span id="Parser-1295"><a href="#Parser-1295"><span class="linenos">1295</span></a> <span class="p">),</span>
</span><span id="Parser-1296"><a href="#Parser-1296"><span class="linenos">1296</span></a> <span class="s2">&quot;INITIALLY&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;DEFERRED&quot;</span><span class="p">,</span> <span class="s2">&quot;IMMEDIATE&quot;</span><span class="p">),</span>
</span><span id="Parser-1297"><a href="#Parser-1297"><span class="linenos">1297</span></a> <span class="s2">&quot;USING&quot;</span><span class="p">:</span> <span class="p">(</span>
</span><span id="Parser-1298"><a href="#Parser-1298"><span class="linenos">1298</span></a> <span class="s2">&quot;BTREE&quot;</span><span class="p">,</span>
</span><span id="Parser-1299"><a href="#Parser-1299"><span class="linenos">1299</span></a> <span class="s2">&quot;HASH&quot;</span><span class="p">,</span>
</span><span id="Parser-1300"><a href="#Parser-1300"><span class="linenos">1300</span></a> <span class="p">),</span>
</span><span id="Parser-1301"><a href="#Parser-1301"><span class="linenos">1301</span></a> <span class="o">**</span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">((</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;NORELY&quot;</span><span class="p">),</span> <span class="nb">tuple</span><span class="p">()),</span>
</span><span id="Parser-1302"><a href="#Parser-1302"><span class="linenos">1302</span></a> <span class="p">}</span>
</span><span id="Parser-1303"><a href="#Parser-1303"><span class="linenos">1303</span></a>
</span><span id="Parser-1304"><a href="#Parser-1304"><span class="linenos">1304</span></a> <span class="n">INSERT_ALTERNATIVES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ABORT&quot;</span><span class="p">,</span> <span class="s2">&quot;FAIL&quot;</span><span class="p">,</span> <span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLACE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROLLBACK&quot;</span><span class="p">}</span>
</span><span id="Parser-1305"><a href="#Parser-1305"><span class="linenos">1305</span></a>
</span><span id="Parser-1306"><a href="#Parser-1306"><span class="linenos">1306</span></a> <span class="n">CLONE_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;CLONE&quot;</span><span class="p">,</span> <span class="s2">&quot;COPY&quot;</span><span class="p">}</span>
</span><span id="Parser-1307"><a href="#Parser-1307"><span class="linenos">1307</span></a> <span class="n">HISTORICAL_DATA_PREFIX</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;BEFORE&quot;</span><span class="p">,</span> <span class="s2">&quot;END&quot;</span><span class="p">}</span>
</span><span id="Parser-1308"><a href="#Parser-1308"><span class="linenos">1308</span></a> <span class="n">HISTORICAL_DATA_KIND</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">,</span> <span class="s2">&quot;OFFSET&quot;</span><span class="p">,</span> <span class="s2">&quot;STATEMENT&quot;</span><span class="p">,</span> <span class="s2">&quot;STREAM&quot;</span><span class="p">}</span>
</span><span id="Parser-1309"><a href="#Parser-1309"><span class="linenos">1309</span></a>
</span><span id="Parser-1310"><a href="#Parser-1310"><span class="linenos">1310</span></a> <span class="n">OPCLASS_FOLLOW_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ASC&quot;</span><span class="p">,</span> <span class="s2">&quot;DESC&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;WITH&quot;</span><span class="p">}</span>
</span><span id="Parser-1311"><a href="#Parser-1311"><span class="linenos">1311</span></a>
</span><span id="Parser-1312"><a href="#Parser-1312"><span class="linenos">1312</span></a> <span class="n">OPTYPE_FOLLOW_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">}</span>
</span><span id="Parser-1313"><a href="#Parser-1313"><span class="linenos">1313</span></a>
</span><span id="Parser-1314"><a href="#Parser-1314"><span class="linenos">1314</span></a> <span class="n">TABLE_INDEX_HINT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORCE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">USE</span><span class="p">}</span>
</span><span id="Parser-1315"><a href="#Parser-1315"><span class="linenos">1315</span></a>
</span><span id="Parser-1316"><a href="#Parser-1316"><span class="linenos">1316</span></a> <span class="n">VIEW_ATTRIBUTES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ENCRYPTION&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMABINDING&quot;</span><span class="p">,</span> <span class="s2">&quot;VIEW_METADATA&quot;</span><span class="p">}</span>
</span><span id="Parser-1317"><a href="#Parser-1317"><span class="linenos">1317</span></a>
</span><span id="Parser-1318"><a href="#Parser-1318"><span class="linenos">1318</span></a> <span class="n">WINDOW_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">}</span>
</span><span id="Parser-1319"><a href="#Parser-1319"><span class="linenos">1319</span></a> <span class="n">WINDOW_BEFORE_PAREN_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OVER</span><span class="p">}</span>
</span><span id="Parser-1320"><a href="#Parser-1320"><span class="linenos">1320</span></a> <span class="n">WINDOW_SIDES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;FOLLOWING&quot;</span><span class="p">,</span> <span class="s2">&quot;PRECEDING&quot;</span><span class="p">}</span>
</span><span id="Parser-1321"><a href="#Parser-1321"><span class="linenos">1321</span></a>
</span><span id="Parser-1322"><a href="#Parser-1322"><span class="linenos">1322</span></a> <span class="n">JSON_KEY_VALUE_SEPARATOR_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">}</span>
</span><span id="Parser-1323"><a href="#Parser-1323"><span class="linenos">1323</span></a>
</span><span id="Parser-1324"><a href="#Parser-1324"><span class="linenos">1324</span></a> <span class="n">FETCH_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">}</span>
</span><span id="Parser-1325"><a href="#Parser-1325"><span class="linenos">1325</span></a>
</span><span id="Parser-1326"><a href="#Parser-1326"><span class="linenos">1326</span></a> <span class="n">ADD_CONSTRAINT_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1327"><a href="#Parser-1327"><span class="linenos">1327</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">,</span>
</span><span id="Parser-1328"><a href="#Parser-1328"><span class="linenos">1328</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">,</span>
</span><span id="Parser-1329"><a href="#Parser-1329"><span class="linenos">1329</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span>
</span><span id="Parser-1330"><a href="#Parser-1330"><span class="linenos">1330</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">KEY</span><span class="p">,</span>
</span><span id="Parser-1331"><a href="#Parser-1331"><span class="linenos">1331</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">,</span>
</span><span id="Parser-1332"><a href="#Parser-1332"><span class="linenos">1332</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">,</span>
</span><span id="Parser-1333"><a href="#Parser-1333"><span class="linenos">1333</span></a> <span class="p">}</span>
</span><span id="Parser-1334"><a href="#Parser-1334"><span class="linenos">1334</span></a>
</span><span id="Parser-1335"><a href="#Parser-1335"><span class="linenos">1335</span></a> <span class="n">DISTINCT_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">}</span>
</span><span id="Parser-1336"><a href="#Parser-1336"><span class="linenos">1336</span></a>
</span><span id="Parser-1337"><a href="#Parser-1337"><span class="linenos">1337</span></a> <span class="n">NULL_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">}</span>
</span><span id="Parser-1338"><a href="#Parser-1338"><span class="linenos">1338</span></a>
</span><span id="Parser-1339"><a href="#Parser-1339"><span class="linenos">1339</span></a> <span class="n">UNNEST_OFFSET_ALIAS_TOKENS</span> <span class="o">=</span> <span class="n">ID_VAR_TOKENS</span> <span class="o">-</span> <span class="n">SET_OPERATIONS</span>
</span><span id="Parser-1340"><a href="#Parser-1340"><span class="linenos">1340</span></a>
</span><span id="Parser-1341"><a href="#Parser-1341"><span class="linenos">1341</span></a> <span class="n">SELECT_START_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">}</span>
</span><span id="Parser-1342"><a href="#Parser-1342"><span class="linenos">1342</span></a>
</span><span id="Parser-1343"><a href="#Parser-1343"><span class="linenos">1343</span></a> <span class="n">COPY_INTO_VARLEN_OPTIONS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;FILE_FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;COPY_OPTIONS&quot;</span><span class="p">,</span> <span class="s2">&quot;FORMAT_OPTIONS&quot;</span><span class="p">,</span> <span class="s2">&quot;CREDENTIAL&quot;</span><span class="p">}</span>
</span><span id="Parser-1344"><a href="#Parser-1344"><span class="linenos">1344</span></a>
</span><span id="Parser-1345"><a href="#Parser-1345"><span class="linenos">1345</span></a> <span class="n">IS_JSON_PREDICATE_KIND</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;SCALAR&quot;</span><span class="p">,</span> <span class="s2">&quot;ARRAY&quot;</span><span class="p">,</span> <span class="s2">&quot;OBJECT&quot;</span><span class="p">}</span>
</span><span id="Parser-1346"><a href="#Parser-1346"><span class="linenos">1346</span></a>
</span><span id="Parser-1347"><a href="#Parser-1347"><span class="linenos">1347</span></a> <span class="n">ODBC_DATETIME_LITERALS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1348"><a href="#Parser-1348"><span class="linenos">1348</span></a> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Date</span><span class="p">,</span>
</span><span id="Parser-1349"><a href="#Parser-1349"><span class="linenos">1349</span></a> <span class="s2">&quot;t&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Time</span><span class="p">,</span>
</span><span id="Parser-1350"><a href="#Parser-1350"><span class="linenos">1350</span></a> <span class="s2">&quot;ts&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Timestamp</span><span class="p">,</span>
</span><span id="Parser-1351"><a href="#Parser-1351"><span class="linenos">1351</span></a> <span class="p">}</span>
</span><span id="Parser-1352"><a href="#Parser-1352"><span class="linenos">1352</span></a>
</span><span id="Parser-1353"><a href="#Parser-1353"><span class="linenos">1353</span></a> <span class="n">ON_CONDITION_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;TRUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FALSE&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">}</span>
</span><span id="Parser-1354"><a href="#Parser-1354"><span class="linenos">1354</span></a>
</span><span id="Parser-1355"><a href="#Parser-1355"><span class="linenos">1355</span></a> <span class="n">PRIVILEGE_FOLLOW_TOKENS</span> <span class="o">=</span> <span class="p">{</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">}</span>
</span><span id="Parser-1356"><a href="#Parser-1356"><span class="linenos">1356</span></a>
</span><span id="Parser-1357"><a href="#Parser-1357"><span class="linenos">1357</span></a> <span class="c1"># The style options for the DESCRIBE statement</span>
</span><span id="Parser-1358"><a href="#Parser-1358"><span class="linenos">1358</span></a> <span class="n">DESCRIBE_STYLES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ANALYZE&quot;</span><span class="p">,</span> <span class="s2">&quot;EXTENDED&quot;</span><span class="p">,</span> <span class="s2">&quot;FORMATTED&quot;</span><span class="p">,</span> <span class="s2">&quot;HISTORY&quot;</span><span class="p">}</span>
</span><span id="Parser-1359"><a href="#Parser-1359"><span class="linenos">1359</span></a>
</span><span id="Parser-1360"><a href="#Parser-1360"><span class="linenos">1360</span></a> <span class="c1"># The style options for the ANALYZE statement</span>
</span><span id="Parser-1361"><a href="#Parser-1361"><span class="linenos">1361</span></a> <span class="n">ANALYZE_STYLES</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1362"><a href="#Parser-1362"><span class="linenos">1362</span></a> <span class="s2">&quot;BUFFER_USAGE_LIMIT&quot;</span><span class="p">,</span>
</span><span id="Parser-1363"><a href="#Parser-1363"><span class="linenos">1363</span></a> <span class="s2">&quot;FULL&quot;</span><span class="p">,</span>
</span><span id="Parser-1364"><a href="#Parser-1364"><span class="linenos">1364</span></a> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span>
</span><span id="Parser-1365"><a href="#Parser-1365"><span class="linenos">1365</span></a> <span class="s2">&quot;NO_WRITE_TO_BINLOG&quot;</span><span class="p">,</span>
</span><span id="Parser-1366"><a href="#Parser-1366"><span class="linenos">1366</span></a> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">,</span>
</span><span id="Parser-1367"><a href="#Parser-1367"><span class="linenos">1367</span></a> <span class="s2">&quot;SKIP_LOCKED&quot;</span><span class="p">,</span>
</span><span id="Parser-1368"><a href="#Parser-1368"><span class="linenos">1368</span></a> <span class="s2">&quot;VERBOSE&quot;</span><span class="p">,</span>
</span><span id="Parser-1369"><a href="#Parser-1369"><span class="linenos">1369</span></a> <span class="p">}</span>
</span><span id="Parser-1370"><a href="#Parser-1370"><span class="linenos">1370</span></a>
</span><span id="Parser-1371"><a href="#Parser-1371"><span class="linenos">1371</span></a> <span class="n">ANALYZE_EXPRESSION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-1372"><a href="#Parser-1372"><span class="linenos">1372</span></a> <span class="s2">&quot;ALL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_columns</span><span class="p">(),</span>
</span><span id="Parser-1373"><a href="#Parser-1373"><span class="linenos">1373</span></a> <span class="s2">&quot;COMPUTE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_statistics</span><span class="p">(),</span>
</span><span id="Parser-1374"><a href="#Parser-1374"><span class="linenos">1374</span></a> <span class="s2">&quot;DELETE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_delete</span><span class="p">(),</span>
</span><span id="Parser-1375"><a href="#Parser-1375"><span class="linenos">1375</span></a> <span class="s2">&quot;DROP&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_histogram</span><span class="p">(),</span>
</span><span id="Parser-1376"><a href="#Parser-1376"><span class="linenos">1376</span></a> <span class="s2">&quot;ESTIMATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_statistics</span><span class="p">(),</span>
</span><span id="Parser-1377"><a href="#Parser-1377"><span class="linenos">1377</span></a> <span class="s2">&quot;LIST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_list</span><span class="p">(),</span>
</span><span id="Parser-1378"><a href="#Parser-1378"><span class="linenos">1378</span></a> <span class="s2">&quot;PREDICATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_columns</span><span class="p">(),</span>
</span><span id="Parser-1379"><a href="#Parser-1379"><span class="linenos">1379</span></a> <span class="s2">&quot;UPDATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_histogram</span><span class="p">(),</span>
</span><span id="Parser-1380"><a href="#Parser-1380"><span class="linenos">1380</span></a> <span class="s2">&quot;VALIDATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_analyze_validate</span><span class="p">(),</span>
</span><span id="Parser-1381"><a href="#Parser-1381"><span class="linenos">1381</span></a> <span class="p">}</span>
</span><span id="Parser-1382"><a href="#Parser-1382"><span class="linenos">1382</span></a>
</span><span id="Parser-1383"><a href="#Parser-1383"><span class="linenos">1383</span></a> <span class="n">PARTITION_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;PARTITION&quot;</span><span class="p">,</span> <span class="s2">&quot;SUBPARTITION&quot;</span><span class="p">}</span>
</span><span id="Parser-1384"><a href="#Parser-1384"><span class="linenos">1384</span></a>
</span><span id="Parser-1385"><a href="#Parser-1385"><span class="linenos">1385</span></a> <span class="n">AMBIGUOUS_ALIAS_TOKENS</span> <span class="o">=</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">)</span>
</span><span id="Parser-1386"><a href="#Parser-1386"><span class="linenos">1386</span></a>
</span><span id="Parser-1387"><a href="#Parser-1387"><span class="linenos">1387</span></a> <span class="n">OPERATION_MODIFIERS</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="Parser-1388"><a href="#Parser-1388"><span class="linenos">1388</span></a>
</span><span id="Parser-1389"><a href="#Parser-1389"><span class="linenos">1389</span></a> <span class="n">RECURSIVE_CTE_SEARCH_KIND</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;BREADTH&quot;</span><span class="p">,</span> <span class="s2">&quot;DEPTH&quot;</span><span class="p">,</span> <span class="s2">&quot;CYCLE&quot;</span><span class="p">}</span>
</span><span id="Parser-1390"><a href="#Parser-1390"><span class="linenos">1390</span></a>
</span><span id="Parser-1391"><a href="#Parser-1391"><span class="linenos">1391</span></a> <span class="n">MODIFIABLES</span> <span class="o">=</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableFromRows</span><span class="p">)</span>
</span><span id="Parser-1392"><a href="#Parser-1392"><span class="linenos">1392</span></a>
</span><span id="Parser-1393"><a href="#Parser-1393"><span class="linenos">1393</span></a> <span class="n">STRICT_CAST</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-1394"><a href="#Parser-1394"><span class="linenos">1394</span></a>
</span><span id="Parser-1395"><a href="#Parser-1395"><span class="linenos">1395</span></a> <span class="n">PREFIXED_PIVOT_COLUMNS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-1396"><a href="#Parser-1396"><span class="linenos">1396</span></a> <span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-1397"><a href="#Parser-1397"><span class="linenos">1397</span></a>
</span><span id="Parser-1398"><a href="#Parser-1398"><span class="linenos">1398</span></a> <span class="n">LOG_DEFAULTS_TO_LN</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-1399"><a href="#Parser-1399"><span class="linenos">1399</span></a>
</span><span id="Parser-1400"><a href="#Parser-1400"><span class="linenos">1400</span></a> <span class="c1"># Whether ADD is present for each column added by ALTER TABLE</span>
</span><span id="Parser-1401"><a href="#Parser-1401"><span class="linenos">1401</span></a> <span class="n">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-1402"><a href="#Parser-1402"><span class="linenos">1402</span></a>
</span><span id="Parser-1403"><a href="#Parser-1403"><span class="linenos">1403</span></a> <span class="c1"># Whether the table sample clause expects CSV syntax</span>
</span><span id="Parser-1404"><a href="#Parser-1404"><span class="linenos">1404</span></a> <span class="n">TABLESAMPLE_CSV</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-1405"><a href="#Parser-1405"><span class="linenos">1405</span></a>
</span><span id="Parser-1406"><a href="#Parser-1406"><span class="linenos">1406</span></a> <span class="c1"># The default method used for table sampling</span>
</span><span id="Parser-1407"><a href="#Parser-1407"><span class="linenos">1407</span></a> <span class="n">DEFAULT_SAMPLING_METHOD</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="Parser-1408"><a href="#Parser-1408"><span class="linenos">1408</span></a>
</span><span id="Parser-1409"><a href="#Parser-1409"><span class="linenos">1409</span></a> <span class="c1"># Whether the SET command needs a delimiter (e.g. &quot;=&quot;) for assignments</span>
</span><span id="Parser-1410"><a href="#Parser-1410"><span class="linenos">1410</span></a> <span class="n">SET_REQUIRES_ASSIGNMENT_DELIMITER</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-1411"><a href="#Parser-1411"><span class="linenos">1411</span></a>
</span><span id="Parser-1412"><a href="#Parser-1412"><span class="linenos">1412</span></a> <span class="c1"># Whether the TRIM function expects the characters to trim as its first argument</span>
</span><span id="Parser-1413"><a href="#Parser-1413"><span class="linenos">1413</span></a> <span class="n">TRIM_PATTERN_FIRST</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-1414"><a href="#Parser-1414"><span class="linenos">1414</span></a>
</span><span id="Parser-1415"><a href="#Parser-1415"><span class="linenos">1415</span></a> <span class="c1"># Whether string aliases are supported `SELECT COUNT(*) &#39;count&#39;`</span>
</span><span id="Parser-1416"><a href="#Parser-1416"><span class="linenos">1416</span></a> <span class="n">STRING_ALIASES</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-1417"><a href="#Parser-1417"><span class="linenos">1417</span></a>
</span><span id="Parser-1418"><a href="#Parser-1418"><span class="linenos">1418</span></a> <span class="c1"># Whether query modifiers such as LIMIT are attached to the UNION node (vs its right operand)</span>
</span><span id="Parser-1419"><a href="#Parser-1419"><span class="linenos">1419</span></a> <span class="n">MODIFIERS_ATTACHED_TO_SET_OP</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-1420"><a href="#Parser-1420"><span class="linenos">1420</span></a> <span class="n">SET_OP_MODIFIERS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;order&quot;</span><span class="p">,</span> <span class="s2">&quot;limit&quot;</span><span class="p">,</span> <span class="s2">&quot;offset&quot;</span><span class="p">}</span>
</span><span id="Parser-1421"><a href="#Parser-1421"><span class="linenos">1421</span></a>
</span><span id="Parser-1422"><a href="#Parser-1422"><span class="linenos">1422</span></a> <span class="c1"># Whether to parse IF statements that aren&#39;t followed by a left parenthesis as commands</span>
</span><span id="Parser-1423"><a href="#Parser-1423"><span class="linenos">1423</span></a> <span class="n">NO_PAREN_IF_COMMANDS</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-1424"><a href="#Parser-1424"><span class="linenos">1424</span></a>
</span><span id="Parser-1425"><a href="#Parser-1425"><span class="linenos">1425</span></a> <span class="c1"># Whether the -&gt; and -&gt;&gt; operators expect documents of type JSON (e.g. Postgres)</span>
</span><span id="Parser-1426"><a href="#Parser-1426"><span class="linenos">1426</span></a> <span class="n">JSON_ARROWS_REQUIRE_JSON_TYPE</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-1427"><a href="#Parser-1427"><span class="linenos">1427</span></a>
</span><span id="Parser-1428"><a href="#Parser-1428"><span class="linenos">1428</span></a> <span class="c1"># Whether the `:` operator is used to extract a value from a VARIANT column</span>
</span><span id="Parser-1429"><a href="#Parser-1429"><span class="linenos">1429</span></a> <span class="n">COLON_IS_VARIANT_EXTRACT</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-1430"><a href="#Parser-1430"><span class="linenos">1430</span></a>
</span><span id="Parser-1431"><a href="#Parser-1431"><span class="linenos">1431</span></a> <span class="c1"># Whether or not a VALUES keyword needs to be followed by &#39;(&#39; to form a VALUES clause.</span>
</span><span id="Parser-1432"><a href="#Parser-1432"><span class="linenos">1432</span></a> <span class="c1"># If this is True and &#39;(&#39; is not found, the keyword will be treated as an identifier</span>
</span><span id="Parser-1433"><a href="#Parser-1433"><span class="linenos">1433</span></a> <span class="n">VALUES_FOLLOWED_BY_PAREN</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-1434"><a href="#Parser-1434"><span class="linenos">1434</span></a>
</span><span id="Parser-1435"><a href="#Parser-1435"><span class="linenos">1435</span></a> <span class="c1"># Whether implicit unnesting is supported, e.g. SELECT 1 FROM y.z AS z, z.a (Redshift)</span>
</span><span id="Parser-1436"><a href="#Parser-1436"><span class="linenos">1436</span></a> <span class="n">SUPPORTS_IMPLICIT_UNNEST</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-1437"><a href="#Parser-1437"><span class="linenos">1437</span></a>
</span><span id="Parser-1438"><a href="#Parser-1438"><span class="linenos">1438</span></a> <span class="c1"># Whether or not interval spans are supported, INTERVAL 1 YEAR TO MONTHS</span>
</span><span id="Parser-1439"><a href="#Parser-1439"><span class="linenos">1439</span></a> <span class="n">INTERVAL_SPANS</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-1440"><a href="#Parser-1440"><span class="linenos">1440</span></a>
</span><span id="Parser-1441"><a href="#Parser-1441"><span class="linenos">1441</span></a> <span class="c1"># Whether a PARTITION clause can follow a table reference</span>
</span><span id="Parser-1442"><a href="#Parser-1442"><span class="linenos">1442</span></a> <span class="n">SUPPORTS_PARTITION_SELECTION</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-1443"><a href="#Parser-1443"><span class="linenos">1443</span></a>
</span><span id="Parser-1444"><a href="#Parser-1444"><span class="linenos">1444</span></a> <span class="c1"># Whether the `name AS expr` schema/column constraint requires parentheses around `expr`</span>
</span><span id="Parser-1445"><a href="#Parser-1445"><span class="linenos">1445</span></a> <span class="n">WRAPPED_TRANSFORM_COLUMN_CONSTRAINT</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-1446"><a href="#Parser-1446"><span class="linenos">1446</span></a>
</span><span id="Parser-1447"><a href="#Parser-1447"><span class="linenos">1447</span></a> <span class="c1"># Whether the &#39;AS&#39; keyword is optional in the CTE definition syntax</span>
</span><span id="Parser-1448"><a href="#Parser-1448"><span class="linenos">1448</span></a> <span class="n">OPTIONAL_ALIAS_TOKEN_CTE</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-1449"><a href="#Parser-1449"><span class="linenos">1449</span></a>
</span><span id="Parser-1450"><a href="#Parser-1450"><span class="linenos">1450</span></a> <span class="vm">__slots__</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-1451"><a href="#Parser-1451"><span class="linenos">1451</span></a> <span class="s2">&quot;error_level&quot;</span><span class="p">,</span>
</span><span id="Parser-1452"><a href="#Parser-1452"><span class="linenos">1452</span></a> <span class="s2">&quot;error_message_context&quot;</span><span class="p">,</span>
</span><span id="Parser-1453"><a href="#Parser-1453"><span class="linenos">1453</span></a> <span class="s2">&quot;max_errors&quot;</span><span class="p">,</span>
</span><span id="Parser-1454"><a href="#Parser-1454"><span class="linenos">1454</span></a> <span class="s2">&quot;dialect&quot;</span><span class="p">,</span>
</span><span id="Parser-1455"><a href="#Parser-1455"><span class="linenos">1455</span></a> <span class="s2">&quot;sql&quot;</span><span class="p">,</span>
</span><span id="Parser-1456"><a href="#Parser-1456"><span class="linenos">1456</span></a> <span class="s2">&quot;errors&quot;</span><span class="p">,</span>
</span><span id="Parser-1457"><a href="#Parser-1457"><span class="linenos">1457</span></a> <span class="s2">&quot;_tokens&quot;</span><span class="p">,</span>
</span><span id="Parser-1458"><a href="#Parser-1458"><span class="linenos">1458</span></a> <span class="s2">&quot;_index&quot;</span><span class="p">,</span>
</span><span id="Parser-1459"><a href="#Parser-1459"><span class="linenos">1459</span></a> <span class="s2">&quot;_curr&quot;</span><span class="p">,</span>
</span><span id="Parser-1460"><a href="#Parser-1460"><span class="linenos">1460</span></a> <span class="s2">&quot;_next&quot;</span><span class="p">,</span>
</span><span id="Parser-1461"><a href="#Parser-1461"><span class="linenos">1461</span></a> <span class="s2">&quot;_prev&quot;</span><span class="p">,</span>
</span><span id="Parser-1462"><a href="#Parser-1462"><span class="linenos">1462</span></a> <span class="s2">&quot;_prev_comments&quot;</span><span class="p">,</span>
</span><span id="Parser-1463"><a href="#Parser-1463"><span class="linenos">1463</span></a> <span class="p">)</span>
</span><span id="Parser-1464"><a href="#Parser-1464"><span class="linenos">1464</span></a>
</span><span id="Parser-1465"><a href="#Parser-1465"><span class="linenos">1465</span></a> <span class="c1"># Autofilled</span>
</span><span id="Parser-1466"><a href="#Parser-1466"><span class="linenos">1466</span></a> <span class="n">SHOW_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="Parser-1467"><a href="#Parser-1467"><span class="linenos">1467</span></a> <span class="n">SET_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="Parser-1468"><a href="#Parser-1468"><span class="linenos">1468</span></a>
</span><span id="Parser-1469"><a href="#Parser-1469"><span class="linenos">1469</span></a> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span>
</span><span id="Parser-1470"><a href="#Parser-1470"><span class="linenos">1470</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-1471"><a href="#Parser-1471"><span class="linenos">1471</span></a> <span class="n">error_level</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">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-1472"><a href="#Parser-1472"><span class="linenos">1472</span></a> <span class="n">error_message_context</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">100</span><span class="p">,</span>
</span><span id="Parser-1473"><a href="#Parser-1473"><span class="linenos">1473</span></a> <span class="n">max_errors</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
</span><span id="Parser-1474"><a href="#Parser-1474"><span class="linenos">1474</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="Parser-1475"><a href="#Parser-1475"><span class="linenos">1475</span></a> <span class="p">):</span>
</span><span id="Parser-1476"><a href="#Parser-1476"><span class="linenos">1476</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects</span><span class="w"> </span><span class="kn">import</span> <span class="n">Dialect</span>
</span><span id="Parser-1477"><a href="#Parser-1477"><span class="linenos">1477</span></a>
</span><span id="Parser-1478"><a href="#Parser-1478"><span class="linenos">1478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">=</span> <span class="n">error_level</span> <span class="ow">or</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span>
</span><span id="Parser-1479"><a href="#Parser-1479"><span class="linenos">1479</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span> <span class="o">=</span> <span class="n">error_message_context</span>
</span><span id="Parser-1480"><a href="#Parser-1480"><span class="linenos">1480</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span> <span class="o">=</span> <span class="n">max_errors</span>
</span><span id="Parser-1481"><a href="#Parser-1481"><span class="linenos">1481</span></a> <span class="bp">self</span><span class="o">.</span><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="Parser-1482"><a href="#Parser-1482"><span class="linenos">1482</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
</span><span id="Parser-1483"><a href="#Parser-1483"><span class="linenos">1483</span></a>
</span><span id="Parser-1484"><a href="#Parser-1484"><span class="linenos">1484</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Parser-1485"><a href="#Parser-1485"><span class="linenos">1485</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="Parser-1486"><a href="#Parser-1486"><span class="linenos">1486</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-1487"><a href="#Parser-1487"><span class="linenos">1487</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-1488"><a href="#Parser-1488"><span class="linenos">1488</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="Parser-1489"><a href="#Parser-1489"><span class="linenos">1489</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1490"><a href="#Parser-1490"><span class="linenos">1490</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1491"><a href="#Parser-1491"><span class="linenos">1491</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1492"><a href="#Parser-1492"><span class="linenos">1492</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1493"><a href="#Parser-1493"><span class="linenos">1493</span></a>
</span><span id="Parser-1494"><a href="#Parser-1494"><span class="linenos">1494</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">parse</span><span class="p">(</span>
</span><span id="Parser-1495"><a href="#Parser-1495"><span class="linenos">1495</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">raw_tokens</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">Token</span><span class="p">],</span> <span class="n">sql</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="Parser-1496"><a href="#Parser-1496"><span class="linenos">1496</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="Parser-1497"><a href="#Parser-1497"><span class="linenos">1497</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser-1498"><a href="#Parser-1498"><span class="linenos">1498</span></a><span class="sd"> Parses a list of tokens and returns a list of syntax trees, one tree</span>
</span><span id="Parser-1499"><a href="#Parser-1499"><span class="linenos">1499</span></a><span class="sd"> per parsed SQL statement.</span>
</span><span id="Parser-1500"><a href="#Parser-1500"><span class="linenos">1500</span></a>
</span><span id="Parser-1501"><a href="#Parser-1501"><span class="linenos">1501</span></a><span class="sd"> Args:</span>
</span><span id="Parser-1502"><a href="#Parser-1502"><span class="linenos">1502</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
</span><span id="Parser-1503"><a href="#Parser-1503"><span class="linenos">1503</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</span>
</span><span id="Parser-1504"><a href="#Parser-1504"><span class="linenos">1504</span></a>
</span><span id="Parser-1505"><a href="#Parser-1505"><span class="linenos">1505</span></a><span class="sd"> Returns:</span>
</span><span id="Parser-1506"><a href="#Parser-1506"><span class="linenos">1506</span></a><span class="sd"> The list of the produced syntax trees.</span>
</span><span id="Parser-1507"><a href="#Parser-1507"><span class="linenos">1507</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser-1508"><a href="#Parser-1508"><span class="linenos">1508</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span>
</span><span id="Parser-1509"><a href="#Parser-1509"><span class="linenos">1509</span></a> <span class="n">parse_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="o">=</span><span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="o">=</span><span class="n">sql</span>
</span><span id="Parser-1510"><a href="#Parser-1510"><span class="linenos">1510</span></a> <span class="p">)</span>
</span><span id="Parser-1511"><a href="#Parser-1511"><span class="linenos">1511</span></a>
</span><span id="Parser-1512"><a href="#Parser-1512"><span class="linenos">1512</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">parse_into</span><span class="p">(</span>
</span><span id="Parser-1513"><a href="#Parser-1513"><span class="linenos">1513</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-1514"><a href="#Parser-1514"><span class="linenos">1514</span></a> <span class="n">expression_types</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span>
</span><span id="Parser-1515"><a href="#Parser-1515"><span class="linenos">1515</span></a> <span class="n">raw_tokens</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">Token</span><span class="p">],</span>
</span><span id="Parser-1516"><a href="#Parser-1516"><span class="linenos">1516</span></a> <span class="n">sql</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 class="p">,</span>
</span><span id="Parser-1517"><a href="#Parser-1517"><span class="linenos">1517</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="Parser-1518"><a href="#Parser-1518"><span class="linenos">1518</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser-1519"><a href="#Parser-1519"><span class="linenos">1519</span></a><span class="sd"> Parses a list of tokens into a given Expression type. If a collection of Expression</span>
</span><span id="Parser-1520"><a href="#Parser-1520"><span class="linenos">1520</span></a><span class="sd"> types is given instead, this method will try to parse the token list into each one</span>
</span><span id="Parser-1521"><a href="#Parser-1521"><span class="linenos">1521</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</span>
</span><span id="Parser-1522"><a href="#Parser-1522"><span class="linenos">1522</span></a>
</span><span id="Parser-1523"><a href="#Parser-1523"><span class="linenos">1523</span></a><span class="sd"> Args:</span>
</span><span id="Parser-1524"><a href="#Parser-1524"><span class="linenos">1524</span></a><span class="sd"> expression_types: The expression type(s) to try and parse the token list into.</span>
</span><span id="Parser-1525"><a href="#Parser-1525"><span class="linenos">1525</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
</span><span id="Parser-1526"><a href="#Parser-1526"><span class="linenos">1526</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</span>
</span><span id="Parser-1527"><a href="#Parser-1527"><span class="linenos">1527</span></a>
</span><span id="Parser-1528"><a href="#Parser-1528"><span class="linenos">1528</span></a><span class="sd"> Returns:</span>
</span><span id="Parser-1529"><a href="#Parser-1529"><span class="linenos">1529</span></a><span class="sd"> The target Expression.</span>
</span><span id="Parser-1530"><a href="#Parser-1530"><span class="linenos">1530</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser-1531"><a href="#Parser-1531"><span class="linenos">1531</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-1532"><a href="#Parser-1532"><span class="linenos">1532</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
</span><span id="Parser-1533"><a href="#Parser-1533"><span class="linenos">1533</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression_type</span><span class="p">)</span>
</span><span id="Parser-1534"><a href="#Parser-1534"><span class="linenos">1534</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">parser</span><span class="p">:</span>
</span><span id="Parser-1535"><a href="#Parser-1535"><span class="linenos">1535</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser registered for </span><span class="si">{</span><span class="n">expression_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Parser-1536"><a href="#Parser-1536"><span class="linenos">1536</span></a>
</span><span id="Parser-1537"><a href="#Parser-1537"><span class="linenos">1537</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="Parser-1538"><a href="#Parser-1538"><span class="linenos">1538</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span><span class="n">parser</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
</span><span id="Parser-1539"><a href="#Parser-1539"><span class="linenos">1539</span></a> <span class="k">except</span> <span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="Parser-1540"><a href="#Parser-1540"><span class="linenos">1540</span></a> <span class="n">e</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;into_expression&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression_type</span>
</span><span id="Parser-1541"><a href="#Parser-1541"><span class="linenos">1541</span></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="Parser-1542"><a href="#Parser-1542"><span class="linenos">1542</span></a>
</span><span id="Parser-1543"><a href="#Parser-1543"><span class="linenos">1543</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
</span><span id="Parser-1544"><a href="#Parser-1544"><span class="linenos">1544</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse &#39;</span><span class="si">{</span><span class="n">sql</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">raw_tokens</span><span class="si">}</span><span class="s2">&#39; into </span><span class="si">{</span><span class="n">expression_types</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Parser-1545"><a href="#Parser-1545"><span class="linenos">1545</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="n">errors</span><span class="p">),</span>
</span><span id="Parser-1546"><a href="#Parser-1546"><span class="linenos">1546</span></a> <span class="p">)</span> <span class="kn">from</span><span class="w"> </span><span class="nn">errors</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span><span id="Parser-1547"><a href="#Parser-1547"><span class="linenos">1547</span></a>
</span><span id="Parser-1548"><a href="#Parser-1548"><span class="linenos">1548</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse</span><span class="p">(</span>
</span><span id="Parser-1549"><a href="#Parser-1549"><span class="linenos">1549</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-1550"><a href="#Parser-1550"><span class="linenos">1550</span></a> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[</span><span class="n">Parser</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="Parser-1551"><a href="#Parser-1551"><span class="linenos">1551</span></a> <span class="n">raw_tokens</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">Token</span><span class="p">],</span>
</span><span id="Parser-1552"><a href="#Parser-1552"><span class="linenos">1552</span></a> <span class="n">sql</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 class="p">,</span>
</span><span id="Parser-1553"><a href="#Parser-1553"><span class="linenos">1553</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="Parser-1554"><a href="#Parser-1554"><span class="linenos">1554</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
</span><span id="Parser-1555"><a href="#Parser-1555"><span class="linenos">1555</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="n">sql</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
</span><span id="Parser-1556"><a href="#Parser-1556"><span class="linenos">1556</span></a>
</span><span id="Parser-1557"><a href="#Parser-1557"><span class="linenos">1557</span></a> <span class="n">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_tokens</span><span class="p">)</span>
</span><span id="Parser-1558"><a href="#Parser-1558"><span class="linenos">1558</span></a> <span class="n">chunks</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">List</span><span class="p">[</span><span class="n">Token</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[[]]</span>
</span><span id="Parser-1559"><a href="#Parser-1559"><span class="linenos">1559</span></a>
</span><span id="Parser-1560"><a href="#Parser-1560"><span class="linenos">1560</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">token</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">raw_tokens</span><span class="p">):</span>
</span><span id="Parser-1561"><a href="#Parser-1561"><span class="linenos">1561</span></a> <span class="k">if</span> <span class="n">token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEMICOLON</span><span class="p">:</span>
</span><span id="Parser-1562"><a href="#Parser-1562"><span class="linenos">1562</span></a> <span class="k">if</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
</span><span id="Parser-1563"><a href="#Parser-1563"><span class="linenos">1563</span></a> <span class="n">chunks</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">token</span><span class="p">])</span>
</span><span id="Parser-1564"><a href="#Parser-1564"><span class="linenos">1564</span></a>
</span><span id="Parser-1565"><a href="#Parser-1565"><span class="linenos">1565</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">total</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Parser-1566"><a href="#Parser-1566"><span class="linenos">1566</span></a> <span class="n">chunks</span><span class="o">.</span><span class="n">append</span><span class="p">([])</span>
</span><span id="Parser-1567"><a href="#Parser-1567"><span class="linenos">1567</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-1568"><a href="#Parser-1568"><span class="linenos">1568</span></a> <span class="n">chunks</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
</span><span id="Parser-1569"><a href="#Parser-1569"><span class="linenos">1569</span></a>
</span><span id="Parser-1570"><a href="#Parser-1570"><span class="linenos">1570</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-1571"><a href="#Parser-1571"><span class="linenos">1571</span></a>
</span><span id="Parser-1572"><a href="#Parser-1572"><span class="linenos">1572</span></a> <span class="k">for</span> <span class="n">tokens</span> <span class="ow">in</span> <span class="n">chunks</span><span class="p">:</span>
</span><span id="Parser-1573"><a href="#Parser-1573"><span class="linenos">1573</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
</span><span id="Parser-1574"><a href="#Parser-1574"><span class="linenos">1574</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="n">tokens</span>
</span><span id="Parser-1575"><a href="#Parser-1575"><span class="linenos">1575</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-1576"><a href="#Parser-1576"><span class="linenos">1576</span></a>
</span><span id="Parser-1577"><a href="#Parser-1577"><span class="linenos">1577</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_method</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
</span><span id="Parser-1578"><a href="#Parser-1578"><span class="linenos">1578</span></a>
</span><span id="Parser-1579"><a href="#Parser-1579"><span class="linenos">1579</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">):</span>
</span><span id="Parser-1580"><a href="#Parser-1580"><span class="linenos">1580</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Invalid expression / Unexpected token&quot;</span><span class="p">)</span>
</span><span id="Parser-1581"><a href="#Parser-1581"><span class="linenos">1581</span></a>
</span><span id="Parser-1582"><a href="#Parser-1582"><span class="linenos">1582</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">check_errors</span><span class="p">()</span>
</span><span id="Parser-1583"><a href="#Parser-1583"><span class="linenos">1583</span></a>
</span><span id="Parser-1584"><a href="#Parser-1584"><span class="linenos">1584</span></a> <span class="k">return</span> <span class="n">expressions</span>
</span><span id="Parser-1585"><a href="#Parser-1585"><span class="linenos">1585</span></a>
</span><span id="Parser-1586"><a href="#Parser-1586"><span class="linenos">1586</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">check_errors</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-1587"><a href="#Parser-1587"><span class="linenos">1587</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Logs or raises any found errors, depending on the chosen error level setting.&quot;&quot;&quot;</span>
</span><span id="Parser-1588"><a href="#Parser-1588"><span class="linenos">1588</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
</span><span id="Parser-1589"><a href="#Parser-1589"><span class="linenos">1589</span></a> <span class="k">for</span> <span class="n">error</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
</span><span id="Parser-1590"><a href="#Parser-1590"><span class="linenos">1590</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">error</span><span class="p">))</span>
</span><span id="Parser-1591"><a href="#Parser-1591"><span class="linenos">1591</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
</span><span id="Parser-1592"><a href="#Parser-1592"><span class="linenos">1592</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
</span><span id="Parser-1593"><a href="#Parser-1593"><span class="linenos">1593</span></a> <span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span><span class="p">),</span>
</span><span id="Parser-1594"><a href="#Parser-1594"><span class="linenos">1594</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">),</span>
</span><span id="Parser-1595"><a href="#Parser-1595"><span class="linenos">1595</span></a> <span class="p">)</span>
</span><span id="Parser-1596"><a href="#Parser-1596"><span class="linenos">1596</span></a>
</span><span id="Parser-1597"><a href="#Parser-1597"><span class="linenos">1597</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">raise_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">token</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">Token</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-1598"><a href="#Parser-1598"><span class="linenos">1598</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser-1599"><a href="#Parser-1599"><span class="linenos">1599</span></a><span class="sd"> Appends an error in the list of recorded errors or raises it, depending on the chosen</span>
</span><span id="Parser-1600"><a href="#Parser-1600"><span class="linenos">1600</span></a><span class="sd"> error level setting.</span>
</span><span id="Parser-1601"><a href="#Parser-1601"><span class="linenos">1601</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser-1602"><a href="#Parser-1602"><span class="linenos">1602</span></a> <span class="n">token</span> <span class="o">=</span> <span class="n">token</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="ow">or</span> <span class="n">Token</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="Parser-1603"><a href="#Parser-1603"><span class="linenos">1603</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">start</span>
</span><span id="Parser-1604"><a href="#Parser-1604"><span class="linenos">1604</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">end</span> <span class="o">+</span> <span class="mi">1</span>
</span><span id="Parser-1605"><a href="#Parser-1605"><span class="linenos">1605</span></a> <span class="n">start_context</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="nb">max</span><span class="p">(</span><span class="n">start</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="p">:</span> <span class="n">start</span><span class="p">]</span>
</span><span id="Parser-1606"><a href="#Parser-1606"><span class="linenos">1606</span></a> <span class="n">highlight</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">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span>
</span><span id="Parser-1607"><a href="#Parser-1607"><span class="linenos">1607</span></a> <span class="n">end_context</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">end</span> <span class="p">:</span> <span class="n">end</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">]</span>
</span><span id="Parser-1608"><a href="#Parser-1608"><span class="linenos">1608</span></a>
</span><span id="Parser-1609"><a href="#Parser-1609"><span class="linenos">1609</span></a> <span class="n">error</span> <span class="o">=</span> <span class="n">ParseError</span><span class="o">.</span><span class="n">new</span><span class="p">(</span>
</span><span id="Parser-1610"><a href="#Parser-1610"><span class="linenos">1610</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">. Line </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="si">}</span><span class="s2">, Col: </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span id="Parser-1611"><a href="#Parser-1611"><span class="linenos">1611</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">start_context</span><span class="si">}</span><span class="se">\033</span><span class="s2">[4m</span><span class="si">{</span><span class="n">highlight</span><span class="si">}</span><span class="se">\033</span><span class="s2">[0m</span><span class="si">{</span><span class="n">end_context</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Parser-1612"><a href="#Parser-1612"><span class="linenos">1612</span></a> <span class="n">description</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
</span><span id="Parser-1613"><a href="#Parser-1613"><span class="linenos">1613</span></a> <span class="n">line</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="p">,</span>
</span><span id="Parser-1614"><a href="#Parser-1614"><span class="linenos">1614</span></a> <span class="n">col</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="p">,</span>
</span><span id="Parser-1615"><a href="#Parser-1615"><span class="linenos">1615</span></a> <span class="n">start_context</span><span class="o">=</span><span class="n">start_context</span><span class="p">,</span>
</span><span id="Parser-1616"><a href="#Parser-1616"><span class="linenos">1616</span></a> <span class="n">highlight</span><span class="o">=</span><span class="n">highlight</span><span class="p">,</span>
</span><span id="Parser-1617"><a href="#Parser-1617"><span class="linenos">1617</span></a> <span class="n">end_context</span><span class="o">=</span><span class="n">end_context</span><span class="p">,</span>
</span><span id="Parser-1618"><a href="#Parser-1618"><span class="linenos">1618</span></a> <span class="p">)</span>
</span><span id="Parser-1619"><a href="#Parser-1619"><span class="linenos">1619</span></a>
</span><span id="Parser-1620"><a href="#Parser-1620"><span class="linenos">1620</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
</span><span id="Parser-1621"><a href="#Parser-1621"><span class="linenos">1621</span></a> <span class="k">raise</span> <span class="n">error</span>
</span><span id="Parser-1622"><a href="#Parser-1622"><span class="linenos">1622</span></a>
</span><span id="Parser-1623"><a href="#Parser-1623"><span class="linenos">1623</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
</span><span id="Parser-1624"><a href="#Parser-1624"><span class="linenos">1624</span></a>
</span><span id="Parser-1625"><a href="#Parser-1625"><span class="linenos">1625</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">expression</span><span class="p">(</span>
</span><span id="Parser-1626"><a href="#Parser-1626"><span class="linenos">1626</span></a> <span class="bp">self</span><span class="p">,</span> <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">comments</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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
</span><span id="Parser-1627"><a href="#Parser-1627"><span class="linenos">1627</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="Parser-1628"><a href="#Parser-1628"><span class="linenos">1628</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser-1629"><a href="#Parser-1629"><span class="linenos">1629</span></a><span class="sd"> Creates a new, validated Expression.</span>
</span><span id="Parser-1630"><a href="#Parser-1630"><span class="linenos">1630</span></a>
</span><span id="Parser-1631"><a href="#Parser-1631"><span class="linenos">1631</span></a><span class="sd"> Args:</span>
</span><span id="Parser-1632"><a href="#Parser-1632"><span class="linenos">1632</span></a><span class="sd"> exp_class: The expression class to instantiate.</span>
</span><span id="Parser-1633"><a href="#Parser-1633"><span class="linenos">1633</span></a><span class="sd"> comments: An optional list of comments to attach to the expression.</span>
</span><span id="Parser-1634"><a href="#Parser-1634"><span class="linenos">1634</span></a><span class="sd"> kwargs: The arguments to set for the expression along with their respective values.</span>
</span><span id="Parser-1635"><a href="#Parser-1635"><span class="linenos">1635</span></a>
</span><span id="Parser-1636"><a href="#Parser-1636"><span class="linenos">1636</span></a><span class="sd"> Returns:</span>
</span><span id="Parser-1637"><a href="#Parser-1637"><span class="linenos">1637</span></a><span class="sd"> The target expression.</span>
</span><span id="Parser-1638"><a href="#Parser-1638"><span class="linenos">1638</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser-1639"><a href="#Parser-1639"><span class="linenos">1639</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">exp_class</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="Parser-1640"><a href="#Parser-1640"><span class="linenos">1640</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
</span><span id="Parser-1641"><a href="#Parser-1641"><span class="linenos">1641</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
</span><span id="Parser-1642"><a href="#Parser-1642"><span class="linenos">1642</span></a>
</span><span id="Parser-1643"><a href="#Parser-1643"><span class="linenos">1643</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_add_comments</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">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 class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-1644"><a href="#Parser-1644"><span class="linenos">1644</span></a> <span class="k">if</span> <span class="n">expression</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
</span><span id="Parser-1645"><a href="#Parser-1645"><span class="linenos">1645</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">)</span>
</span><span id="Parser-1646"><a href="#Parser-1646"><span class="linenos">1646</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1647"><a href="#Parser-1647"><span class="linenos">1647</span></a>
</span><span id="Parser-1648"><a href="#Parser-1648"><span class="linenos">1648</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">validate_expression</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">args</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">List</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="Parser-1649"><a href="#Parser-1649"><span class="linenos">1649</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser-1650"><a href="#Parser-1650"><span class="linenos">1650</span></a><span class="sd"> Validates an Expression, making sure that all its mandatory arguments are set.</span>
</span><span id="Parser-1651"><a href="#Parser-1651"><span class="linenos">1651</span></a>
</span><span id="Parser-1652"><a href="#Parser-1652"><span class="linenos">1652</span></a><span class="sd"> Args:</span>
</span><span id="Parser-1653"><a href="#Parser-1653"><span class="linenos">1653</span></a><span class="sd"> expression: The expression to validate.</span>
</span><span id="Parser-1654"><a href="#Parser-1654"><span class="linenos">1654</span></a><span class="sd"> args: An optional list of items that was used to instantiate the expression, if it&#39;s a Func.</span>
</span><span id="Parser-1655"><a href="#Parser-1655"><span class="linenos">1655</span></a>
</span><span id="Parser-1656"><a href="#Parser-1656"><span class="linenos">1656</span></a><span class="sd"> Returns:</span>
</span><span id="Parser-1657"><a href="#Parser-1657"><span class="linenos">1657</span></a><span class="sd"> The validated expression.</span>
</span><span id="Parser-1658"><a href="#Parser-1658"><span class="linenos">1658</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser-1659"><a href="#Parser-1659"><span class="linenos">1659</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">!=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
</span><span id="Parser-1660"><a href="#Parser-1660"><span class="linenos">1660</span></a> <span class="k">for</span> <span class="n">error_message</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">error_messages</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
</span><span id="Parser-1661"><a href="#Parser-1661"><span class="linenos">1661</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="n">error_message</span><span class="p">)</span>
</span><span id="Parser-1662"><a href="#Parser-1662"><span class="linenos">1662</span></a>
</span><span id="Parser-1663"><a href="#Parser-1663"><span class="linenos">1663</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="Parser-1664"><a href="#Parser-1664"><span class="linenos">1664</span></a>
</span><span id="Parser-1665"><a href="#Parser-1665"><span class="linenos">1665</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_find_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">Token</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Parser-1666"><a href="#Parser-1666"><span class="linenos">1666</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">start</span><span class="o">.</span><span class="n">start</span> <span class="p">:</span> <span class="n">end</span><span class="o">.</span><span class="n">end</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
</span><span id="Parser-1667"><a href="#Parser-1667"><span class="linenos">1667</span></a>
</span><span id="Parser-1668"><a href="#Parser-1668"><span class="linenos">1668</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_is_connected</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="Parser-1669"><a href="#Parser-1669"><span class="linenos">1669</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">end</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">start</span>
</span><span id="Parser-1670"><a href="#Parser-1670"><span class="linenos">1670</span></a>
</span><span id="Parser-1671"><a href="#Parser-1671"><span class="linenos">1671</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_advance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">times</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-1672"><a href="#Parser-1672"><span class="linenos">1672</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">+=</span> <span class="n">times</span>
</span><span id="Parser-1673"><a href="#Parser-1673"><span class="linenos">1673</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="p">)</span>
</span><span id="Parser-1674"><a href="#Parser-1674"><span class="linenos">1674</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-1675"><a href="#Parser-1675"><span class="linenos">1675</span></a>
</span><span id="Parser-1676"><a href="#Parser-1676"><span class="linenos">1676</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="Parser-1677"><a href="#Parser-1677"><span class="linenos">1677</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
</span><span id="Parser-1678"><a href="#Parser-1678"><span class="linenos">1678</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">comments</span>
</span><span id="Parser-1679"><a href="#Parser-1679"><span class="linenos">1679</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-1680"><a href="#Parser-1680"><span class="linenos">1680</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1681"><a href="#Parser-1681"><span class="linenos">1681</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1682"><a href="#Parser-1682"><span class="linenos">1682</span></a>
</span><span id="Parser-1683"><a href="#Parser-1683"><span class="linenos">1683</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-1684"><a href="#Parser-1684"><span class="linenos">1684</span></a> <span class="k">if</span> <span class="n">index</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="p">:</span>
</span><span id="Parser-1685"><a href="#Parser-1685"><span class="linenos">1685</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="p">)</span>
</span><span id="Parser-1686"><a href="#Parser-1686"><span class="linenos">1686</span></a>
</span><span id="Parser-1687"><a href="#Parser-1687"><span class="linenos">1687</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_warn_unsupported</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-1688"><a href="#Parser-1688"><span class="linenos">1688</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Parser-1689"><a href="#Parser-1689"><span class="linenos">1689</span></a> <span class="k">return</span>
</span><span id="Parser-1690"><a href="#Parser-1690"><span class="linenos">1690</span></a>
</span><span id="Parser-1691"><a href="#Parser-1691"><span class="linenos">1691</span></a> <span class="c1"># We use _find_sql because self.sql may comprise multiple chunks, and we&#39;re only</span>
</span><span id="Parser-1692"><a href="#Parser-1692"><span class="linenos">1692</span></a> <span class="c1"># interested in emitting a warning for the one being currently processed.</span>
</span><span id="Parser-1693"><a href="#Parser-1693"><span class="linenos">1693</span></a> <span class="n">sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])[:</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">]</span>
</span><span id="Parser-1694"><a href="#Parser-1694"><span class="linenos">1694</span></a>
</span><span id="Parser-1695"><a href="#Parser-1695"><span class="linenos">1695</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
</span><span id="Parser-1696"><a href="#Parser-1696"><span class="linenos">1696</span></a> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">sql</span><span class="si">}</span><span class="s2">&#39; contains unsupported syntax. Falling back to parsing as a &#39;Command&#39;.&quot;</span>
</span><span id="Parser-1697"><a href="#Parser-1697"><span class="linenos">1697</span></a> <span class="p">)</span>
</span><span id="Parser-1698"><a href="#Parser-1698"><span class="linenos">1698</span></a>
</span><span id="Parser-1699"><a href="#Parser-1699"><span class="linenos">1699</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_command</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="Parser-1700"><a href="#Parser-1700"><span class="linenos">1700</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_warn_unsupported</span><span class="p">()</span>
</span><span id="Parser-1701"><a href="#Parser-1701"><span class="linenos">1701</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1702"><a href="#Parser-1702"><span class="linenos">1702</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">,</span>
</span><span id="Parser-1703"><a href="#Parser-1703"><span class="linenos">1703</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
</span><span id="Parser-1704"><a href="#Parser-1704"><span class="linenos">1704</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span>
</span><span id="Parser-1705"><a href="#Parser-1705"><span class="linenos">1705</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="Parser-1706"><a href="#Parser-1706"><span class="linenos">1706</span></a> <span class="p">)</span>
</span><span id="Parser-1707"><a href="#Parser-1707"><span class="linenos">1707</span></a>
</span><span id="Parser-1708"><a href="#Parser-1708"><span class="linenos">1708</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_try_parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">[[],</span> <span class="n">T</span><span class="p">],</span> <span class="n">retreat</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">Optional</span><span class="p">[</span><span class="n">T</span><span class="p">]:</span>
</span><span id="Parser-1709"><a href="#Parser-1709"><span class="linenos">1709</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser-1710"><a href="#Parser-1710"><span class="linenos">1710</span></a><span class="sd"> Attemps to backtrack if a parse function that contains a try/catch internally raises an error.</span>
</span><span id="Parser-1711"><a href="#Parser-1711"><span class="linenos">1711</span></a><span class="sd"> This behavior can be different depending on the uset-set ErrorLevel, so _try_parse aims to</span>
</span><span id="Parser-1712"><a href="#Parser-1712"><span class="linenos">1712</span></a><span class="sd"> solve this by setting &amp; resetting the parser state accordingly</span>
</span><span id="Parser-1713"><a href="#Parser-1713"><span class="linenos">1713</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser-1714"><a href="#Parser-1714"><span class="linenos">1714</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-1715"><a href="#Parser-1715"><span class="linenos">1715</span></a> <span class="n">error_level</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span>
</span><span id="Parser-1716"><a href="#Parser-1716"><span class="linenos">1716</span></a>
</span><span id="Parser-1717"><a href="#Parser-1717"><span class="linenos">1717</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span>
</span><span id="Parser-1718"><a href="#Parser-1718"><span class="linenos">1718</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="Parser-1719"><a href="#Parser-1719"><span class="linenos">1719</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="Parser-1720"><a href="#Parser-1720"><span class="linenos">1720</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
</span><span id="Parser-1721"><a href="#Parser-1721"><span class="linenos">1721</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1722"><a href="#Parser-1722"><span class="linenos">1722</span></a> <span class="k">finally</span><span class="p">:</span>
</span><span id="Parser-1723"><a href="#Parser-1723"><span class="linenos">1723</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">retreat</span><span class="p">:</span>
</span><span id="Parser-1724"><a href="#Parser-1724"><span class="linenos">1724</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-1725"><a href="#Parser-1725"><span class="linenos">1725</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">=</span> <span class="n">error_level</span>
</span><span id="Parser-1726"><a href="#Parser-1726"><span class="linenos">1726</span></a>
</span><span id="Parser-1727"><a href="#Parser-1727"><span class="linenos">1727</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-1728"><a href="#Parser-1728"><span class="linenos">1728</span></a>
</span><span id="Parser-1729"><a href="#Parser-1729"><span class="linenos">1729</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_comment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">allow_exists</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="Parser-1730"><a href="#Parser-1730"><span class="linenos">1730</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-1731"><a href="#Parser-1731"><span class="linenos">1731</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span> <span class="k">if</span> <span class="n">allow_exists</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-1732"><a href="#Parser-1732"><span class="linenos">1732</span></a>
</span><span id="Parser-1733"><a href="#Parser-1733"><span class="linenos">1733</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
</span><span id="Parser-1734"><a href="#Parser-1734"><span class="linenos">1734</span></a>
</span><span id="Parser-1735"><a href="#Parser-1735"><span class="linenos">1735</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">)</span>
</span><span id="Parser-1736"><a href="#Parser-1736"><span class="linenos">1736</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-1737"><a href="#Parser-1737"><span class="linenos">1737</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
</span><span id="Parser-1738"><a href="#Parser-1738"><span class="linenos">1738</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="Parser-1739"><a href="#Parser-1739"><span class="linenos">1739</span></a>
</span><span id="Parser-1740"><a href="#Parser-1740"><span class="linenos">1740</span></a> <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">):</span>
</span><span id="Parser-1741"><a href="#Parser-1741"><span class="linenos">1741</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">token_type</span><span class="p">)</span>
</span><span id="Parser-1742"><a href="#Parser-1742"><span class="linenos">1742</span></a> <span class="k">elif</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">:</span>
</span><span id="Parser-1743"><a href="#Parser-1743"><span class="linenos">1743</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">alias_tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">COMMENT_TABLE_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="Parser-1744"><a href="#Parser-1744"><span class="linenos">1744</span></a> <span class="k">elif</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">:</span>
</span><span id="Parser-1745"><a href="#Parser-1745"><span class="linenos">1745</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-1746"><a href="#Parser-1746"><span class="linenos">1746</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-1747"><a href="#Parser-1747"><span class="linenos">1747</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-1748"><a href="#Parser-1748"><span class="linenos">1748</span></a>
</span><span id="Parser-1749"><a href="#Parser-1749"><span class="linenos">1749</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">)</span>
</span><span id="Parser-1750"><a href="#Parser-1750"><span class="linenos">1750</span></a>
</span><span id="Parser-1751"><a href="#Parser-1751"><span class="linenos">1751</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1752"><a href="#Parser-1752"><span class="linenos">1752</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comment</span><span class="p">,</span>
</span><span id="Parser-1753"><a href="#Parser-1753"><span class="linenos">1753</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-1754"><a href="#Parser-1754"><span class="linenos">1754</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
</span><span id="Parser-1755"><a href="#Parser-1755"><span class="linenos">1755</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="Parser-1756"><a href="#Parser-1756"><span class="linenos">1756</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
</span><span id="Parser-1757"><a href="#Parser-1757"><span class="linenos">1757</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
</span><span id="Parser-1758"><a href="#Parser-1758"><span class="linenos">1758</span></a> <span class="p">)</span>
</span><span id="Parser-1759"><a href="#Parser-1759"><span class="linenos">1759</span></a>
</span><span id="Parser-1760"><a href="#Parser-1760"><span class="linenos">1760</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_to_table</span><span class="p">(</span>
</span><span id="Parser-1761"><a href="#Parser-1761"><span class="linenos">1761</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-1762"><a href="#Parser-1762"><span class="linenos">1762</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">:</span>
</span><span id="Parser-1763"><a href="#Parser-1763"><span class="linenos">1763</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-1764"><a href="#Parser-1764"><span class="linenos">1764</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ToTableProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">)</span>
</span><span id="Parser-1765"><a href="#Parser-1765"><span class="linenos">1765</span></a>
</span><span id="Parser-1766"><a href="#Parser-1766"><span class="linenos">1766</span></a> <span class="c1"># https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree#mergetree-table-ttl</span>
</span><span id="Parser-1767"><a href="#Parser-1767"><span class="linenos">1767</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_ttl</span><span class="p">(</span><span class="bp">self</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="Parser-1768"><a href="#Parser-1768"><span class="linenos">1768</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_ttl_action</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-1769"><a href="#Parser-1769"><span class="linenos">1769</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-1770"><a href="#Parser-1770"><span class="linenos">1770</span></a>
</span><span id="Parser-1771"><a href="#Parser-1771"><span class="linenos">1771</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DELETE&quot;</span><span class="p">):</span>
</span><span id="Parser-1772"><a href="#Parser-1772"><span class="linenos">1772</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</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">delete</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-1773"><a href="#Parser-1773"><span class="linenos">1773</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RECOMPRESS&quot;</span><span class="p">):</span>
</span><span id="Parser-1774"><a href="#Parser-1774"><span class="linenos">1774</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1775"><a href="#Parser-1775"><span class="linenos">1775</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</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">recompress</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-1776"><a href="#Parser-1776"><span class="linenos">1776</span></a> <span class="p">)</span>
</span><span id="Parser-1777"><a href="#Parser-1777"><span class="linenos">1777</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;DISK&quot;</span><span class="p">):</span>
</span><span id="Parser-1778"><a href="#Parser-1778"><span class="linenos">1778</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1779"><a href="#Parser-1779"><span class="linenos">1779</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</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">to_disk</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-1780"><a href="#Parser-1780"><span class="linenos">1780</span></a> <span class="p">)</span>
</span><span id="Parser-1781"><a href="#Parser-1781"><span class="linenos">1781</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;VOLUME&quot;</span><span class="p">):</span>
</span><span id="Parser-1782"><a href="#Parser-1782"><span class="linenos">1782</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1783"><a href="#Parser-1783"><span class="linenos">1783</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTLAction</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">to_volume</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-1784"><a href="#Parser-1784"><span class="linenos">1784</span></a> <span class="p">)</span>
</span><span id="Parser-1785"><a href="#Parser-1785"><span class="linenos">1785</span></a>
</span><span id="Parser-1786"><a href="#Parser-1786"><span class="linenos">1786</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-1787"><a href="#Parser-1787"><span class="linenos">1787</span></a>
</span><span id="Parser-1788"><a href="#Parser-1788"><span class="linenos">1788</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_ttl_action</span><span class="p">)</span>
</span><span id="Parser-1789"><a href="#Parser-1789"><span class="linenos">1789</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">()</span>
</span><span id="Parser-1790"><a href="#Parser-1790"><span class="linenos">1790</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
</span><span id="Parser-1791"><a href="#Parser-1791"><span class="linenos">1791</span></a>
</span><span id="Parser-1792"><a href="#Parser-1792"><span class="linenos">1792</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1793"><a href="#Parser-1793"><span class="linenos">1793</span></a> <span class="k">if</span> <span class="n">group</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">):</span>
</span><span id="Parser-1794"><a href="#Parser-1794"><span class="linenos">1794</span></a> <span class="n">aggregates</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item</span><span class="p">)</span>
</span><span id="Parser-1795"><a href="#Parser-1795"><span class="linenos">1795</span></a>
</span><span id="Parser-1796"><a href="#Parser-1796"><span class="linenos">1796</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1797"><a href="#Parser-1797"><span class="linenos">1797</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeTreeTTL</span><span class="p">,</span>
</span><span id="Parser-1798"><a href="#Parser-1798"><span class="linenos">1798</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-1799"><a href="#Parser-1799"><span class="linenos">1799</span></a> <span class="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
</span><span id="Parser-1800"><a href="#Parser-1800"><span class="linenos">1800</span></a> <span class="n">group</span><span class="o">=</span><span class="n">group</span><span class="p">,</span>
</span><span id="Parser-1801"><a href="#Parser-1801"><span class="linenos">1801</span></a> <span class="n">aggregates</span><span class="o">=</span><span class="n">aggregates</span><span class="p">,</span>
</span><span id="Parser-1802"><a href="#Parser-1802"><span class="linenos">1802</span></a> <span class="p">)</span>
</span><span id="Parser-1803"><a href="#Parser-1803"><span class="linenos">1803</span></a>
</span><span id="Parser-1804"><a href="#Parser-1804"><span class="linenos">1804</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_statement</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-1805"><a href="#Parser-1805"><span class="linenos">1805</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-1806"><a href="#Parser-1806"><span class="linenos">1806</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-1807"><a href="#Parser-1807"><span class="linenos">1807</span></a>
</span><span id="Parser-1808"><a href="#Parser-1808"><span class="linenos">1808</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">):</span>
</span><span id="Parser-1809"><a href="#Parser-1809"><span class="linenos">1809</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="Parser-1810"><a href="#Parser-1810"><span class="linenos">1810</span></a> <span class="n">stmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="Parser-1811"><a href="#Parser-1811"><span class="linenos">1811</span></a> <span class="n">stmt</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">,</span> <span class="n">prepend</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-1812"><a href="#Parser-1812"><span class="linenos">1812</span></a> <span class="k">return</span> <span class="n">stmt</span>
</span><span id="Parser-1813"><a href="#Parser-1813"><span class="linenos">1813</span></a>
</span><span id="Parser-1814"><a href="#Parser-1814"><span class="linenos">1814</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenizer</span><span class="o">.</span><span class="n">COMMANDS</span><span class="p">):</span>
</span><span id="Parser-1815"><a href="#Parser-1815"><span class="linenos">1815</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_command</span><span class="p">()</span>
</span><span id="Parser-1816"><a href="#Parser-1816"><span class="linenos">1816</span></a>
</span><span id="Parser-1817"><a href="#Parser-1817"><span class="linenos">1817</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
</span><span id="Parser-1818"><a href="#Parser-1818"><span class="linenos">1818</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
</span><span id="Parser-1819"><a href="#Parser-1819"><span class="linenos">1819</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Parser-1820"><a href="#Parser-1820"><span class="linenos">1820</span></a>
</span><span id="Parser-1821"><a href="#Parser-1821"><span class="linenos">1821</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_drop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</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">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="Parser-1822"><a href="#Parser-1822"><span class="linenos">1822</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-1823"><a href="#Parser-1823"><span class="linenos">1823</span></a> <span class="n">temporary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">)</span>
</span><span id="Parser-1824"><a href="#Parser-1824"><span class="linenos">1824</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">)</span>
</span><span id="Parser-1825"><a href="#Parser-1825"><span class="linenos">1825</span></a>
</span><span id="Parser-1826"><a href="#Parser-1826"><span class="linenos">1826</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-1827"><a href="#Parser-1827"><span class="linenos">1827</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
</span><span id="Parser-1828"><a href="#Parser-1828"><span class="linenos">1828</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="Parser-1829"><a href="#Parser-1829"><span class="linenos">1829</span></a>
</span><span id="Parser-1830"><a href="#Parser-1830"><span class="linenos">1830</span></a> <span class="n">concurrently</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONCURRENTLY&quot;</span><span class="p">)</span>
</span><span id="Parser-1831"><a href="#Parser-1831"><span class="linenos">1831</span></a> <span class="n">if_exists</span> <span class="o">=</span> <span class="n">exists</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
</span><span id="Parser-1832"><a href="#Parser-1832"><span class="linenos">1832</span></a>
</span><span id="Parser-1833"><a href="#Parser-1833"><span class="linenos">1833</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;COLUMN&quot;</span><span class="p">:</span>
</span><span id="Parser-1834"><a href="#Parser-1834"><span class="linenos">1834</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-1835"><a href="#Parser-1835"><span class="linenos">1835</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-1836"><a href="#Parser-1836"><span class="linenos">1836</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span>
</span><span id="Parser-1837"><a href="#Parser-1837"><span class="linenos">1837</span></a> <span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span>
</span><span id="Parser-1838"><a href="#Parser-1838"><span class="linenos">1838</span></a> <span class="p">)</span>
</span><span id="Parser-1839"><a href="#Parser-1839"><span class="linenos">1839</span></a>
</span><span id="Parser-1840"><a href="#Parser-1840"><span class="linenos">1840</span></a> <span class="n">cluster</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_property</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-1841"><a href="#Parser-1841"><span class="linenos">1841</span></a>
</span><span id="Parser-1842"><a href="#Parser-1842"><span class="linenos">1842</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-1843"><a href="#Parser-1843"><span class="linenos">1843</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">)</span>
</span><span id="Parser-1844"><a href="#Parser-1844"><span class="linenos">1844</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-1845"><a href="#Parser-1845"><span class="linenos">1845</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1846"><a href="#Parser-1846"><span class="linenos">1846</span></a>
</span><span id="Parser-1847"><a href="#Parser-1847"><span class="linenos">1847</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-1848"><a href="#Parser-1848"><span class="linenos">1848</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
</span><span id="Parser-1849"><a href="#Parser-1849"><span class="linenos">1849</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">if_exists</span><span class="p">,</span>
</span><span id="Parser-1850"><a href="#Parser-1850"><span class="linenos">1850</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-1851"><a href="#Parser-1851"><span class="linenos">1851</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-1852"><a href="#Parser-1852"><span class="linenos">1852</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">CREATABLE_KIND_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">kind</span><span class="p">)</span> <span class="ow">or</span> <span class="n">kind</span><span class="p">,</span>
</span><span id="Parser-1853"><a href="#Parser-1853"><span class="linenos">1853</span></a> <span class="n">temporary</span><span class="o">=</span><span class="n">temporary</span><span class="p">,</span>
</span><span id="Parser-1854"><a href="#Parser-1854"><span class="linenos">1854</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
</span><span id="Parser-1855"><a href="#Parser-1855"><span class="linenos">1855</span></a> <span class="n">cascade</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">),</span>
</span><span id="Parser-1856"><a href="#Parser-1856"><span class="linenos">1856</span></a> <span class="n">constraints</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONSTRAINTS&quot;</span><span class="p">),</span>
</span><span id="Parser-1857"><a href="#Parser-1857"><span class="linenos">1857</span></a> <span class="n">purge</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PURGE&quot;</span><span class="p">),</span>
</span><span id="Parser-1858"><a href="#Parser-1858"><span class="linenos">1858</span></a> <span class="n">cluster</span><span class="o">=</span><span class="n">cluster</span><span class="p">,</span>
</span><span id="Parser-1859"><a href="#Parser-1859"><span class="linenos">1859</span></a> <span class="n">concurrently</span><span class="o">=</span><span class="n">concurrently</span><span class="p">,</span>
</span><span id="Parser-1860"><a href="#Parser-1860"><span class="linenos">1860</span></a> <span class="p">)</span>
</span><span id="Parser-1861"><a href="#Parser-1861"><span class="linenos">1861</span></a>
</span><span id="Parser-1862"><a href="#Parser-1862"><span class="linenos">1862</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">not_</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">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]:</span>
</span><span id="Parser-1863"><a href="#Parser-1863"><span class="linenos">1863</span></a> <span class="k">return</span> <span class="p">(</span>
</span><span id="Parser-1864"><a href="#Parser-1864"><span class="linenos">1864</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">)</span>
</span><span id="Parser-1865"><a href="#Parser-1865"><span class="linenos">1865</span></a> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">not_</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">))</span>
</span><span id="Parser-1866"><a href="#Parser-1866"><span class="linenos">1866</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">)</span>
</span><span id="Parser-1867"><a href="#Parser-1867"><span class="linenos">1867</span></a> <span class="p">)</span>
</span><span id="Parser-1868"><a href="#Parser-1868"><span class="linenos">1868</span></a>
</span><span id="Parser-1869"><a href="#Parser-1869"><span class="linenos">1869</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_create</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="Parser-1870"><a href="#Parser-1870"><span class="linenos">1870</span></a> <span class="c1"># Note: this can&#39;t be None because we&#39;ve matched a statement parser</span>
</span><span id="Parser-1871"><a href="#Parser-1871"><span class="linenos">1871</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-1872"><a href="#Parser-1872"><span class="linenos">1872</span></a>
</span><span id="Parser-1873"><a href="#Parser-1873"><span class="linenos">1873</span></a> <span class="n">replace</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-1874"><a href="#Parser-1874"><span class="linenos">1874</span></a> <span class="n">start</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span>
</span><span id="Parser-1875"><a href="#Parser-1875"><span class="linenos">1875</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">)</span>
</span><span id="Parser-1876"><a href="#Parser-1876"><span class="linenos">1876</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALTER</span><span class="p">)</span>
</span><span id="Parser-1877"><a href="#Parser-1877"><span class="linenos">1877</span></a> <span class="p">)</span>
</span><span id="Parser-1878"><a href="#Parser-1878"><span class="linenos">1878</span></a> <span class="n">refresh</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">REFRESH</span><span class="p">)</span>
</span><span id="Parser-1879"><a href="#Parser-1879"><span class="linenos">1879</span></a>
</span><span id="Parser-1880"><a href="#Parser-1880"><span class="linenos">1880</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">)</span>
</span><span id="Parser-1881"><a href="#Parser-1881"><span class="linenos">1881</span></a>
</span><span id="Parser-1882"><a href="#Parser-1882"><span class="linenos">1882</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CLUSTERED&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNSTORE&quot;</span><span class="p">):</span>
</span><span id="Parser-1883"><a href="#Parser-1883"><span class="linenos">1883</span></a> <span class="n">clustered</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-1884"><a href="#Parser-1884"><span class="linenos">1884</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NONCLUSTERED&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNSTORE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
</span><span id="Parser-1885"><a href="#Parser-1885"><span class="linenos">1885</span></a> <span class="s2">&quot;COLUMNSTORE&quot;</span>
</span><span id="Parser-1886"><a href="#Parser-1886"><span class="linenos">1886</span></a> <span class="p">):</span>
</span><span id="Parser-1887"><a href="#Parser-1887"><span class="linenos">1887</span></a> <span class="n">clustered</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-1888"><a href="#Parser-1888"><span class="linenos">1888</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-1889"><a href="#Parser-1889"><span class="linenos">1889</span></a> <span class="n">clustered</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1890"><a href="#Parser-1890"><span class="linenos">1890</span></a>
</span><span id="Parser-1891"><a href="#Parser-1891"><span class="linenos">1891</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-1892"><a href="#Parser-1892"><span class="linenos">1892</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-1893"><a href="#Parser-1893"><span class="linenos">1893</span></a>
</span><span id="Parser-1894"><a href="#Parser-1894"><span class="linenos">1894</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1895"><a href="#Parser-1895"><span class="linenos">1895</span></a> <span class="n">create_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-1896"><a href="#Parser-1896"><span class="linenos">1896</span></a>
</span><span id="Parser-1897"><a href="#Parser-1897"><span class="linenos">1897</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">create_token</span><span class="p">:</span>
</span><span id="Parser-1898"><a href="#Parser-1898"><span class="linenos">1898</span></a> <span class="c1"># exp.Properties.Location.POST_CREATE</span>
</span><span id="Parser-1899"><a href="#Parser-1899"><span class="linenos">1899</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
</span><span id="Parser-1900"><a href="#Parser-1900"><span class="linenos">1900</span></a> <span class="n">create_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-1901"><a href="#Parser-1901"><span class="linenos">1901</span></a>
</span><span id="Parser-1902"><a href="#Parser-1902"><span class="linenos">1902</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">properties</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">create_token</span><span class="p">:</span>
</span><span id="Parser-1903"><a href="#Parser-1903"><span class="linenos">1903</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="Parser-1904"><a href="#Parser-1904"><span class="linenos">1904</span></a>
</span><span id="Parser-1905"><a href="#Parser-1905"><span class="linenos">1905</span></a> <span class="n">concurrently</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONCURRENTLY&quot;</span><span class="p">)</span>
</span><span id="Parser-1906"><a href="#Parser-1906"><span class="linenos">1906</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-1907"><a href="#Parser-1907"><span class="linenos">1907</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1908"><a href="#Parser-1908"><span class="linenos">1908</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1909"><a href="#Parser-1909"><span class="linenos">1909</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1910"><a href="#Parser-1910"><span class="linenos">1910</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1911"><a href="#Parser-1911"><span class="linenos">1911</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1912"><a href="#Parser-1912"><span class="linenos">1912</span></a> <span class="n">end</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1913"><a href="#Parser-1913"><span class="linenos">1913</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1914"><a href="#Parser-1914"><span class="linenos">1914</span></a>
</span><span id="Parser-1915"><a href="#Parser-1915"><span class="linenos">1915</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">extend_props</span><span class="p">(</span><span class="n">temp_props</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">Properties</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-1916"><a href="#Parser-1916"><span class="linenos">1916</span></a> <span class="k">nonlocal</span> <span class="n">properties</span>
</span><span id="Parser-1917"><a href="#Parser-1917"><span class="linenos">1917</span></a> <span class="k">if</span> <span class="n">properties</span> <span class="ow">and</span> <span class="n">temp_props</span><span class="p">:</span>
</span><span id="Parser-1918"><a href="#Parser-1918"><span class="linenos">1918</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">temp_props</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-1919"><a href="#Parser-1919"><span class="linenos">1919</span></a> <span class="k">elif</span> <span class="n">temp_props</span><span class="p">:</span>
</span><span id="Parser-1920"><a href="#Parser-1920"><span class="linenos">1920</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="n">temp_props</span>
</span><span id="Parser-1921"><a href="#Parser-1921"><span class="linenos">1921</span></a>
</span><span id="Parser-1922"><a href="#Parser-1922"><span class="linenos">1922</span></a> <span class="k">if</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PROCEDURE</span><span class="p">):</span>
</span><span id="Parser-1923"><a href="#Parser-1923"><span class="linenos">1923</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_user_defined_function</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span><span class="p">)</span>
</span><span id="Parser-1924"><a href="#Parser-1924"><span class="linenos">1924</span></a>
</span><span id="Parser-1925"><a href="#Parser-1925"><span class="linenos">1925</span></a> <span class="c1"># exp.Properties.Location.POST_SCHEMA (&quot;schema&quot; here is the UDF&#39;s type signature)</span>
</span><span id="Parser-1926"><a href="#Parser-1926"><span class="linenos">1926</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="Parser-1927"><a href="#Parser-1927"><span class="linenos">1927</span></a>
</span><span id="Parser-1928"><a href="#Parser-1928"><span class="linenos">1928</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_heredoc</span><span class="p">()</span>
</span><span id="Parser-1929"><a href="#Parser-1929"><span class="linenos">1929</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="Parser-1930"><a href="#Parser-1930"><span class="linenos">1930</span></a>
</span><span id="Parser-1931"><a href="#Parser-1931"><span class="linenos">1931</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="Parser-1932"><a href="#Parser-1932"><span class="linenos">1932</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">):</span>
</span><span id="Parser-1933"><a href="#Parser-1933"><span class="linenos">1933</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-1934"><a href="#Parser-1934"><span class="linenos">1934</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-1935"><a href="#Parser-1935"><span class="linenos">1935</span></a> <span class="n">begin</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BEGIN</span><span class="p">)</span>
</span><span id="Parser-1936"><a href="#Parser-1936"><span class="linenos">1936</span></a> <span class="n">return_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURN&quot;</span><span class="p">)</span>
</span><span id="Parser-1937"><a href="#Parser-1937"><span class="linenos">1937</span></a>
</span><span id="Parser-1938"><a href="#Parser-1938"><span class="linenos">1938</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-1939"><a href="#Parser-1939"><span class="linenos">1939</span></a> <span class="c1"># Takes care of BigQuery&#39;s JavaScript UDF definitions that end in an OPTIONS property</span>
</span><span id="Parser-1940"><a href="#Parser-1940"><span class="linenos">1940</span></a> <span class="c1"># # https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#create_function_statement</span>
</span><span id="Parser-1941"><a href="#Parser-1941"><span class="linenos">1941</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-1942"><a href="#Parser-1942"><span class="linenos">1942</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="Parser-1943"><a href="#Parser-1943"><span class="linenos">1943</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-1944"><a href="#Parser-1944"><span class="linenos">1944</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_user_defined_function_expression</span><span class="p">()</span>
</span><span id="Parser-1945"><a href="#Parser-1945"><span class="linenos">1945</span></a>
</span><span id="Parser-1946"><a href="#Parser-1946"><span class="linenos">1946</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;END&quot;</span><span class="p">)</span>
</span><span id="Parser-1947"><a href="#Parser-1947"><span class="linenos">1947</span></a>
</span><span id="Parser-1948"><a href="#Parser-1948"><span class="linenos">1948</span></a> <span class="k">if</span> <span class="n">return_</span><span class="p">:</span>
</span><span id="Parser-1949"><a href="#Parser-1949"><span class="linenos">1949</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Return</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Parser-1950"><a href="#Parser-1950"><span class="linenos">1950</span></a> <span class="k">elif</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">:</span>
</span><span id="Parser-1951"><a href="#Parser-1951"><span class="linenos">1951</span></a> <span class="c1"># Postgres allows anonymous indexes, eg. CREATE INDEX IF NOT EXISTS ON t(c)</span>
</span><span id="Parser-1952"><a href="#Parser-1952"><span class="linenos">1952</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
</span><span id="Parser-1953"><a href="#Parser-1953"><span class="linenos">1953</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-1954"><a href="#Parser-1954"><span class="linenos">1954</span></a> <span class="n">anonymous</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-1955"><a href="#Parser-1955"><span class="linenos">1955</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-1956"><a href="#Parser-1956"><span class="linenos">1956</span></a> <span class="n">index</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-1957"><a href="#Parser-1957"><span class="linenos">1957</span></a> <span class="n">anonymous</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-1958"><a href="#Parser-1958"><span class="linenos">1958</span></a>
</span><span id="Parser-1959"><a href="#Parser-1959"><span class="linenos">1959</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="n">index</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">)</span>
</span><span id="Parser-1960"><a href="#Parser-1960"><span class="linenos">1960</span></a> <span class="k">elif</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">DB_CREATABLES</span><span class="p">:</span>
</span><span id="Parser-1961"><a href="#Parser-1961"><span class="linenos">1961</span></a> <span class="n">table_parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span>
</span><span id="Parser-1962"><a href="#Parser-1962"><span class="linenos">1962</span></a> <span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span>
</span><span id="Parser-1963"><a href="#Parser-1963"><span class="linenos">1963</span></a> <span class="p">)</span>
</span><span id="Parser-1964"><a href="#Parser-1964"><span class="linenos">1964</span></a>
</span><span id="Parser-1965"><a href="#Parser-1965"><span class="linenos">1965</span></a> <span class="c1"># exp.Properties.Location.POST_NAME</span>
</span><span id="Parser-1966"><a href="#Parser-1966"><span class="linenos">1966</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="Parser-1967"><a href="#Parser-1967"><span class="linenos">1967</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">(</span><span class="n">before</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="Parser-1968"><a href="#Parser-1968"><span class="linenos">1968</span></a>
</span><span id="Parser-1969"><a href="#Parser-1969"><span class="linenos">1969</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">table_parts</span><span class="p">)</span>
</span><span id="Parser-1970"><a href="#Parser-1970"><span class="linenos">1970</span></a>
</span><span id="Parser-1971"><a href="#Parser-1971"><span class="linenos">1971</span></a> <span class="c1"># exp.Properties.Location.POST_SCHEMA and POST_WITH</span>
</span><span id="Parser-1972"><a href="#Parser-1972"><span class="linenos">1972</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="Parser-1973"><a href="#Parser-1973"><span class="linenos">1973</span></a>
</span><span id="Parser-1974"><a href="#Parser-1974"><span class="linenos">1974</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="Parser-1975"><a href="#Parser-1975"><span class="linenos">1975</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">DDL_SELECT_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-1976"><a href="#Parser-1976"><span class="linenos">1976</span></a> <span class="c1"># exp.Properties.Location.POST_ALIAS</span>
</span><span id="Parser-1977"><a href="#Parser-1977"><span class="linenos">1977</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="Parser-1978"><a href="#Parser-1978"><span class="linenos">1978</span></a>
</span><span id="Parser-1979"><a href="#Parser-1979"><span class="linenos">1979</span></a> <span class="k">if</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SEQUENCE</span><span class="p">:</span>
</span><span id="Parser-1980"><a href="#Parser-1980"><span class="linenos">1980</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="Parser-1981"><a href="#Parser-1981"><span class="linenos">1981</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="Parser-1982"><a href="#Parser-1982"><span class="linenos">1982</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-1983"><a href="#Parser-1983"><span class="linenos">1983</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ddl_select</span><span class="p">()</span>
</span><span id="Parser-1984"><a href="#Parser-1984"><span class="linenos">1984</span></a>
</span><span id="Parser-1985"><a href="#Parser-1985"><span class="linenos">1985</span></a> <span class="k">if</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">:</span>
</span><span id="Parser-1986"><a href="#Parser-1986"><span class="linenos">1986</span></a> <span class="c1"># exp.Properties.Location.POST_EXPRESSION</span>
</span><span id="Parser-1987"><a href="#Parser-1987"><span class="linenos">1987</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="Parser-1988"><a href="#Parser-1988"><span class="linenos">1988</span></a>
</span><span id="Parser-1989"><a href="#Parser-1989"><span class="linenos">1989</span></a> <span class="n">indexes</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-1990"><a href="#Parser-1990"><span class="linenos">1990</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-1991"><a href="#Parser-1991"><span class="linenos">1991</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index</span><span class="p">()</span>
</span><span id="Parser-1992"><a href="#Parser-1992"><span class="linenos">1992</span></a>
</span><span id="Parser-1993"><a href="#Parser-1993"><span class="linenos">1993</span></a> <span class="c1"># exp.Properties.Location.POST_INDEX</span>
</span><span id="Parser-1994"><a href="#Parser-1994"><span class="linenos">1994</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="Parser-1995"><a href="#Parser-1995"><span class="linenos">1995</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">index</span><span class="p">:</span>
</span><span id="Parser-1996"><a href="#Parser-1996"><span class="linenos">1996</span></a> <span class="k">break</span>
</span><span id="Parser-1997"><a href="#Parser-1997"><span class="linenos">1997</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-1998"><a href="#Parser-1998"><span class="linenos">1998</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="Parser-1999"><a href="#Parser-1999"><span class="linenos">1999</span></a> <span class="n">indexes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-2000"><a href="#Parser-2000"><span class="linenos">2000</span></a> <span class="k">elif</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">:</span>
</span><span id="Parser-2001"><a href="#Parser-2001"><span class="linenos">2001</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;SCHEMA&quot;</span><span class="p">,</span> <span class="s2">&quot;BINDING&quot;</span><span class="p">):</span>
</span><span id="Parser-2002"><a href="#Parser-2002"><span class="linenos">2002</span></a> <span class="n">no_schema_binding</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-2003"><a href="#Parser-2003"><span class="linenos">2003</span></a> <span class="k">elif</span> <span class="n">create_token</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SINK</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SOURCE</span><span class="p">):</span>
</span><span id="Parser-2004"><a href="#Parser-2004"><span class="linenos">2004</span></a> <span class="n">extend_props</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">())</span>
</span><span id="Parser-2005"><a href="#Parser-2005"><span class="linenos">2005</span></a>
</span><span id="Parser-2006"><a href="#Parser-2006"><span class="linenos">2006</span></a> <span class="n">shallow</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SHALLOW&quot;</span><span class="p">)</span>
</span><span id="Parser-2007"><a href="#Parser-2007"><span class="linenos">2007</span></a>
</span><span id="Parser-2008"><a href="#Parser-2008"><span class="linenos">2008</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CLONE_KEYWORDS</span><span class="p">):</span>
</span><span id="Parser-2009"><a href="#Parser-2009"><span class="linenos">2009</span></a> <span class="n">copy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;copy&quot;</span>
</span><span id="Parser-2010"><a href="#Parser-2010"><span class="linenos">2010</span></a> <span class="n">clone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2011"><a href="#Parser-2011"><span class="linenos">2011</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Clone</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">shallow</span><span class="o">=</span><span class="n">shallow</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="n">copy</span>
</span><span id="Parser-2012"><a href="#Parser-2012"><span class="linenos">2012</span></a> <span class="p">)</span>
</span><span id="Parser-2013"><a href="#Parser-2013"><span class="linenos">2013</span></a>
</span><span id="Parser-2014"><a href="#Parser-2014"><span class="linenos">2014</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-2015"><a href="#Parser-2015"><span class="linenos">2015</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="Parser-2016"><a href="#Parser-2016"><span class="linenos">2016</span></a>
</span><span id="Parser-2017"><a href="#Parser-2017"><span class="linenos">2017</span></a> <span class="n">create_kind_text</span> <span class="o">=</span> <span class="n">create_token</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-2018"><a href="#Parser-2018"><span class="linenos">2018</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2019"><a href="#Parser-2019"><span class="linenos">2019</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">,</span>
</span><span id="Parser-2020"><a href="#Parser-2020"><span class="linenos">2020</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-2021"><a href="#Parser-2021"><span class="linenos">2021</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">CREATABLE_KIND_MAPPING</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">create_kind_text</span><span class="p">)</span> <span class="ow">or</span> <span class="n">create_kind_text</span><span class="p">,</span>
</span><span id="Parser-2022"><a href="#Parser-2022"><span class="linenos">2022</span></a> <span class="n">replace</span><span class="o">=</span><span class="n">replace</span><span class="p">,</span>
</span><span id="Parser-2023"><a href="#Parser-2023"><span class="linenos">2023</span></a> <span class="n">refresh</span><span class="o">=</span><span class="n">refresh</span><span class="p">,</span>
</span><span id="Parser-2024"><a href="#Parser-2024"><span class="linenos">2024</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
</span><span id="Parser-2025"><a href="#Parser-2025"><span class="linenos">2025</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="Parser-2026"><a href="#Parser-2026"><span class="linenos">2026</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
</span><span id="Parser-2027"><a href="#Parser-2027"><span class="linenos">2027</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties</span><span class="p">,</span>
</span><span id="Parser-2028"><a href="#Parser-2028"><span class="linenos">2028</span></a> <span class="n">indexes</span><span class="o">=</span><span class="n">indexes</span><span class="p">,</span>
</span><span id="Parser-2029"><a href="#Parser-2029"><span class="linenos">2029</span></a> <span class="n">no_schema_binding</span><span class="o">=</span><span class="n">no_schema_binding</span><span class="p">,</span>
</span><span id="Parser-2030"><a href="#Parser-2030"><span class="linenos">2030</span></a> <span class="n">begin</span><span class="o">=</span><span class="n">begin</span><span class="p">,</span>
</span><span id="Parser-2031"><a href="#Parser-2031"><span class="linenos">2031</span></a> <span class="n">end</span><span class="o">=</span><span class="n">end</span><span class="p">,</span>
</span><span id="Parser-2032"><a href="#Parser-2032"><span class="linenos">2032</span></a> <span class="n">clone</span><span class="o">=</span><span class="n">clone</span><span class="p">,</span>
</span><span id="Parser-2033"><a href="#Parser-2033"><span class="linenos">2033</span></a> <span class="n">concurrently</span><span class="o">=</span><span class="n">concurrently</span><span class="p">,</span>
</span><span id="Parser-2034"><a href="#Parser-2034"><span class="linenos">2034</span></a> <span class="n">clustered</span><span class="o">=</span><span class="n">clustered</span><span class="p">,</span>
</span><span id="Parser-2035"><a href="#Parser-2035"><span class="linenos">2035</span></a> <span class="p">)</span>
</span><span id="Parser-2036"><a href="#Parser-2036"><span class="linenos">2036</span></a>
</span><span id="Parser-2037"><a href="#Parser-2037"><span class="linenos">2037</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_sequence_properties</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">SequenceProperties</span><span class="p">]:</span>
</span><span id="Parser-2038"><a href="#Parser-2038"><span class="linenos">2038</span></a> <span class="n">seq</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">SequenceProperties</span><span class="p">()</span>
</span><span id="Parser-2039"><a href="#Parser-2039"><span class="linenos">2039</span></a>
</span><span id="Parser-2040"><a href="#Parser-2040"><span class="linenos">2040</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-2041"><a href="#Parser-2041"><span class="linenos">2041</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-2042"><a href="#Parser-2042"><span class="linenos">2042</span></a>
</span><span id="Parser-2043"><a href="#Parser-2043"><span class="linenos">2043</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-2044"><a href="#Parser-2044"><span class="linenos">2044</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="Parser-2045"><a href="#Parser-2045"><span class="linenos">2045</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">):</span>
</span><span id="Parser-2046"><a href="#Parser-2046"><span class="linenos">2046</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span>
</span><span id="Parser-2047"><a href="#Parser-2047"><span class="linenos">2047</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;=&quot;</span><span class="p">)</span>
</span><span id="Parser-2048"><a href="#Parser-2048"><span class="linenos">2048</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
</span><span id="Parser-2049"><a href="#Parser-2049"><span class="linenos">2049</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</span><span class="p">):</span>
</span><span id="Parser-2050"><a href="#Parser-2050"><span class="linenos">2050</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
</span><span id="Parser-2051"><a href="#Parser-2051"><span class="linenos">2051</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAXVALUE&quot;</span><span class="p">):</span>
</span><span id="Parser-2052"><a href="#Parser-2052"><span class="linenos">2052</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
</span><span id="Parser-2053"><a href="#Parser-2053"><span class="linenos">2053</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">):</span>
</span><span id="Parser-2054"><a href="#Parser-2054"><span class="linenos">2054</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;=&quot;</span><span class="p">)</span>
</span><span id="Parser-2055"><a href="#Parser-2055"><span class="linenos">2055</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
</span><span id="Parser-2056"><a href="#Parser-2056"><span class="linenos">2056</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CACHE&quot;</span><span class="p">):</span>
</span><span id="Parser-2057"><a href="#Parser-2057"><span class="linenos">2057</span></a> <span class="c1"># T-SQL allows empty CACHE which is initialized dynamically</span>
</span><span id="Parser-2058"><a href="#Parser-2058"><span class="linenos">2058</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cache&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span> <span class="ow">or</span> <span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2059"><a href="#Parser-2059"><span class="linenos">2059</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OWNED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="Parser-2060"><a href="#Parser-2060"><span class="linenos">2060</span></a> <span class="c1"># &quot;OWNED BY NONE&quot; is the default</span>
</span><span id="Parser-2061"><a href="#Parser-2061"><span class="linenos">2061</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;owned&quot;</span><span class="p">,</span> <span class="kc">None</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NONE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">())</span>
</span><span id="Parser-2062"><a href="#Parser-2062"><span class="linenos">2062</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2063"><a href="#Parser-2063"><span class="linenos">2063</span></a> <span class="n">opt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATE_SEQUENCE</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-2064"><a href="#Parser-2064"><span class="linenos">2064</span></a> <span class="k">if</span> <span class="n">opt</span><span class="p">:</span>
</span><span id="Parser-2065"><a href="#Parser-2065"><span class="linenos">2065</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">opt</span><span class="p">)</span>
</span><span id="Parser-2066"><a href="#Parser-2066"><span class="linenos">2066</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2067"><a href="#Parser-2067"><span class="linenos">2067</span></a> <span class="k">break</span>
</span><span id="Parser-2068"><a href="#Parser-2068"><span class="linenos">2068</span></a>
</span><span id="Parser-2069"><a href="#Parser-2069"><span class="linenos">2069</span></a> <span class="n">seq</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="n">options</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="Parser-2070"><a href="#Parser-2070"><span class="linenos">2070</span></a> <span class="k">return</span> <span class="kc">None</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">==</span> <span class="n">index</span> <span class="k">else</span> <span class="n">seq</span>
</span><span id="Parser-2071"><a href="#Parser-2071"><span class="linenos">2071</span></a>
</span><span id="Parser-2072"><a href="#Parser-2072"><span class="linenos">2072</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_property_before</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-2073"><a href="#Parser-2073"><span class="linenos">2073</span></a> <span class="c1"># only used for teradata currently</span>
</span><span id="Parser-2074"><a href="#Parser-2074"><span class="linenos">2074</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="Parser-2075"><a href="#Parser-2075"><span class="linenos">2075</span></a>
</span><span id="Parser-2076"><a href="#Parser-2076"><span class="linenos">2076</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Parser-2077"><a href="#Parser-2077"><span class="linenos">2077</span></a> <span class="s2">&quot;no&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">),</span>
</span><span id="Parser-2078"><a href="#Parser-2078"><span class="linenos">2078</span></a> <span class="s2">&quot;dual&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DUAL&quot;</span><span class="p">),</span>
</span><span id="Parser-2079"><a href="#Parser-2079"><span class="linenos">2079</span></a> <span class="s2">&quot;before&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BEFORE&quot;</span><span class="p">),</span>
</span><span id="Parser-2080"><a href="#Parser-2080"><span class="linenos">2080</span></a> <span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFAULT&quot;</span><span class="p">),</span>
</span><span id="Parser-2081"><a href="#Parser-2081"><span class="linenos">2081</span></a> <span class="s2">&quot;local&quot;</span><span class="p">:</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span>
</span><span id="Parser-2082"><a href="#Parser-2082"><span class="linenos">2082</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;NOT LOCAL&quot;</span><span class="p">),</span>
</span><span id="Parser-2083"><a href="#Parser-2083"><span class="linenos">2083</span></a> <span class="s2">&quot;after&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AFTER&quot;</span><span class="p">),</span>
</span><span id="Parser-2084"><a href="#Parser-2084"><span class="linenos">2084</span></a> <span class="s2">&quot;minimum&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MIN&quot;</span><span class="p">,</span> <span class="s2">&quot;MINIMUM&quot;</span><span class="p">)),</span>
</span><span id="Parser-2085"><a href="#Parser-2085"><span class="linenos">2085</span></a> <span class="s2">&quot;maximum&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MAXIMUM&quot;</span><span class="p">)),</span>
</span><span id="Parser-2086"><a href="#Parser-2086"><span class="linenos">2086</span></a> <span class="p">}</span>
</span><span id="Parser-2087"><a href="#Parser-2087"><span class="linenos">2087</span></a>
</span><span id="Parser-2088"><a href="#Parser-2088"><span class="linenos">2088</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">):</span>
</span><span id="Parser-2089"><a href="#Parser-2089"><span class="linenos">2089</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()]</span>
</span><span id="Parser-2090"><a href="#Parser-2090"><span class="linenos">2090</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="Parser-2091"><a href="#Parser-2091"><span class="linenos">2091</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</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">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">v</span><span class="p">})</span>
</span><span id="Parser-2092"><a href="#Parser-2092"><span class="linenos">2092</span></a> <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
</span><span id="Parser-2093"><a href="#Parser-2093"><span class="linenos">2093</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot parse property &#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
</span><span id="Parser-2094"><a href="#Parser-2094"><span class="linenos">2094</span></a>
</span><span id="Parser-2095"><a href="#Parser-2095"><span class="linenos">2095</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2096"><a href="#Parser-2096"><span class="linenos">2096</span></a>
</span><span id="Parser-2097"><a href="#Parser-2097"><span class="linenos">2097</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_wrapped_properties</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-2098"><a href="#Parser-2098"><span class="linenos">2098</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">)</span>
</span><span id="Parser-2099"><a href="#Parser-2099"><span class="linenos">2099</span></a>
</span><span id="Parser-2100"><a href="#Parser-2100"><span class="linenos">2100</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-2101"><a href="#Parser-2101"><span class="linenos">2101</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">):</span>
</span><span id="Parser-2102"><a href="#Parser-2102"><span class="linenos">2102</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="Parser-2103"><a href="#Parser-2103"><span class="linenos">2103</span></a>
</span><span id="Parser-2104"><a href="#Parser-2104"><span class="linenos">2104</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">):</span>
</span><span id="Parser-2105"><a href="#Parser-2105"><span class="linenos">2105</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROPERTY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2106"><a href="#Parser-2106"><span class="linenos">2106</span></a>
</span><span id="Parser-2107"><a href="#Parser-2107"><span class="linenos">2107</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COMPOUND&quot;</span><span class="p">,</span> <span class="s2">&quot;SORTKEY&quot;</span><span class="p">):</span>
</span><span id="Parser-2108"><a href="#Parser-2108"><span class="linenos">2108</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sortkey</span><span class="p">(</span><span class="n">compound</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2109"><a href="#Parser-2109"><span class="linenos">2109</span></a>
</span><span id="Parser-2110"><a href="#Parser-2110"><span class="linenos">2110</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SQL&quot;</span><span class="p">,</span> <span class="s2">&quot;SECURITY&quot;</span><span class="p">):</span>
</span><span id="Parser-2111"><a href="#Parser-2111"><span class="linenos">2111</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlSecurityProperty</span><span class="p">,</span> <span class="n">definer</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFINER&quot;</span><span class="p">))</span>
</span><span id="Parser-2112"><a href="#Parser-2112"><span class="linenos">2112</span></a>
</span><span id="Parser-2113"><a href="#Parser-2113"><span class="linenos">2113</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-2114"><a href="#Parser-2114"><span class="linenos">2114</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-2115"><a href="#Parser-2115"><span class="linenos">2115</span></a>
</span><span id="Parser-2116"><a href="#Parser-2116"><span class="linenos">2116</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">):</span>
</span><span id="Parser-2117"><a href="#Parser-2117"><span class="linenos">2117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-2118"><a href="#Parser-2118"><span class="linenos">2118</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_sequence_properties</span><span class="p">()</span>
</span><span id="Parser-2119"><a href="#Parser-2119"><span class="linenos">2119</span></a>
</span><span id="Parser-2120"><a href="#Parser-2120"><span class="linenos">2120</span></a> <span class="c1"># Transform the key to exp.Dot if it&#39;s dotted identifiers wrapped in exp.Column or to exp.Var otherwise</span>
</span><span id="Parser-2121"><a href="#Parser-2121"><span class="linenos">2121</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
</span><span id="Parser-2122"><a href="#Parser-2122"><span class="linenos">2122</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">to_dot</span><span class="p">()</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="Parser-2123"><a href="#Parser-2123"><span class="linenos">2123</span></a>
</span><span id="Parser-2124"><a href="#Parser-2124"><span class="linenos">2124</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2125"><a href="#Parser-2125"><span class="linenos">2125</span></a>
</span><span id="Parser-2126"><a href="#Parser-2126"><span class="linenos">2126</span></a> <span class="c1"># Transform the value to exp.Var if it was parsed as exp.Column(exp.Identifier())</span>
</span><span id="Parser-2127"><a href="#Parser-2127"><span class="linenos">2127</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
</span><span id="Parser-2128"><a href="#Parser-2128"><span class="linenos">2128</span></a> <span class="n">value</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">value</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="Parser-2129"><a href="#Parser-2129"><span class="linenos">2129</span></a>
</span><span id="Parser-2130"><a href="#Parser-2130"><span class="linenos">2130</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Property</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
</span><span id="Parser-2131"><a href="#Parser-2131"><span class="linenos">2131</span></a>
</span><span id="Parser-2132"><a href="#Parser-2132"><span class="linenos">2132</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_stored</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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">FileFormatProperty</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">StorageHandlerProperty</span><span class="p">]:</span>
</span><span id="Parser-2133"><a href="#Parser-2133"><span class="linenos">2133</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="Parser-2134"><a href="#Parser-2134"><span class="linenos">2134</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StorageHandlerProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">())</span>
</span><span id="Parser-2135"><a href="#Parser-2135"><span class="linenos">2135</span></a>
</span><span id="Parser-2136"><a href="#Parser-2136"><span class="linenos">2136</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="Parser-2137"><a href="#Parser-2137"><span class="linenos">2137</span></a> <span class="n">input_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INPUTFORMAT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-2138"><a href="#Parser-2138"><span class="linenos">2138</span></a> <span class="n">output_format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUTPUTFORMAT&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-2139"><a href="#Parser-2139"><span class="linenos">2139</span></a>
</span><span id="Parser-2140"><a href="#Parser-2140"><span class="linenos">2140</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2141"><a href="#Parser-2141"><span class="linenos">2141</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">,</span>
</span><span id="Parser-2142"><a href="#Parser-2142"><span class="linenos">2142</span></a> <span class="n">this</span><span class="o">=</span><span class="p">(</span>
</span><span id="Parser-2143"><a href="#Parser-2143"><span class="linenos">2143</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2144"><a href="#Parser-2144"><span class="linenos">2144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">InputOutputFormat</span><span class="p">,</span>
</span><span id="Parser-2145"><a href="#Parser-2145"><span class="linenos">2145</span></a> <span class="n">input_format</span><span class="o">=</span><span class="n">input_format</span><span class="p">,</span>
</span><span id="Parser-2146"><a href="#Parser-2146"><span class="linenos">2146</span></a> <span class="n">output_format</span><span class="o">=</span><span class="n">output_format</span><span class="p">,</span>
</span><span id="Parser-2147"><a href="#Parser-2147"><span class="linenos">2147</span></a> <span class="p">)</span>
</span><span id="Parser-2148"><a href="#Parser-2148"><span class="linenos">2148</span></a> <span class="k">if</span> <span class="n">input_format</span> <span class="ow">or</span> <span class="n">output_format</span>
</span><span id="Parser-2149"><a href="#Parser-2149"><span class="linenos">2149</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-2150"><a href="#Parser-2150"><span class="linenos">2150</span></a> <span class="p">),</span>
</span><span id="Parser-2151"><a href="#Parser-2151"><span class="linenos">2151</span></a> <span class="p">)</span>
</span><span id="Parser-2152"><a href="#Parser-2152"><span class="linenos">2152</span></a>
</span><span id="Parser-2153"><a href="#Parser-2153"><span class="linenos">2153</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unquoted_field</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-2154"><a href="#Parser-2154"><span class="linenos">2154</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
</span><span id="Parser-2155"><a href="#Parser-2155"><span class="linenos">2155</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</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="ow">and</span> <span class="ow">not</span> <span class="n">field</span><span class="o">.</span><span class="n">quoted</span><span class="p">:</span>
</span><span id="Parser-2156"><a href="#Parser-2156"><span class="linenos">2156</span></a> <span class="n">field</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">field</span><span class="p">)</span>
</span><span id="Parser-2157"><a href="#Parser-2157"><span class="linenos">2157</span></a>
</span><span id="Parser-2158"><a href="#Parser-2158"><span class="linenos">2158</span></a> <span class="k">return</span> <span class="n">field</span>
</span><span id="Parser-2159"><a href="#Parser-2159"><span class="linenos">2159</span></a>
</span><span id="Parser-2160"><a href="#Parser-2160"><span class="linenos">2160</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_property_assignment</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <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="o">**</span><span class="n">kwargs</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="n">E</span><span class="p">:</span>
</span><span id="Parser-2161"><a href="#Parser-2161"><span class="linenos">2161</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-2162"><a href="#Parser-2162"><span class="linenos">2162</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="Parser-2163"><a href="#Parser-2163"><span class="linenos">2163</span></a>
</span><span id="Parser-2164"><a href="#Parser-2164"><span class="linenos">2164</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp_class</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unquoted_field</span><span class="p">(),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="Parser-2165"><a href="#Parser-2165"><span class="linenos">2165</span></a>
</span><span id="Parser-2166"><a href="#Parser-2166"><span class="linenos">2166</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">before</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="p">]</span> <span class="o">=</span> <span class="kc">None</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">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">]:</span>
</span><span id="Parser-2167"><a href="#Parser-2167"><span class="linenos">2167</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-2168"><a href="#Parser-2168"><span class="linenos">2168</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-2169"><a href="#Parser-2169"><span class="linenos">2169</span></a> <span class="k">if</span> <span class="n">before</span><span class="p">:</span>
</span><span id="Parser-2170"><a href="#Parser-2170"><span class="linenos">2170</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property_before</span><span class="p">()</span>
</span><span id="Parser-2171"><a href="#Parser-2171"><span class="linenos">2171</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2172"><a href="#Parser-2172"><span class="linenos">2172</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">()</span>
</span><span id="Parser-2173"><a href="#Parser-2173"><span class="linenos">2173</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">prop</span><span class="p">:</span>
</span><span id="Parser-2174"><a href="#Parser-2174"><span class="linenos">2174</span></a> <span class="k">break</span>
</span><span id="Parser-2175"><a href="#Parser-2175"><span class="linenos">2175</span></a> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">prop</span><span class="p">):</span>
</span><span id="Parser-2176"><a href="#Parser-2176"><span class="linenos">2176</span></a> <span class="n">properties</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
</span><span id="Parser-2177"><a href="#Parser-2177"><span class="linenos">2177</span></a>
</span><span id="Parser-2178"><a href="#Parser-2178"><span class="linenos">2178</span></a> <span class="k">if</span> <span class="n">properties</span><span class="p">:</span>
</span><span id="Parser-2179"><a href="#Parser-2179"><span class="linenos">2179</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">properties</span><span class="p">)</span>
</span><span id="Parser-2180"><a href="#Parser-2180"><span class="linenos">2180</span></a>
</span><span id="Parser-2181"><a href="#Parser-2181"><span class="linenos">2181</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2182"><a href="#Parser-2182"><span class="linenos">2182</span></a>
</span><span id="Parser-2183"><a href="#Parser-2183"><span class="linenos">2183</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_fallback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">:</span>
</span><span id="Parser-2184"><a href="#Parser-2184"><span class="linenos">2184</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2185"><a href="#Parser-2185"><span class="linenos">2185</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FallbackProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">protection</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PROTECTION&quot;</span><span class="p">)</span>
</span><span id="Parser-2186"><a href="#Parser-2186"><span class="linenos">2186</span></a> <span class="p">)</span>
</span><span id="Parser-2187"><a href="#Parser-2187"><span class="linenos">2187</span></a>
</span><span id="Parser-2188"><a href="#Parser-2188"><span class="linenos">2188</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_security</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">SecurityProperty</span><span class="p">]:</span>
</span><span id="Parser-2189"><a href="#Parser-2189"><span class="linenos">2189</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;DEFINER&quot;</span><span class="p">,</span> <span class="s2">&quot;INVOKER&quot;</span><span class="p">)):</span>
</span><span id="Parser-2190"><a href="#Parser-2190"><span class="linenos">2190</span></a> <span class="n">security_specifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-2191"><a href="#Parser-2191"><span class="linenos">2191</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SecurityProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">security_specifier</span><span class="p">)</span>
</span><span id="Parser-2192"><a href="#Parser-2192"><span class="linenos">2192</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2193"><a href="#Parser-2193"><span class="linenos">2193</span></a>
</span><span id="Parser-2194"><a href="#Parser-2194"><span class="linenos">2194</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_settings_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">:</span>
</span><span id="Parser-2195"><a href="#Parser-2195"><span class="linenos">2195</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2196"><a href="#Parser-2196"><span class="linenos">2196</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SettingsProperty</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span>
</span><span id="Parser-2197"><a href="#Parser-2197"><span class="linenos">2197</span></a> <span class="p">)</span>
</span><span id="Parser-2198"><a href="#Parser-2198"><span class="linenos">2198</span></a>
</span><span id="Parser-2199"><a href="#Parser-2199"><span class="linenos">2199</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_volatile_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span>
</span><span id="Parser-2200"><a href="#Parser-2200"><span class="linenos">2200</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&gt;=</span> <span class="mi">2</span><span class="p">:</span>
</span><span id="Parser-2201"><a href="#Parser-2201"><span class="linenos">2201</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">2</span><span class="p">]</span>
</span><span id="Parser-2202"><a href="#Parser-2202"><span class="linenos">2202</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2203"><a href="#Parser-2203"><span class="linenos">2203</span></a> <span class="n">pre_volatile_token</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2204"><a href="#Parser-2204"><span class="linenos">2204</span></a>
</span><span id="Parser-2205"><a href="#Parser-2205"><span class="linenos">2205</span></a> <span class="k">if</span> <span class="n">pre_volatile_token</span> <span class="ow">and</span> <span class="n">pre_volatile_token</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRE_VOLATILE_TOKENS</span><span class="p">:</span>
</span><span id="Parser-2206"><a href="#Parser-2206"><span class="linenos">2206</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">VolatileProperty</span><span class="p">()</span>
</span><span id="Parser-2207"><a href="#Parser-2207"><span class="linenos">2207</span></a>
</span><span id="Parser-2208"><a href="#Parser-2208"><span class="linenos">2208</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</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">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;VOLATILE&quot;</span><span class="p">))</span>
</span><span id="Parser-2209"><a href="#Parser-2209"><span class="linenos">2209</span></a>
</span><span id="Parser-2210"><a href="#Parser-2210"><span class="linenos">2210</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_retention_period</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">:</span>
</span><span id="Parser-2211"><a href="#Parser-2211"><span class="linenos">2211</span></a> <span class="c1"># Parse TSQL&#39;s HISTORY_RETENTION_PERIOD: {INFINITE | &lt;number&gt; DAY | DAYS | MONTH ...}</span>
</span><span id="Parser-2212"><a href="#Parser-2212"><span class="linenos">2212</span></a> <span class="n">number</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="Parser-2213"><a href="#Parser-2213"><span class="linenos">2213</span></a> <span class="n">number_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">number</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="k">if</span> <span class="n">number</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
</span><span id="Parser-2214"><a href="#Parser-2214"><span class="linenos">2214</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2215"><a href="#Parser-2215"><span class="linenos">2215</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">number_str</span><span class="si">}{</span><span class="n">unit</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Parser-2216"><a href="#Parser-2216"><span class="linenos">2216</span></a>
</span><span id="Parser-2217"><a href="#Parser-2217"><span class="linenos">2217</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_system_versioning_property</span><span class="p">(</span>
</span><span id="Parser-2218"><a href="#Parser-2218"><span class="linenos">2218</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">with_</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-2219"><a href="#Parser-2219"><span class="linenos">2219</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithSystemVersioningProperty</span><span class="p">:</span>
</span><span id="Parser-2220"><a href="#Parser-2220"><span class="linenos">2220</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-2221"><a href="#Parser-2221"><span class="linenos">2221</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2222"><a href="#Parser-2222"><span class="linenos">2222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithSystemVersioningProperty</span><span class="p">,</span>
</span><span id="Parser-2223"><a href="#Parser-2223"><span class="linenos">2223</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-2224"><a href="#Parser-2224"><span class="linenos">2224</span></a> <span class="s2">&quot;on&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="Parser-2225"><a href="#Parser-2225"><span class="linenos">2225</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="n">with_</span><span class="p">,</span>
</span><span id="Parser-2226"><a href="#Parser-2226"><span class="linenos">2226</span></a> <span class="p">},</span>
</span><span id="Parser-2227"><a href="#Parser-2227"><span class="linenos">2227</span></a> <span class="p">)</span>
</span><span id="Parser-2228"><a href="#Parser-2228"><span class="linenos">2228</span></a>
</span><span id="Parser-2229"><a href="#Parser-2229"><span class="linenos">2229</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OFF&quot;</span><span class="p">):</span>
</span><span id="Parser-2230"><a href="#Parser-2230"><span class="linenos">2230</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-2231"><a href="#Parser-2231"><span class="linenos">2231</span></a> <span class="k">return</span> <span class="n">prop</span>
</span><span id="Parser-2232"><a href="#Parser-2232"><span class="linenos">2232</span></a>
</span><span id="Parser-2233"><a href="#Parser-2233"><span class="linenos">2233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
</span><span id="Parser-2234"><a href="#Parser-2234"><span class="linenos">2234</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-2235"><a href="#Parser-2235"><span class="linenos">2235</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
</span><span id="Parser-2236"><a href="#Parser-2236"><span class="linenos">2236</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HISTORY_TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="Parser-2237"><a href="#Parser-2237"><span class="linenos">2237</span></a> <span class="n">prop</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="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
</span><span id="Parser-2238"><a href="#Parser-2238"><span class="linenos">2238</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DATA_CONSISTENCY_CHECK&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="Parser-2239"><a href="#Parser-2239"><span class="linenos">2239</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;data_consistency&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-2240"><a href="#Parser-2240"><span class="linenos">2240</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HISTORY_RETENTION_PERIOD&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="Parser-2241"><a href="#Parser-2241"><span class="linenos">2241</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;retention_period&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_retention_period</span><span class="p">())</span>
</span><span id="Parser-2242"><a href="#Parser-2242"><span class="linenos">2242</span></a>
</span><span id="Parser-2243"><a href="#Parser-2243"><span class="linenos">2243</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="Parser-2244"><a href="#Parser-2244"><span class="linenos">2244</span></a>
</span><span id="Parser-2245"><a href="#Parser-2245"><span class="linenos">2245</span></a> <span class="k">return</span> <span class="n">prop</span>
</span><span id="Parser-2246"><a href="#Parser-2246"><span class="linenos">2246</span></a>
</span><span id="Parser-2247"><a href="#Parser-2247"><span class="linenos">2247</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_data_deletion_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataDeletionProperty</span><span class="p">:</span>
</span><span id="Parser-2248"><a href="#Parser-2248"><span class="linenos">2248</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-2249"><a href="#Parser-2249"><span class="linenos">2249</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OFF&quot;</span><span class="p">)</span>
</span><span id="Parser-2250"><a href="#Parser-2250"><span class="linenos">2250</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataDeletionProperty</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">)</span>
</span><span id="Parser-2251"><a href="#Parser-2251"><span class="linenos">2251</span></a>
</span><span id="Parser-2252"><a href="#Parser-2252"><span class="linenos">2252</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-2253"><a href="#Parser-2253"><span class="linenos">2253</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
</span><span id="Parser-2254"><a href="#Parser-2254"><span class="linenos">2254</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FILTER_COLUMN&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="Parser-2255"><a href="#Parser-2255"><span class="linenos">2255</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;filter_column&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">())</span>
</span><span id="Parser-2256"><a href="#Parser-2256"><span class="linenos">2256</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETENTION_PERIOD&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="Parser-2257"><a href="#Parser-2257"><span class="linenos">2257</span></a> <span class="n">prop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;retention_period&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_retention_period</span><span class="p">())</span>
</span><span id="Parser-2258"><a href="#Parser-2258"><span class="linenos">2258</span></a>
</span><span id="Parser-2259"><a href="#Parser-2259"><span class="linenos">2259</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="Parser-2260"><a href="#Parser-2260"><span class="linenos">2260</span></a>
</span><span id="Parser-2261"><a href="#Parser-2261"><span class="linenos">2261</span></a> <span class="k">return</span> <span class="n">prop</span>
</span><span id="Parser-2262"><a href="#Parser-2262"><span class="linenos">2262</span></a>
</span><span id="Parser-2263"><a href="#Parser-2263"><span class="linenos">2263</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_distributed_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DistributedByProperty</span><span class="p">:</span>
</span><span id="Parser-2264"><a href="#Parser-2264"><span class="linenos">2264</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;HASH&quot;</span>
</span><span id="Parser-2265"><a href="#Parser-2265"><span class="linenos">2265</span></a> <span class="n">expressions</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">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="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2266"><a href="#Parser-2266"><span class="linenos">2266</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;HASH&quot;</span><span class="p">):</span>
</span><span id="Parser-2267"><a href="#Parser-2267"><span class="linenos">2267</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span>
</span><span id="Parser-2268"><a href="#Parser-2268"><span class="linenos">2268</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;RANDOM&quot;</span><span class="p">):</span>
</span><span id="Parser-2269"><a href="#Parser-2269"><span class="linenos">2269</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;RANDOM&quot;</span>
</span><span id="Parser-2270"><a href="#Parser-2270"><span class="linenos">2270</span></a>
</span><span id="Parser-2271"><a href="#Parser-2271"><span class="linenos">2271</span></a> <span class="c1"># If the BUCKETS keyword is not present, the number of buckets is AUTO</span>
</span><span id="Parser-2272"><a href="#Parser-2272"><span class="linenos">2272</span></a> <span class="n">buckets</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 class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2273"><a href="#Parser-2273"><span class="linenos">2273</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKETS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AUTO&quot;</span><span class="p">):</span>
</span><span id="Parser-2274"><a href="#Parser-2274"><span class="linenos">2274</span></a> <span class="n">buckets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="Parser-2275"><a href="#Parser-2275"><span class="linenos">2275</span></a>
</span><span id="Parser-2276"><a href="#Parser-2276"><span class="linenos">2276</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2277"><a href="#Parser-2277"><span class="linenos">2277</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistributedByProperty</span><span class="p">,</span>
</span><span id="Parser-2278"><a href="#Parser-2278"><span class="linenos">2278</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-2279"><a href="#Parser-2279"><span class="linenos">2279</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="Parser-2280"><a href="#Parser-2280"><span class="linenos">2280</span></a> <span class="n">buckets</span><span class="o">=</span><span class="n">buckets</span><span class="p">,</span>
</span><span id="Parser-2281"><a href="#Parser-2281"><span class="linenos">2281</span></a> <span class="n">order</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(),</span>
</span><span id="Parser-2282"><a href="#Parser-2282"><span class="linenos">2282</span></a> <span class="p">)</span>
</span><span id="Parser-2283"><a href="#Parser-2283"><span class="linenos">2283</span></a>
</span><span id="Parser-2284"><a href="#Parser-2284"><span class="linenos">2284</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_composite_key_property</span><span class="p">(</span><span class="bp">self</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">E</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="Parser-2285"><a href="#Parser-2285"><span class="linenos">2285</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
</span><span id="Parser-2286"><a href="#Parser-2286"><span class="linenos">2286</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
</span><span id="Parser-2287"><a href="#Parser-2287"><span class="linenos">2287</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">expr_type</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-2288"><a href="#Parser-2288"><span class="linenos">2288</span></a>
</span><span id="Parser-2289"><a href="#Parser-2289"><span class="linenos">2289</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_with_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">|</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><span id="Parser-2290"><a href="#Parser-2290"><span class="linenos">2290</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;SYSTEM_VERSIONING&quot;</span><span class="p">):</span>
</span><span id="Parser-2291"><a href="#Parser-2291"><span class="linenos">2291</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_system_versioning_property</span><span class="p">(</span><span class="n">with_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2292"><a href="#Parser-2292"><span class="linenos">2292</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-2293"><a href="#Parser-2293"><span class="linenos">2293</span></a> <span class="k">return</span> <span class="n">prop</span>
</span><span id="Parser-2294"><a href="#Parser-2294"><span class="linenos">2294</span></a>
</span><span id="Parser-2295"><a href="#Parser-2295"><span class="linenos">2295</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-2296"><a href="#Parser-2296"><span class="linenos">2296</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_properties</span><span class="p">()</span>
</span><span id="Parser-2297"><a href="#Parser-2297"><span class="linenos">2297</span></a>
</span><span id="Parser-2298"><a href="#Parser-2298"><span class="linenos">2298</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;JOURNAL&quot;</span><span class="p">):</span>
</span><span id="Parser-2299"><a href="#Parser-2299"><span class="linenos">2299</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withjournaltable</span><span class="p">()</span>
</span><span id="Parser-2300"><a href="#Parser-2300"><span class="linenos">2300</span></a>
</span><span id="Parser-2301"><a href="#Parser-2301"><span class="linenos">2301</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">VIEW_ATTRIBUTES</span><span class="p">):</span>
</span><span id="Parser-2302"><a href="#Parser-2302"><span class="linenos">2302</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ViewAttributeProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-2303"><a href="#Parser-2303"><span class="linenos">2303</span></a>
</span><span id="Parser-2304"><a href="#Parser-2304"><span class="linenos">2304</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DATA&quot;</span><span class="p">):</span>
</span><span id="Parser-2305"><a href="#Parser-2305"><span class="linenos">2305</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withdata</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-2306"><a href="#Parser-2306"><span class="linenos">2306</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">):</span>
</span><span id="Parser-2307"><a href="#Parser-2307"><span class="linenos">2307</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withdata</span><span class="p">(</span><span class="n">no</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2308"><a href="#Parser-2308"><span class="linenos">2308</span></a>
</span><span id="Parser-2309"><a href="#Parser-2309"><span class="linenos">2309</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SERDE_PROPERTIES</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-2310"><a href="#Parser-2310"><span class="linenos">2310</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_serde_properties</span><span class="p">(</span><span class="n">with_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2311"><a href="#Parser-2311"><span class="linenos">2311</span></a>
</span><span id="Parser-2312"><a href="#Parser-2312"><span class="linenos">2312</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SCHEMA</span><span class="p">):</span>
</span><span id="Parser-2313"><a href="#Parser-2313"><span class="linenos">2313</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2314"><a href="#Parser-2314"><span class="linenos">2314</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithSchemaBindingProperty</span><span class="p">,</span>
</span><span id="Parser-2315"><a href="#Parser-2315"><span class="linenos">2315</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SCHEMA_BINDING_OPTIONS</span><span class="p">),</span>
</span><span id="Parser-2316"><a href="#Parser-2316"><span class="linenos">2316</span></a> <span class="p">)</span>
</span><span id="Parser-2317"><a href="#Parser-2317"><span class="linenos">2317</span></a>
</span><span id="Parser-2318"><a href="#Parser-2318"><span class="linenos">2318</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROCEDURE_OPTIONS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-2319"><a href="#Parser-2319"><span class="linenos">2319</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2320"><a href="#Parser-2320"><span class="linenos">2320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithProcedureOptions</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_procedure_option</span><span class="p">)</span>
</span><span id="Parser-2321"><a href="#Parser-2321"><span class="linenos">2321</span></a> <span class="p">)</span>
</span><span id="Parser-2322"><a href="#Parser-2322"><span class="linenos">2322</span></a>
</span><span id="Parser-2323"><a href="#Parser-2323"><span class="linenos">2323</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
</span><span id="Parser-2324"><a href="#Parser-2324"><span class="linenos">2324</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2325"><a href="#Parser-2325"><span class="linenos">2325</span></a>
</span><span id="Parser-2326"><a href="#Parser-2326"><span class="linenos">2326</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_withisolatedloading</span><span class="p">()</span>
</span><span id="Parser-2327"><a href="#Parser-2327"><span class="linenos">2327</span></a>
</span><span id="Parser-2328"><a href="#Parser-2328"><span class="linenos">2328</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_procedure_option</span><span class="p">(</span><span class="bp">self</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="o">|</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-2329"><a href="#Parser-2329"><span class="linenos">2329</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;EXECUTE&quot;</span><span class="p">,</span> <span class="s2">&quot;AS&quot;</span><span class="p">):</span>
</span><span id="Parser-2330"><a href="#Parser-2330"><span class="linenos">2330</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2331"><a href="#Parser-2331"><span class="linenos">2331</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ExecuteAsProperty</span><span class="p">,</span>
</span><span id="Parser-2332"><a href="#Parser-2332"><span class="linenos">2332</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">EXECUTE_AS_OPTIONS</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-2333"><a href="#Parser-2333"><span class="linenos">2333</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="Parser-2334"><a href="#Parser-2334"><span class="linenos">2334</span></a> <span class="p">)</span>
</span><span id="Parser-2335"><a href="#Parser-2335"><span class="linenos">2335</span></a>
</span><span id="Parser-2336"><a href="#Parser-2336"><span class="linenos">2336</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PROCEDURE_OPTIONS</span><span class="p">)</span>
</span><span id="Parser-2337"><a href="#Parser-2337"><span class="linenos">2337</span></a>
</span><span id="Parser-2338"><a href="#Parser-2338"><span class="linenos">2338</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/create-view.html</span>
</span><span id="Parser-2339"><a href="#Parser-2339"><span class="linenos">2339</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_definer</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">]:</span>
</span><span id="Parser-2340"><a href="#Parser-2340"><span class="linenos">2340</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-2341"><a href="#Parser-2341"><span class="linenos">2341</span></a>
</span><span id="Parser-2342"><a href="#Parser-2342"><span class="linenos">2342</span></a> <span class="n">user</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-2343"><a href="#Parser-2343"><span class="linenos">2343</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARAMETER</span><span class="p">)</span>
</span><span id="Parser-2344"><a href="#Parser-2344"><span class="linenos">2344</span></a> <span class="n">host</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="Parser-2345"><a href="#Parser-2345"><span class="linenos">2345</span></a>
</span><span id="Parser-2346"><a href="#Parser-2346"><span class="linenos">2346</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">user</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">host</span><span class="p">:</span>
</span><span id="Parser-2347"><a href="#Parser-2347"><span class="linenos">2347</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2348"><a href="#Parser-2348"><span class="linenos">2348</span></a>
</span><span id="Parser-2349"><a href="#Parser-2349"><span class="linenos">2349</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DefinerProperty</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">user</span><span class="si">}</span><span class="s2">@</span><span class="si">{</span><span class="n">host</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Parser-2350"><a href="#Parser-2350"><span class="linenos">2350</span></a>
</span><span id="Parser-2351"><a href="#Parser-2351"><span class="linenos">2351</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_withjournaltable</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">:</span>
</span><span id="Parser-2352"><a href="#Parser-2352"><span class="linenos">2352</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="Parser-2353"><a href="#Parser-2353"><span class="linenos">2353</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-2354"><a href="#Parser-2354"><span class="linenos">2354</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithJournalTableProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
</span><span id="Parser-2355"><a href="#Parser-2355"><span class="linenos">2355</span></a>
</span><span id="Parser-2356"><a href="#Parser-2356"><span class="linenos">2356</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">:</span>
</span><span id="Parser-2357"><a href="#Parser-2357"><span class="linenos">2357</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LogProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">)</span>
</span><span id="Parser-2358"><a href="#Parser-2358"><span class="linenos">2358</span></a>
</span><span id="Parser-2359"><a href="#Parser-2359"><span class="linenos">2359</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_journal</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="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">:</span>
</span><span id="Parser-2360"><a href="#Parser-2360"><span class="linenos">2360</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JournalProperty</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="Parser-2361"><a href="#Parser-2361"><span class="linenos">2361</span></a>
</span><span id="Parser-2362"><a href="#Parser-2362"><span class="linenos">2362</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_checksum</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">:</span>
</span><span id="Parser-2363"><a href="#Parser-2363"><span class="linenos">2363</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-2364"><a href="#Parser-2364"><span class="linenos">2364</span></a>
</span><span id="Parser-2365"><a href="#Parser-2365"><span class="linenos">2365</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2366"><a href="#Parser-2366"><span class="linenos">2366</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
</span><span id="Parser-2367"><a href="#Parser-2367"><span class="linenos">2367</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-2368"><a href="#Parser-2368"><span class="linenos">2368</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OFF&quot;</span><span class="p">):</span>
</span><span id="Parser-2369"><a href="#Parser-2369"><span class="linenos">2369</span></a> <span class="n">on</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-2370"><a href="#Parser-2370"><span class="linenos">2370</span></a>
</span><span id="Parser-2371"><a href="#Parser-2371"><span class="linenos">2371</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ChecksumProperty</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">))</span>
</span><span id="Parser-2372"><a href="#Parser-2372"><span class="linenos">2372</span></a>
</span><span id="Parser-2373"><a href="#Parser-2373"><span class="linenos">2373</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_cluster</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wrapped</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">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">:</span>
</span><span id="Parser-2374"><a href="#Parser-2374"><span class="linenos">2374</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2375"><a href="#Parser-2375"><span class="linenos">2375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cluster</span><span class="p">,</span>
</span><span id="Parser-2376"><a href="#Parser-2376"><span class="linenos">2376</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">(</span>
</span><span id="Parser-2377"><a href="#Parser-2377"><span class="linenos">2377</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">)</span>
</span><span id="Parser-2378"><a href="#Parser-2378"><span class="linenos">2378</span></a> <span class="k">if</span> <span class="n">wrapped</span>
</span><span id="Parser-2379"><a href="#Parser-2379"><span class="linenos">2379</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">)</span>
</span><span id="Parser-2380"><a href="#Parser-2380"><span class="linenos">2380</span></a> <span class="p">),</span>
</span><span id="Parser-2381"><a href="#Parser-2381"><span class="linenos">2381</span></a> <span class="p">)</span>
</span><span id="Parser-2382"><a href="#Parser-2382"><span class="linenos">2382</span></a>
</span><span id="Parser-2383"><a href="#Parser-2383"><span class="linenos">2383</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_clustered_by</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">:</span>
</span><span id="Parser-2384"><a href="#Parser-2384"><span class="linenos">2384</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span>
</span><span id="Parser-2385"><a href="#Parser-2385"><span class="linenos">2385</span></a>
</span><span id="Parser-2386"><a href="#Parser-2386"><span class="linenos">2386</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="Parser-2387"><a href="#Parser-2387"><span class="linenos">2387</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="Parser-2388"><a href="#Parser-2388"><span class="linenos">2388</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-2389"><a href="#Parser-2389"><span class="linenos">2389</span></a>
</span><span id="Parser-2390"><a href="#Parser-2390"><span class="linenos">2390</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SORTED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="Parser-2391"><a href="#Parser-2391"><span class="linenos">2391</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="Parser-2392"><a href="#Parser-2392"><span class="linenos">2392</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">)</span>
</span><span id="Parser-2393"><a href="#Parser-2393"><span class="linenos">2393</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-2394"><a href="#Parser-2394"><span class="linenos">2394</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2395"><a href="#Parser-2395"><span class="linenos">2395</span></a> <span class="n">sorted_by</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2396"><a href="#Parser-2396"><span class="linenos">2396</span></a>
</span><span id="Parser-2397"><a href="#Parser-2397"><span class="linenos">2397</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span>
</span><span id="Parser-2398"><a href="#Parser-2398"><span class="linenos">2398</span></a> <span class="n">buckets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="Parser-2399"><a href="#Parser-2399"><span class="linenos">2399</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKETS&quot;</span><span class="p">)</span>
</span><span id="Parser-2400"><a href="#Parser-2400"><span class="linenos">2400</span></a>
</span><span id="Parser-2401"><a href="#Parser-2401"><span class="linenos">2401</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2402"><a href="#Parser-2402"><span class="linenos">2402</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ClusteredByProperty</span><span class="p">,</span>
</span><span id="Parser-2403"><a href="#Parser-2403"><span class="linenos">2403</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-2404"><a href="#Parser-2404"><span class="linenos">2404</span></a> <span class="n">sorted_by</span><span class="o">=</span><span class="n">sorted_by</span><span class="p">,</span>
</span><span id="Parser-2405"><a href="#Parser-2405"><span class="linenos">2405</span></a> <span class="n">buckets</span><span class="o">=</span><span class="n">buckets</span><span class="p">,</span>
</span><span id="Parser-2406"><a href="#Parser-2406"><span class="linenos">2406</span></a> <span class="p">)</span>
</span><span id="Parser-2407"><a href="#Parser-2407"><span class="linenos">2407</span></a>
</span><span id="Parser-2408"><a href="#Parser-2408"><span class="linenos">2408</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_copy_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">]:</span>
</span><span id="Parser-2409"><a href="#Parser-2409"><span class="linenos">2409</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;GRANTS&quot;</span><span class="p">):</span>
</span><span id="Parser-2410"><a href="#Parser-2410"><span class="linenos">2410</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-2411"><a href="#Parser-2411"><span class="linenos">2411</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2412"><a href="#Parser-2412"><span class="linenos">2412</span></a>
</span><span id="Parser-2413"><a href="#Parser-2413"><span class="linenos">2413</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CopyGrantsProperty</span><span class="p">)</span>
</span><span id="Parser-2414"><a href="#Parser-2414"><span class="linenos">2414</span></a>
</span><span id="Parser-2415"><a href="#Parser-2415"><span class="linenos">2415</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_freespace</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">:</span>
</span><span id="Parser-2416"><a href="#Parser-2416"><span class="linenos">2416</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-2417"><a href="#Parser-2417"><span class="linenos">2417</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2418"><a href="#Parser-2418"><span class="linenos">2418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FreespaceProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">(),</span> <span class="n">percent</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">)</span>
</span><span id="Parser-2419"><a href="#Parser-2419"><span class="linenos">2419</span></a> <span class="p">)</span>
</span><span id="Parser-2420"><a href="#Parser-2420"><span class="linenos">2420</span></a>
</span><span id="Parser-2421"><a href="#Parser-2421"><span class="linenos">2421</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_mergeblockratio</span><span class="p">(</span>
</span><span id="Parser-2422"><a href="#Parser-2422"><span class="linenos">2422</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">no</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="n">default</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-2423"><a href="#Parser-2423"><span class="linenos">2423</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">:</span>
</span><span id="Parser-2424"><a href="#Parser-2424"><span class="linenos">2424</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">):</span>
</span><span id="Parser-2425"><a href="#Parser-2425"><span class="linenos">2425</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2426"><a href="#Parser-2426"><span class="linenos">2426</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span>
</span><span id="Parser-2427"><a href="#Parser-2427"><span class="linenos">2427</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">(),</span>
</span><span id="Parser-2428"><a href="#Parser-2428"><span class="linenos">2428</span></a> <span class="n">percent</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">),</span>
</span><span id="Parser-2429"><a href="#Parser-2429"><span class="linenos">2429</span></a> <span class="p">)</span>
</span><span id="Parser-2430"><a href="#Parser-2430"><span class="linenos">2430</span></a>
</span><span id="Parser-2431"><a href="#Parser-2431"><span class="linenos">2431</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">MergeBlockRatioProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
</span><span id="Parser-2432"><a href="#Parser-2432"><span class="linenos">2432</span></a>
</span><span id="Parser-2433"><a href="#Parser-2433"><span class="linenos">2433</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_datablocksize</span><span class="p">(</span>
</span><span id="Parser-2434"><a href="#Parser-2434"><span class="linenos">2434</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-2435"><a href="#Parser-2435"><span class="linenos">2435</span></a> <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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-2436"><a href="#Parser-2436"><span class="linenos">2436</span></a> <span class="n">minimum</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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-2437"><a href="#Parser-2437"><span class="linenos">2437</span></a> <span class="n">maximum</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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-2438"><a href="#Parser-2438"><span class="linenos">2438</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">:</span>
</span><span id="Parser-2439"><a href="#Parser-2439"><span class="linenos">2439</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-2440"><a href="#Parser-2440"><span class="linenos">2440</span></a> <span class="n">size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="Parser-2441"><a href="#Parser-2441"><span class="linenos">2441</span></a>
</span><span id="Parser-2442"><a href="#Parser-2442"><span class="linenos">2442</span></a> <span class="n">units</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2443"><a href="#Parser-2443"><span class="linenos">2443</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;BYTES&quot;</span><span class="p">,</span> <span class="s2">&quot;KBYTES&quot;</span><span class="p">,</span> <span class="s2">&quot;KILOBYTES&quot;</span><span class="p">)):</span>
</span><span id="Parser-2444"><a href="#Parser-2444"><span class="linenos">2444</span></a> <span class="n">units</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-2445"><a href="#Parser-2445"><span class="linenos">2445</span></a>
</span><span id="Parser-2446"><a href="#Parser-2446"><span class="linenos">2446</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2447"><a href="#Parser-2447"><span class="linenos">2447</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataBlocksizeProperty</span><span class="p">,</span>
</span><span id="Parser-2448"><a href="#Parser-2448"><span class="linenos">2448</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
</span><span id="Parser-2449"><a href="#Parser-2449"><span class="linenos">2449</span></a> <span class="n">units</span><span class="o">=</span><span class="n">units</span><span class="p">,</span>
</span><span id="Parser-2450"><a href="#Parser-2450"><span class="linenos">2450</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
</span><span id="Parser-2451"><a href="#Parser-2451"><span class="linenos">2451</span></a> <span class="n">minimum</span><span class="o">=</span><span class="n">minimum</span><span class="p">,</span>
</span><span id="Parser-2452"><a href="#Parser-2452"><span class="linenos">2452</span></a> <span class="n">maximum</span><span class="o">=</span><span class="n">maximum</span><span class="p">,</span>
</span><span id="Parser-2453"><a href="#Parser-2453"><span class="linenos">2453</span></a> <span class="p">)</span>
</span><span id="Parser-2454"><a href="#Parser-2454"><span class="linenos">2454</span></a>
</span><span id="Parser-2455"><a href="#Parser-2455"><span class="linenos">2455</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_blockcompression</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">:</span>
</span><span id="Parser-2456"><a href="#Parser-2456"><span class="linenos">2456</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-2457"><a href="#Parser-2457"><span class="linenos">2457</span></a> <span class="n">always</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
</span><span id="Parser-2458"><a href="#Parser-2458"><span class="linenos">2458</span></a> <span class="n">manual</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MANUAL&quot;</span><span class="p">)</span>
</span><span id="Parser-2459"><a href="#Parser-2459"><span class="linenos">2459</span></a> <span class="n">never</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NEVER&quot;</span><span class="p">)</span>
</span><span id="Parser-2460"><a href="#Parser-2460"><span class="linenos">2460</span></a> <span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFAULT&quot;</span><span class="p">)</span>
</span><span id="Parser-2461"><a href="#Parser-2461"><span class="linenos">2461</span></a>
</span><span id="Parser-2462"><a href="#Parser-2462"><span class="linenos">2462</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2463"><a href="#Parser-2463"><span class="linenos">2463</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AUTOTEMP&quot;</span><span class="p">):</span>
</span><span id="Parser-2464"><a href="#Parser-2464"><span class="linenos">2464</span></a> <span class="n">autotemp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
</span><span id="Parser-2465"><a href="#Parser-2465"><span class="linenos">2465</span></a>
</span><span id="Parser-2466"><a href="#Parser-2466"><span class="linenos">2466</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2467"><a href="#Parser-2467"><span class="linenos">2467</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BlockCompressionProperty</span><span class="p">,</span>
</span><span id="Parser-2468"><a href="#Parser-2468"><span class="linenos">2468</span></a> <span class="n">always</span><span class="o">=</span><span class="n">always</span><span class="p">,</span>
</span><span id="Parser-2469"><a href="#Parser-2469"><span class="linenos">2469</span></a> <span class="n">manual</span><span class="o">=</span><span class="n">manual</span><span class="p">,</span>
</span><span id="Parser-2470"><a href="#Parser-2470"><span class="linenos">2470</span></a> <span class="n">never</span><span class="o">=</span><span class="n">never</span><span class="p">,</span>
</span><span id="Parser-2471"><a href="#Parser-2471"><span class="linenos">2471</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
</span><span id="Parser-2472"><a href="#Parser-2472"><span class="linenos">2472</span></a> <span class="n">autotemp</span><span class="o">=</span><span class="n">autotemp</span><span class="p">,</span>
</span><span id="Parser-2473"><a href="#Parser-2473"><span class="linenos">2473</span></a> <span class="p">)</span>
</span><span id="Parser-2474"><a href="#Parser-2474"><span class="linenos">2474</span></a>
</span><span id="Parser-2475"><a href="#Parser-2475"><span class="linenos">2475</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_withisolatedloading</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">]:</span>
</span><span id="Parser-2476"><a href="#Parser-2476"><span class="linenos">2476</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-2477"><a href="#Parser-2477"><span class="linenos">2477</span></a> <span class="n">no</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">)</span>
</span><span id="Parser-2478"><a href="#Parser-2478"><span class="linenos">2478</span></a> <span class="n">concurrent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONCURRENT&quot;</span><span class="p">)</span>
</span><span id="Parser-2479"><a href="#Parser-2479"><span class="linenos">2479</span></a>
</span><span id="Parser-2480"><a href="#Parser-2480"><span class="linenos">2480</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ISOLATED&quot;</span><span class="p">,</span> <span class="s2">&quot;LOADING&quot;</span><span class="p">):</span>
</span><span id="Parser-2481"><a href="#Parser-2481"><span class="linenos">2481</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-2482"><a href="#Parser-2482"><span class="linenos">2482</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2483"><a href="#Parser-2483"><span class="linenos">2483</span></a>
</span><span id="Parser-2484"><a href="#Parser-2484"><span class="linenos">2484</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ISOLATED_LOADING_OPTIONS</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-2485"><a href="#Parser-2485"><span class="linenos">2485</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2486"><a href="#Parser-2486"><span class="linenos">2486</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IsolatedLoadingProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">concurrent</span><span class="o">=</span><span class="n">concurrent</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="n">target</span>
</span><span id="Parser-2487"><a href="#Parser-2487"><span class="linenos">2487</span></a> <span class="p">)</span>
</span><span id="Parser-2488"><a href="#Parser-2488"><span class="linenos">2488</span></a>
</span><span id="Parser-2489"><a href="#Parser-2489"><span class="linenos">2489</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_locking</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">:</span>
</span><span id="Parser-2490"><a href="#Parser-2490"><span class="linenos">2490</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">):</span>
</span><span id="Parser-2491"><a href="#Parser-2491"><span class="linenos">2491</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;TABLE&quot;</span>
</span><span id="Parser-2492"><a href="#Parser-2492"><span class="linenos">2492</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">):</span>
</span><span id="Parser-2493"><a href="#Parser-2493"><span class="linenos">2493</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;VIEW&quot;</span>
</span><span id="Parser-2494"><a href="#Parser-2494"><span class="linenos">2494</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">):</span>
</span><span id="Parser-2495"><a href="#Parser-2495"><span class="linenos">2495</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ROW&quot;</span>
</span><span id="Parser-2496"><a href="#Parser-2496"><span class="linenos">2496</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DATABASE&quot;</span><span class="p">):</span>
</span><span id="Parser-2497"><a href="#Parser-2497"><span class="linenos">2497</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;DATABASE&quot;</span>
</span><span id="Parser-2498"><a href="#Parser-2498"><span class="linenos">2498</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2499"><a href="#Parser-2499"><span class="linenos">2499</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2500"><a href="#Parser-2500"><span class="linenos">2500</span></a>
</span><span id="Parser-2501"><a href="#Parser-2501"><span class="linenos">2501</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;DATABASE&quot;</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="Parser-2502"><a href="#Parser-2502"><span class="linenos">2502</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
</span><span id="Parser-2503"><a href="#Parser-2503"><span class="linenos">2503</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2504"><a href="#Parser-2504"><span class="linenos">2504</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2505"><a href="#Parser-2505"><span class="linenos">2505</span></a>
</span><span id="Parser-2506"><a href="#Parser-2506"><span class="linenos">2506</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
</span><span id="Parser-2507"><a href="#Parser-2507"><span class="linenos">2507</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;FOR&quot;</span>
</span><span id="Parser-2508"><a href="#Parser-2508"><span class="linenos">2508</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
</span><span id="Parser-2509"><a href="#Parser-2509"><span class="linenos">2509</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="s2">&quot;IN&quot;</span>
</span><span id="Parser-2510"><a href="#Parser-2510"><span class="linenos">2510</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2511"><a href="#Parser-2511"><span class="linenos">2511</span></a> <span class="n">for_or_in</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2512"><a href="#Parser-2512"><span class="linenos">2512</span></a>
</span><span id="Parser-2513"><a href="#Parser-2513"><span class="linenos">2513</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ACCESS&quot;</span><span class="p">):</span>
</span><span id="Parser-2514"><a href="#Parser-2514"><span class="linenos">2514</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;ACCESS&quot;</span>
</span><span id="Parser-2515"><a href="#Parser-2515"><span class="linenos">2515</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;EXCL&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUSIVE&quot;</span><span class="p">)):</span>
</span><span id="Parser-2516"><a href="#Parser-2516"><span class="linenos">2516</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;EXCLUSIVE&quot;</span>
</span><span id="Parser-2517"><a href="#Parser-2517"><span class="linenos">2517</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SHARE&quot;</span><span class="p">):</span>
</span><span id="Parser-2518"><a href="#Parser-2518"><span class="linenos">2518</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;SHARE&quot;</span>
</span><span id="Parser-2519"><a href="#Parser-2519"><span class="linenos">2519</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;READ&quot;</span><span class="p">):</span>
</span><span id="Parser-2520"><a href="#Parser-2520"><span class="linenos">2520</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;READ&quot;</span>
</span><span id="Parser-2521"><a href="#Parser-2521"><span class="linenos">2521</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WRITE&quot;</span><span class="p">):</span>
</span><span id="Parser-2522"><a href="#Parser-2522"><span class="linenos">2522</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;WRITE&quot;</span>
</span><span id="Parser-2523"><a href="#Parser-2523"><span class="linenos">2523</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHECKSUM&quot;</span><span class="p">):</span>
</span><span id="Parser-2524"><a href="#Parser-2524"><span class="linenos">2524</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="s2">&quot;CHECKSUM&quot;</span>
</span><span id="Parser-2525"><a href="#Parser-2525"><span class="linenos">2525</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2526"><a href="#Parser-2526"><span class="linenos">2526</span></a> <span class="n">lock_type</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2527"><a href="#Parser-2527"><span class="linenos">2527</span></a>
</span><span id="Parser-2528"><a href="#Parser-2528"><span class="linenos">2528</span></a> <span class="n">override</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OVERRIDE&quot;</span><span class="p">)</span>
</span><span id="Parser-2529"><a href="#Parser-2529"><span class="linenos">2529</span></a>
</span><span id="Parser-2530"><a href="#Parser-2530"><span class="linenos">2530</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2531"><a href="#Parser-2531"><span class="linenos">2531</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LockingProperty</span><span class="p">,</span>
</span><span id="Parser-2532"><a href="#Parser-2532"><span class="linenos">2532</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-2533"><a href="#Parser-2533"><span class="linenos">2533</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="Parser-2534"><a href="#Parser-2534"><span class="linenos">2534</span></a> <span class="n">for_or_in</span><span class="o">=</span><span class="n">for_or_in</span><span class="p">,</span>
</span><span id="Parser-2535"><a href="#Parser-2535"><span class="linenos">2535</span></a> <span class="n">lock_type</span><span class="o">=</span><span class="n">lock_type</span><span class="p">,</span>
</span><span id="Parser-2536"><a href="#Parser-2536"><span class="linenos">2536</span></a> <span class="n">override</span><span class="o">=</span><span class="n">override</span><span class="p">,</span>
</span><span id="Parser-2537"><a href="#Parser-2537"><span class="linenos">2537</span></a> <span class="p">)</span>
</span><span id="Parser-2538"><a href="#Parser-2538"><span class="linenos">2538</span></a>
</span><span id="Parser-2539"><a href="#Parser-2539"><span class="linenos">2539</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partition_by</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-2540"><a href="#Parser-2540"><span class="linenos">2540</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">):</span>
</span><span id="Parser-2541"><a href="#Parser-2541"><span class="linenos">2541</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span>
</span><span id="Parser-2542"><a href="#Parser-2542"><span class="linenos">2542</span></a> <span class="k">return</span> <span class="p">[]</span>
</span><span id="Parser-2543"><a href="#Parser-2543"><span class="linenos">2543</span></a>
</span><span id="Parser-2544"><a href="#Parser-2544"><span class="linenos">2544</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partition_bound_spec</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionBoundSpec</span><span class="p">:</span>
</span><span id="Parser-2545"><a href="#Parser-2545"><span class="linenos">2545</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partition_bound_expr</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-2546"><a href="#Parser-2546"><span class="linenos">2546</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</span><span class="p">):</span>
</span><span id="Parser-2547"><a href="#Parser-2547"><span class="linenos">2547</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</span><span class="p">)</span>
</span><span id="Parser-2548"><a href="#Parser-2548"><span class="linenos">2548</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAXVALUE&quot;</span><span class="p">):</span>
</span><span id="Parser-2549"><a href="#Parser-2549"><span class="linenos">2549</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;MAXVALUE&quot;</span><span class="p">)</span>
</span><span id="Parser-2550"><a href="#Parser-2550"><span class="linenos">2550</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-2551"><a href="#Parser-2551"><span class="linenos">2551</span></a>
</span><span id="Parser-2552"><a href="#Parser-2552"><span class="linenos">2552</span></a> <span class="n">this</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="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="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2553"><a href="#Parser-2553"><span class="linenos">2553</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2554"><a href="#Parser-2554"><span class="linenos">2554</span></a> <span class="n">from_expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2555"><a href="#Parser-2555"><span class="linenos">2555</span></a> <span class="n">to_expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2556"><a href="#Parser-2556"><span class="linenos">2556</span></a>
</span><span id="Parser-2557"><a href="#Parser-2557"><span class="linenos">2557</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
</span><span id="Parser-2558"><a href="#Parser-2558"><span class="linenos">2558</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="Parser-2559"><a href="#Parser-2559"><span class="linenos">2559</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
</span><span id="Parser-2560"><a href="#Parser-2560"><span class="linenos">2560</span></a> <span class="n">from_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="n">_parse_partition_bound_expr</span><span class="p">)</span>
</span><span id="Parser-2561"><a href="#Parser-2561"><span class="linenos">2561</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
</span><span id="Parser-2562"><a href="#Parser-2562"><span class="linenos">2562</span></a> <span class="n">to_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="n">_parse_partition_bound_expr</span><span class="p">)</span>
</span><span id="Parser-2563"><a href="#Parser-2563"><span class="linenos">2563</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;MODULUS&quot;</span><span class="p">):</span>
</span><span id="Parser-2564"><a href="#Parser-2564"><span class="linenos">2564</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="Parser-2565"><a href="#Parser-2565"><span class="linenos">2565</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">,</span> <span class="s2">&quot;REMAINDER&quot;</span><span class="p">)</span>
</span><span id="Parser-2566"><a href="#Parser-2566"><span class="linenos">2566</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="Parser-2567"><a href="#Parser-2567"><span class="linenos">2567</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-2568"><a href="#Parser-2568"><span class="linenos">2568</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2569"><a href="#Parser-2569"><span class="linenos">2569</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Failed to parse partition bound spec.&quot;</span><span class="p">)</span>
</span><span id="Parser-2570"><a href="#Parser-2570"><span class="linenos">2570</span></a>
</span><span id="Parser-2571"><a href="#Parser-2571"><span class="linenos">2571</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2572"><a href="#Parser-2572"><span class="linenos">2572</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionBoundSpec</span><span class="p">,</span>
</span><span id="Parser-2573"><a href="#Parser-2573"><span class="linenos">2573</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-2574"><a href="#Parser-2574"><span class="linenos">2574</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="Parser-2575"><a href="#Parser-2575"><span class="linenos">2575</span></a> <span class="n">from_expressions</span><span class="o">=</span><span class="n">from_expressions</span><span class="p">,</span>
</span><span id="Parser-2576"><a href="#Parser-2576"><span class="linenos">2576</span></a> <span class="n">to_expressions</span><span class="o">=</span><span class="n">to_expressions</span><span class="p">,</span>
</span><span id="Parser-2577"><a href="#Parser-2577"><span class="linenos">2577</span></a> <span class="p">)</span>
</span><span id="Parser-2578"><a href="#Parser-2578"><span class="linenos">2578</span></a>
</span><span id="Parser-2579"><a href="#Parser-2579"><span class="linenos">2579</span></a> <span class="c1"># https://www.postgresql.org/docs/current/sql-createtable.html</span>
</span><span id="Parser-2580"><a href="#Parser-2580"><span class="linenos">2580</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partitioned_of</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">PartitionedOfProperty</span><span class="p">]:</span>
</span><span id="Parser-2581"><a href="#Parser-2581"><span class="linenos">2581</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OF&quot;</span><span class="p">):</span>
</span><span id="Parser-2582"><a href="#Parser-2582"><span class="linenos">2582</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-2583"><a href="#Parser-2583"><span class="linenos">2583</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2584"><a href="#Parser-2584"><span class="linenos">2584</span></a>
</span><span id="Parser-2585"><a href="#Parser-2585"><span class="linenos">2585</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2586"><a href="#Parser-2586"><span class="linenos">2586</span></a>
</span><span id="Parser-2587"><a href="#Parser-2587"><span class="linenos">2587</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="Parser-2588"><a href="#Parser-2588"><span class="linenos">2588</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionBoundSpec</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="s2">&quot;DEFAULT&quot;</span><span class="p">)</span>
</span><span id="Parser-2589"><a href="#Parser-2589"><span class="linenos">2589</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUES&quot;</span><span class="p">):</span>
</span><span id="Parser-2590"><a href="#Parser-2590"><span class="linenos">2590</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_bound_spec</span><span class="p">()</span>
</span><span id="Parser-2591"><a href="#Parser-2591"><span class="linenos">2591</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2592"><a href="#Parser-2592"><span class="linenos">2592</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting either DEFAULT or FOR VALUES clause.&quot;</span><span class="p">)</span>
</span><span id="Parser-2593"><a href="#Parser-2593"><span class="linenos">2593</span></a>
</span><span id="Parser-2594"><a href="#Parser-2594"><span class="linenos">2594</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PartitionedOfProperty</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">expression</span><span class="p">)</span>
</span><span id="Parser-2595"><a href="#Parser-2595"><span class="linenos">2595</span></a>
</span><span id="Parser-2596"><a href="#Parser-2596"><span class="linenos">2596</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partitioned_by</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span>
</span><span id="Parser-2597"><a href="#Parser-2597"><span class="linenos">2597</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-2598"><a href="#Parser-2598"><span class="linenos">2598</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2599"><a href="#Parser-2599"><span class="linenos">2599</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">,</span>
</span><span id="Parser-2600"><a href="#Parser-2600"><span class="linenos">2600</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()),</span>
</span><span id="Parser-2601"><a href="#Parser-2601"><span class="linenos">2601</span></a> <span class="p">)</span>
</span><span id="Parser-2602"><a href="#Parser-2602"><span class="linenos">2602</span></a>
</span><span id="Parser-2603"><a href="#Parser-2603"><span class="linenos">2603</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_withdata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">no</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">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">:</span>
</span><span id="Parser-2604"><a href="#Parser-2604"><span class="linenos">2604</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
</span><span id="Parser-2605"><a href="#Parser-2605"><span class="linenos">2605</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-2606"><a href="#Parser-2606"><span class="linenos">2606</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AND&quot;</span><span class="p">,</span> <span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
</span><span id="Parser-2607"><a href="#Parser-2607"><span class="linenos">2607</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-2608"><a href="#Parser-2608"><span class="linenos">2608</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2609"><a href="#Parser-2609"><span class="linenos">2609</span></a> <span class="n">statistics</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2610"><a href="#Parser-2610"><span class="linenos">2610</span></a>
</span><span id="Parser-2611"><a href="#Parser-2611"><span class="linenos">2611</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithDataProperty</span><span class="p">,</span> <span class="n">no</span><span class="o">=</span><span class="n">no</span><span class="p">,</span> <span class="n">statistics</span><span class="o">=</span><span class="n">statistics</span><span class="p">)</span>
</span><span id="Parser-2612"><a href="#Parser-2612"><span class="linenos">2612</span></a>
</span><span id="Parser-2613"><a href="#Parser-2613"><span class="linenos">2613</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_contains_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">]:</span>
</span><span id="Parser-2614"><a href="#Parser-2614"><span class="linenos">2614</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SQL&quot;</span><span class="p">):</span>
</span><span id="Parser-2615"><a href="#Parser-2615"><span class="linenos">2615</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;CONTAINS SQL&quot;</span><span class="p">)</span>
</span><span id="Parser-2616"><a href="#Parser-2616"><span class="linenos">2616</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2617"><a href="#Parser-2617"><span class="linenos">2617</span></a>
</span><span id="Parser-2618"><a href="#Parser-2618"><span class="linenos">2618</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_modifies_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">]:</span>
</span><span id="Parser-2619"><a href="#Parser-2619"><span class="linenos">2619</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SQL&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">):</span>
</span><span id="Parser-2620"><a href="#Parser-2620"><span class="linenos">2620</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;MODIFIES SQL DATA&quot;</span><span class="p">)</span>
</span><span id="Parser-2621"><a href="#Parser-2621"><span class="linenos">2621</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2622"><a href="#Parser-2622"><span class="linenos">2622</span></a>
</span><span id="Parser-2623"><a href="#Parser-2623"><span class="linenos">2623</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_no_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-2624"><a href="#Parser-2624"><span class="linenos">2624</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PRIMARY&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">):</span>
</span><span id="Parser-2625"><a href="#Parser-2625"><span class="linenos">2625</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">NoPrimaryIndexProperty</span><span class="p">()</span>
</span><span id="Parser-2626"><a href="#Parser-2626"><span class="linenos">2626</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SQL&quot;</span><span class="p">):</span>
</span><span id="Parser-2627"><a href="#Parser-2627"><span class="linenos">2627</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;NO SQL&quot;</span><span class="p">)</span>
</span><span id="Parser-2628"><a href="#Parser-2628"><span class="linenos">2628</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2629"><a href="#Parser-2629"><span class="linenos">2629</span></a>
</span><span id="Parser-2630"><a href="#Parser-2630"><span class="linenos">2630</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_on_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-2631"><a href="#Parser-2631"><span class="linenos">2631</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COMMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;PRESERVE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
</span><span id="Parser-2632"><a href="#Parser-2632"><span class="linenos">2632</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">()</span>
</span><span id="Parser-2633"><a href="#Parser-2633"><span class="linenos">2633</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COMMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;DELETE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
</span><span id="Parser-2634"><a href="#Parser-2634"><span class="linenos">2634</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">(</span><span class="n">delete</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2635"><a href="#Parser-2635"><span class="linenos">2635</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OnProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()))</span>
</span><span id="Parser-2636"><a href="#Parser-2636"><span class="linenos">2636</span></a>
</span><span id="Parser-2637"><a href="#Parser-2637"><span class="linenos">2637</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_reads_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">]:</span>
</span><span id="Parser-2638"><a href="#Parser-2638"><span class="linenos">2638</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SQL&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">):</span>
</span><span id="Parser-2639"><a href="#Parser-2639"><span class="linenos">2639</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SqlReadWriteProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;READS SQL DATA&quot;</span><span class="p">)</span>
</span><span id="Parser-2640"><a href="#Parser-2640"><span class="linenos">2640</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2641"><a href="#Parser-2641"><span class="linenos">2641</span></a>
</span><span id="Parser-2642"><a href="#Parser-2642"><span class="linenos">2642</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_distkey</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span>
</span><span id="Parser-2643"><a href="#Parser-2643"><span class="linenos">2643</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">))</span>
</span><span id="Parser-2644"><a href="#Parser-2644"><span class="linenos">2644</span></a>
</span><span id="Parser-2645"><a href="#Parser-2645"><span class="linenos">2645</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_create_like</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">]:</span>
</span><span id="Parser-2646"><a href="#Parser-2646"><span class="linenos">2646</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2647"><a href="#Parser-2647"><span class="linenos">2647</span></a>
</span><span id="Parser-2648"><a href="#Parser-2648"><span class="linenos">2648</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-2649"><a href="#Parser-2649"><span class="linenos">2649</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;INCLUDING&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUDING&quot;</span><span class="p">)):</span>
</span><span id="Parser-2650"><a href="#Parser-2650"><span class="linenos">2650</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-2651"><a href="#Parser-2651"><span class="linenos">2651</span></a>
</span><span id="Parser-2652"><a href="#Parser-2652"><span class="linenos">2652</span></a> <span class="n">id_var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-2653"><a href="#Parser-2653"><span class="linenos">2653</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">id_var</span><span class="p">:</span>
</span><span id="Parser-2654"><a href="#Parser-2654"><span class="linenos">2654</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2655"><a href="#Parser-2655"><span class="linenos">2655</span></a>
</span><span id="Parser-2656"><a href="#Parser-2656"><span class="linenos">2656</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="Parser-2657"><a href="#Parser-2657"><span class="linenos">2657</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Property</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">value</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">id_var</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="Parser-2658"><a href="#Parser-2658"><span class="linenos">2658</span></a> <span class="p">)</span>
</span><span id="Parser-2659"><a href="#Parser-2659"><span class="linenos">2659</span></a>
</span><span id="Parser-2660"><a href="#Parser-2660"><span class="linenos">2660</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
</span><span id="Parser-2661"><a href="#Parser-2661"><span class="linenos">2661</span></a>
</span><span id="Parser-2662"><a href="#Parser-2662"><span class="linenos">2662</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_sortkey</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">compound</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">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span>
</span><span id="Parser-2663"><a href="#Parser-2663"><span class="linenos">2663</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2664"><a href="#Parser-2664"><span class="linenos">2664</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</span>
</span><span id="Parser-2665"><a href="#Parser-2665"><span class="linenos">2665</span></a> <span class="p">)</span>
</span><span id="Parser-2666"><a href="#Parser-2666"><span class="linenos">2666</span></a>
</span><span id="Parser-2667"><a href="#Parser-2667"><span class="linenos">2667</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_character_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</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">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span>
</span><span id="Parser-2668"><a href="#Parser-2668"><span class="linenos">2668</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-2669"><a href="#Parser-2669"><span class="linenos">2669</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2670"><a href="#Parser-2670"><span class="linenos">2670</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">(),</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span>
</span><span id="Parser-2671"><a href="#Parser-2671"><span class="linenos">2671</span></a> <span class="p">)</span>
</span><span id="Parser-2672"><a href="#Parser-2672"><span class="linenos">2672</span></a>
</span><span id="Parser-2673"><a href="#Parser-2673"><span class="linenos">2673</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_remote_with_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">RemoteWithConnectionModelProperty</span><span class="p">:</span>
</span><span id="Parser-2674"><a href="#Parser-2674"><span class="linenos">2674</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;CONNECTION&quot;</span><span class="p">)</span>
</span><span id="Parser-2675"><a href="#Parser-2675"><span class="linenos">2675</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2676"><a href="#Parser-2676"><span class="linenos">2676</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RemoteWithConnectionModelProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
</span><span id="Parser-2677"><a href="#Parser-2677"><span class="linenos">2677</span></a> <span class="p">)</span>
</span><span id="Parser-2678"><a href="#Parser-2678"><span class="linenos">2678</span></a>
</span><span id="Parser-2679"><a href="#Parser-2679"><span class="linenos">2679</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_returns</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">:</span>
</span><span id="Parser-2680"><a href="#Parser-2680"><span class="linenos">2680</span></a> <span class="n">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="p">]</span>
</span><span id="Parser-2681"><a href="#Parser-2681"><span class="linenos">2681</span></a> <span class="n">null</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2682"><a href="#Parser-2682"><span class="linenos">2682</span></a> <span class="n">is_table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="Parser-2683"><a href="#Parser-2683"><span class="linenos">2683</span></a>
</span><span id="Parser-2684"><a href="#Parser-2684"><span class="linenos">2684</span></a> <span class="k">if</span> <span class="n">is_table</span><span class="p">:</span>
</span><span id="Parser-2685"><a href="#Parser-2685"><span class="linenos">2685</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
</span><span id="Parser-2686"><a href="#Parser-2686"><span class="linenos">2686</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2687"><a href="#Parser-2687"><span class="linenos">2687</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span>
</span><span id="Parser-2688"><a href="#Parser-2688"><span class="linenos">2688</span></a> <span class="n">this</span><span class="o">=</span><span class="s2">&quot;TABLE&quot;</span><span class="p">,</span>
</span><span id="Parser-2689"><a href="#Parser-2689"><span class="linenos">2689</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">),</span>
</span><span id="Parser-2690"><a href="#Parser-2690"><span class="linenos">2690</span></a> <span class="p">)</span>
</span><span id="Parser-2691"><a href="#Parser-2691"><span class="linenos">2691</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
</span><span id="Parser-2692"><a href="#Parser-2692"><span class="linenos">2692</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting &gt;&quot;</span><span class="p">)</span>
</span><span id="Parser-2693"><a href="#Parser-2693"><span class="linenos">2693</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2694"><a href="#Parser-2694"><span class="linenos">2694</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</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="s2">&quot;TABLE&quot;</span><span class="p">))</span>
</span><span id="Parser-2695"><a href="#Parser-2695"><span class="linenos">2695</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;INPUT&quot;</span><span class="p">):</span>
</span><span id="Parser-2696"><a href="#Parser-2696"><span class="linenos">2696</span></a> <span class="n">null</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-2697"><a href="#Parser-2697"><span class="linenos">2697</span></a> <span class="n">value</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2698"><a href="#Parser-2698"><span class="linenos">2698</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2699"><a href="#Parser-2699"><span class="linenos">2699</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="Parser-2700"><a href="#Parser-2700"><span class="linenos">2700</span></a>
</span><span id="Parser-2701"><a href="#Parser-2701"><span class="linenos">2701</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ReturnsProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">is_table</span><span class="o">=</span><span class="n">is_table</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="n">null</span><span class="p">)</span>
</span><span id="Parser-2702"><a href="#Parser-2702"><span class="linenos">2702</span></a>
</span><span id="Parser-2703"><a href="#Parser-2703"><span class="linenos">2703</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_describe</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Describe</span><span class="p">:</span>
</span><span id="Parser-2704"><a href="#Parser-2704"><span class="linenos">2704</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-2705"><a href="#Parser-2705"><span class="linenos">2705</span></a> <span class="n">style</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">DESCRIBE_STYLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-2706"><a href="#Parser-2706"><span class="linenos">2706</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
</span><span id="Parser-2707"><a href="#Parser-2707"><span class="linenos">2707</span></a> <span class="n">style</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2708"><a href="#Parser-2708"><span class="linenos">2708</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="Parser-2709"><a href="#Parser-2709"><span class="linenos">2709</span></a>
</span><span id="Parser-2710"><a href="#Parser-2710"><span class="linenos">2710</span></a> <span class="nb">format</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-2711"><a href="#Parser-2711"><span class="linenos">2711</span></a>
</span><span id="Parser-2712"><a href="#Parser-2712"><span class="linenos">2712</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STATEMENT_PARSERS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-2713"><a href="#Parser-2713"><span class="linenos">2713</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="Parser-2714"><a href="#Parser-2714"><span class="linenos">2714</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2715"><a href="#Parser-2715"><span class="linenos">2715</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2716"><a href="#Parser-2716"><span class="linenos">2716</span></a>
</span><span id="Parser-2717"><a href="#Parser-2717"><span class="linenos">2717</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
</span><span id="Parser-2718"><a href="#Parser-2718"><span class="linenos">2718</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">properties</span><span class="o">.</span><span class="n">expressions</span> <span class="k">if</span> <span class="n">properties</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-2719"><a href="#Parser-2719"><span class="linenos">2719</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">()</span>
</span><span id="Parser-2720"><a href="#Parser-2720"><span class="linenos">2720</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2721"><a href="#Parser-2721"><span class="linenos">2721</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Describe</span><span class="p">,</span>
</span><span id="Parser-2722"><a href="#Parser-2722"><span class="linenos">2722</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-2723"><a href="#Parser-2723"><span class="linenos">2723</span></a> <span class="n">style</span><span class="o">=</span><span class="n">style</span><span class="p">,</span>
</span><span id="Parser-2724"><a href="#Parser-2724"><span class="linenos">2724</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="Parser-2725"><a href="#Parser-2725"><span class="linenos">2725</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-2726"><a href="#Parser-2726"><span class="linenos">2726</span></a> <span class="n">partition</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
</span><span id="Parser-2727"><a href="#Parser-2727"><span class="linenos">2727</span></a> <span class="nb">format</span><span class="o">=</span><span class="nb">format</span><span class="p">,</span>
</span><span id="Parser-2728"><a href="#Parser-2728"><span class="linenos">2728</span></a> <span class="p">)</span>
</span><span id="Parser-2729"><a href="#Parser-2729"><span class="linenos">2729</span></a>
</span><span id="Parser-2730"><a href="#Parser-2730"><span class="linenos">2730</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_multitable_inserts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">comments</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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MultitableInserts</span><span class="p">:</span>
</span><span id="Parser-2731"><a href="#Parser-2731"><span class="linenos">2731</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-2732"><a href="#Parser-2732"><span class="linenos">2732</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-2733"><a href="#Parser-2733"><span class="linenos">2733</span></a>
</span><span id="Parser-2734"><a href="#Parser-2734"><span class="linenos">2734</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">parse_conditional_insert</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">exp</span><span class="o">.</span><span class="n">ConditionalInsert</span><span class="p">]:</span>
</span><span id="Parser-2735"><a href="#Parser-2735"><span class="linenos">2735</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
</span><span id="Parser-2736"><a href="#Parser-2736"><span class="linenos">2736</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_disjunction</span><span class="p">()</span>
</span><span id="Parser-2737"><a href="#Parser-2737"><span class="linenos">2737</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
</span><span id="Parser-2738"><a href="#Parser-2738"><span class="linenos">2738</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2739"><a href="#Parser-2739"><span class="linenos">2739</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2740"><a href="#Parser-2740"><span class="linenos">2740</span></a>
</span><span id="Parser-2741"><a href="#Parser-2741"><span class="linenos">2741</span></a> <span class="n">else_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">)</span>
</span><span id="Parser-2742"><a href="#Parser-2742"><span class="linenos">2742</span></a>
</span><span id="Parser-2743"><a href="#Parser-2743"><span class="linenos">2743</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
</span><span id="Parser-2744"><a href="#Parser-2744"><span class="linenos">2744</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2745"><a href="#Parser-2745"><span class="linenos">2745</span></a>
</span><span id="Parser-2746"><a href="#Parser-2746"><span class="linenos">2746</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2747"><a href="#Parser-2747"><span class="linenos">2747</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ConditionalInsert</span><span class="p">,</span>
</span><span id="Parser-2748"><a href="#Parser-2748"><span class="linenos">2748</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2749"><a href="#Parser-2749"><span class="linenos">2749</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
</span><span id="Parser-2750"><a href="#Parser-2750"><span class="linenos">2750</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-2751"><a href="#Parser-2751"><span class="linenos">2751</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">(),</span>
</span><span id="Parser-2752"><a href="#Parser-2752"><span class="linenos">2752</span></a> <span class="p">),</span>
</span><span id="Parser-2753"><a href="#Parser-2753"><span class="linenos">2753</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="Parser-2754"><a href="#Parser-2754"><span class="linenos">2754</span></a> <span class="n">else_</span><span class="o">=</span><span class="n">else_</span><span class="p">,</span>
</span><span id="Parser-2755"><a href="#Parser-2755"><span class="linenos">2755</span></a> <span class="p">)</span>
</span><span id="Parser-2756"><a href="#Parser-2756"><span class="linenos">2756</span></a>
</span><span id="Parser-2757"><a href="#Parser-2757"><span class="linenos">2757</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">parse_conditional_insert</span><span class="p">()</span>
</span><span id="Parser-2758"><a href="#Parser-2758"><span class="linenos">2758</span></a> <span class="k">while</span> <span class="n">expression</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-2759"><a href="#Parser-2759"><span class="linenos">2759</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Parser-2760"><a href="#Parser-2760"><span class="linenos">2760</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">parse_conditional_insert</span><span class="p">()</span>
</span><span id="Parser-2761"><a href="#Parser-2761"><span class="linenos">2761</span></a>
</span><span id="Parser-2762"><a href="#Parser-2762"><span class="linenos">2762</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2763"><a href="#Parser-2763"><span class="linenos">2763</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MultitableInserts</span><span class="p">,</span>
</span><span id="Parser-2764"><a href="#Parser-2764"><span class="linenos">2764</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="Parser-2765"><a href="#Parser-2765"><span class="linenos">2765</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="Parser-2766"><a href="#Parser-2766"><span class="linenos">2766</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-2767"><a href="#Parser-2767"><span class="linenos">2767</span></a> <span class="n">source</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
</span><span id="Parser-2768"><a href="#Parser-2768"><span class="linenos">2768</span></a> <span class="p">)</span>
</span><span id="Parser-2769"><a href="#Parser-2769"><span class="linenos">2769</span></a>
</span><span id="Parser-2770"><a href="#Parser-2770"><span class="linenos">2770</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_insert</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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">Insert</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">MultitableInserts</span><span class="p">]:</span>
</span><span id="Parser-2771"><a href="#Parser-2771"><span class="linenos">2771</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-2772"><a href="#Parser-2772"><span class="linenos">2772</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint</span><span class="p">()</span>
</span><span id="Parser-2773"><a href="#Parser-2773"><span class="linenos">2773</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">)</span>
</span><span id="Parser-2774"><a href="#Parser-2774"><span class="linenos">2774</span></a> <span class="n">ignore</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">)</span>
</span><span id="Parser-2775"><a href="#Parser-2775"><span class="linenos">2775</span></a> <span class="n">local</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span>
</span><span id="Parser-2776"><a href="#Parser-2776"><span class="linenos">2776</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2777"><a href="#Parser-2777"><span class="linenos">2777</span></a> <span class="n">is_function</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2778"><a href="#Parser-2778"><span class="linenos">2778</span></a>
</span><span id="Parser-2779"><a href="#Parser-2779"><span class="linenos">2779</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DIRECTORY&quot;</span><span class="p">):</span>
</span><span id="Parser-2780"><a href="#Parser-2780"><span class="linenos">2780</span></a> <span class="n">this</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 class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2781"><a href="#Parser-2781"><span class="linenos">2781</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Directory</span><span class="p">,</span>
</span><span id="Parser-2782"><a href="#Parser-2782"><span class="linenos">2782</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">(),</span>
</span><span id="Parser-2783"><a href="#Parser-2783"><span class="linenos">2783</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
</span><span id="Parser-2784"><a href="#Parser-2784"><span class="linenos">2784</span></a> <span class="n">row_format</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_row_format</span><span class="p">(</span><span class="n">match_row</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-2785"><a href="#Parser-2785"><span class="linenos">2785</span></a> <span class="p">)</span>
</span><span id="Parser-2786"><a href="#Parser-2786"><span class="linenos">2786</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2787"><a href="#Parser-2787"><span class="linenos">2787</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">)):</span>
</span><span id="Parser-2788"><a href="#Parser-2788"><span class="linenos">2788</span></a> <span class="n">comments</span> <span class="o">+=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">)</span>
</span><span id="Parser-2789"><a href="#Parser-2789"><span class="linenos">2789</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_multitable_inserts</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
</span><span id="Parser-2790"><a href="#Parser-2790"><span class="linenos">2790</span></a>
</span><span id="Parser-2791"><a href="#Parser-2791"><span class="linenos">2791</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OR</span><span class="p">):</span>
</span><span id="Parser-2792"><a href="#Parser-2792"><span class="linenos">2792</span></a> <span class="n">alternative</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">INSERT_ALTERNATIVES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-2793"><a href="#Parser-2793"><span class="linenos">2793</span></a>
</span><span id="Parser-2794"><a href="#Parser-2794"><span class="linenos">2794</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span>
</span><span id="Parser-2795"><a href="#Parser-2795"><span class="linenos">2795</span></a> <span class="n">comments</span> <span class="o">+=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">)</span>
</span><span id="Parser-2796"><a href="#Parser-2796"><span class="linenos">2796</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="Parser-2797"><a href="#Parser-2797"><span class="linenos">2797</span></a> <span class="n">is_function</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FUNCTION</span><span class="p">)</span>
</span><span id="Parser-2798"><a href="#Parser-2798"><span class="linenos">2798</span></a>
</span><span id="Parser-2799"><a href="#Parser-2799"><span class="linenos">2799</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-2800"><a href="#Parser-2800"><span class="linenos">2800</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_partition</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-2801"><a href="#Parser-2801"><span class="linenos">2801</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_function</span>
</span><span id="Parser-2802"><a href="#Parser-2802"><span class="linenos">2802</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
</span><span id="Parser-2803"><a href="#Parser-2803"><span class="linenos">2803</span></a> <span class="p">)</span>
</span><span id="Parser-2804"><a href="#Parser-2804"><span class="linenos">2804</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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-2805"><a href="#Parser-2805"><span class="linenos">2805</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
</span><span id="Parser-2806"><a href="#Parser-2806"><span class="linenos">2806</span></a>
</span><span id="Parser-2807"><a href="#Parser-2807"><span class="linenos">2807</span></a> <span class="n">returning</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">()</span>
</span><span id="Parser-2808"><a href="#Parser-2808"><span class="linenos">2808</span></a>
</span><span id="Parser-2809"><a href="#Parser-2809"><span class="linenos">2809</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2810"><a href="#Parser-2810"><span class="linenos">2810</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
</span><span id="Parser-2811"><a href="#Parser-2811"><span class="linenos">2811</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="Parser-2812"><a href="#Parser-2812"><span class="linenos">2812</span></a> <span class="n">hint</span><span class="o">=</span><span class="n">hint</span><span class="p">,</span>
</span><span id="Parser-2813"><a href="#Parser-2813"><span class="linenos">2813</span></a> <span class="n">is_function</span><span class="o">=</span><span class="n">is_function</span><span class="p">,</span>
</span><span id="Parser-2814"><a href="#Parser-2814"><span class="linenos">2814</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-2815"><a href="#Parser-2815"><span class="linenos">2815</span></a> <span class="n">stored</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STORED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_stored</span><span class="p">(),</span>
</span><span id="Parser-2816"><a href="#Parser-2816"><span class="linenos">2816</span></a> <span class="n">by_name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">),</span>
</span><span id="Parser-2817"><a href="#Parser-2817"><span class="linenos">2817</span></a> <span class="n">exists</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(),</span>
</span><span id="Parser-2818"><a href="#Parser-2818"><span class="linenos">2818</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span>
</span><span id="Parser-2819"><a href="#Parser-2819"><span class="linenos">2819</span></a> <span class="n">partition</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION_BY</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partitioned_by</span><span class="p">(),</span>
</span><span id="Parser-2820"><a href="#Parser-2820"><span class="linenos">2820</span></a> <span class="n">settings</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SETTINGS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_settings_property</span><span class="p">(),</span>
</span><span id="Parser-2821"><a href="#Parser-2821"><span class="linenos">2821</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ddl_select</span><span class="p">(),</span>
</span><span id="Parser-2822"><a href="#Parser-2822"><span class="linenos">2822</span></a> <span class="n">conflict</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_conflict</span><span class="p">(),</span>
</span><span id="Parser-2823"><a href="#Parser-2823"><span class="linenos">2823</span></a> <span class="n">returning</span><span class="o">=</span><span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
</span><span id="Parser-2824"><a href="#Parser-2824"><span class="linenos">2824</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
</span><span id="Parser-2825"><a href="#Parser-2825"><span class="linenos">2825</span></a> <span class="n">alternative</span><span class="o">=</span><span class="n">alternative</span><span class="p">,</span>
</span><span id="Parser-2826"><a href="#Parser-2826"><span class="linenos">2826</span></a> <span class="n">ignore</span><span class="o">=</span><span class="n">ignore</span><span class="p">,</span>
</span><span id="Parser-2827"><a href="#Parser-2827"><span class="linenos">2827</span></a> <span class="n">source</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
</span><span id="Parser-2828"><a href="#Parser-2828"><span class="linenos">2828</span></a> <span class="p">)</span>
</span><span id="Parser-2829"><a href="#Parser-2829"><span class="linenos">2829</span></a>
</span><span id="Parser-2830"><a href="#Parser-2830"><span class="linenos">2830</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_kill</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Kill</span><span class="p">:</span>
</span><span id="Parser-2831"><a href="#Parser-2831"><span class="linenos">2831</span></a> <span class="n">kind</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="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;CONNECTION&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">))</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-2832"><a href="#Parser-2832"><span class="linenos">2832</span></a>
</span><span id="Parser-2833"><a href="#Parser-2833"><span class="linenos">2833</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2834"><a href="#Parser-2834"><span class="linenos">2834</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kill</span><span class="p">,</span>
</span><span id="Parser-2835"><a href="#Parser-2835"><span class="linenos">2835</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">(),</span>
</span><span id="Parser-2836"><a href="#Parser-2836"><span class="linenos">2836</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="Parser-2837"><a href="#Parser-2837"><span class="linenos">2837</span></a> <span class="p">)</span>
</span><span id="Parser-2838"><a href="#Parser-2838"><span class="linenos">2838</span></a>
</span><span id="Parser-2839"><a href="#Parser-2839"><span class="linenos">2839</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_on_conflict</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">]:</span>
</span><span id="Parser-2840"><a href="#Parser-2840"><span class="linenos">2840</span></a> <span class="n">conflict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONFLICT&quot;</span><span class="p">)</span>
</span><span id="Parser-2841"><a href="#Parser-2841"><span class="linenos">2841</span></a> <span class="n">duplicate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;DUPLICATE&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
</span><span id="Parser-2842"><a href="#Parser-2842"><span class="linenos">2842</span></a>
</span><span id="Parser-2843"><a href="#Parser-2843"><span class="linenos">2843</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">conflict</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">duplicate</span><span class="p">:</span>
</span><span id="Parser-2844"><a href="#Parser-2844"><span class="linenos">2844</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2845"><a href="#Parser-2845"><span class="linenos">2845</span></a>
</span><span id="Parser-2846"><a href="#Parser-2846"><span class="linenos">2846</span></a> <span class="n">conflict_keys</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2847"><a href="#Parser-2847"><span class="linenos">2847</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2848"><a href="#Parser-2848"><span class="linenos">2848</span></a>
</span><span id="Parser-2849"><a href="#Parser-2849"><span class="linenos">2849</span></a> <span class="k">if</span> <span class="n">conflict</span><span class="p">:</span>
</span><span id="Parser-2850"><a href="#Parser-2850"><span class="linenos">2850</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONSTRAINT&quot;</span><span class="p">):</span>
</span><span id="Parser-2851"><a href="#Parser-2851"><span class="linenos">2851</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-2852"><a href="#Parser-2852"><span class="linenos">2852</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-2853"><a href="#Parser-2853"><span class="linenos">2853</span></a> <span class="n">conflict_keys</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span>
</span><span id="Parser-2854"><a href="#Parser-2854"><span class="linenos">2854</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-2855"><a href="#Parser-2855"><span class="linenos">2855</span></a>
</span><span id="Parser-2856"><a href="#Parser-2856"><span class="linenos">2856</span></a> <span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONFLICT_ACTIONS</span><span class="p">)</span>
</span><span id="Parser-2857"><a href="#Parser-2857"><span class="linenos">2857</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">:</span>
</span><span id="Parser-2858"><a href="#Parser-2858"><span class="linenos">2858</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">)</span>
</span><span id="Parser-2859"><a href="#Parser-2859"><span class="linenos">2859</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
</span><span id="Parser-2860"><a href="#Parser-2860"><span class="linenos">2860</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-2861"><a href="#Parser-2861"><span class="linenos">2861</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2862"><a href="#Parser-2862"><span class="linenos">2862</span></a>
</span><span id="Parser-2863"><a href="#Parser-2863"><span class="linenos">2863</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2864"><a href="#Parser-2864"><span class="linenos">2864</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnConflict</span><span class="p">,</span>
</span><span id="Parser-2865"><a href="#Parser-2865"><span class="linenos">2865</span></a> <span class="n">duplicate</span><span class="o">=</span><span class="n">duplicate</span><span class="p">,</span>
</span><span id="Parser-2866"><a href="#Parser-2866"><span class="linenos">2866</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-2867"><a href="#Parser-2867"><span class="linenos">2867</span></a> <span class="n">action</span><span class="o">=</span><span class="n">action</span><span class="p">,</span>
</span><span id="Parser-2868"><a href="#Parser-2868"><span class="linenos">2868</span></a> <span class="n">conflict_keys</span><span class="o">=</span><span class="n">conflict_keys</span><span class="p">,</span>
</span><span id="Parser-2869"><a href="#Parser-2869"><span class="linenos">2869</span></a> <span class="n">constraint</span><span class="o">=</span><span class="n">constraint</span><span class="p">,</span>
</span><span id="Parser-2870"><a href="#Parser-2870"><span class="linenos">2870</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
</span><span id="Parser-2871"><a href="#Parser-2871"><span class="linenos">2871</span></a> <span class="p">)</span>
</span><span id="Parser-2872"><a href="#Parser-2872"><span class="linenos">2872</span></a>
</span><span id="Parser-2873"><a href="#Parser-2873"><span class="linenos">2873</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_returning</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">]:</span>
</span><span id="Parser-2874"><a href="#Parser-2874"><span class="linenos">2874</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">RETURNING</span><span class="p">):</span>
</span><span id="Parser-2875"><a href="#Parser-2875"><span class="linenos">2875</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2876"><a href="#Parser-2876"><span class="linenos">2876</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2877"><a href="#Parser-2877"><span class="linenos">2877</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Returning</span><span class="p">,</span>
</span><span id="Parser-2878"><a href="#Parser-2878"><span class="linenos">2878</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">),</span>
</span><span id="Parser-2879"><a href="#Parser-2879"><span class="linenos">2879</span></a> <span class="n">into</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(),</span>
</span><span id="Parser-2880"><a href="#Parser-2880"><span class="linenos">2880</span></a> <span class="p">)</span>
</span><span id="Parser-2881"><a href="#Parser-2881"><span class="linenos">2881</span></a>
</span><span id="Parser-2882"><a href="#Parser-2882"><span class="linenos">2882</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_row</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">]:</span>
</span><span id="Parser-2883"><a href="#Parser-2883"><span class="linenos">2883</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">):</span>
</span><span id="Parser-2884"><a href="#Parser-2884"><span class="linenos">2884</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2885"><a href="#Parser-2885"><span class="linenos">2885</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_row_format</span><span class="p">()</span>
</span><span id="Parser-2886"><a href="#Parser-2886"><span class="linenos">2886</span></a>
</span><span id="Parser-2887"><a href="#Parser-2887"><span class="linenos">2887</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_serde_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">]:</span>
</span><span id="Parser-2888"><a href="#Parser-2888"><span class="linenos">2888</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-2889"><a href="#Parser-2889"><span class="linenos">2889</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">)</span>
</span><span id="Parser-2890"><a href="#Parser-2890"><span class="linenos">2890</span></a>
</span><span id="Parser-2891"><a href="#Parser-2891"><span class="linenos">2891</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SERDE_PROPERTIES</span><span class="p">):</span>
</span><span id="Parser-2892"><a href="#Parser-2892"><span class="linenos">2892</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-2893"><a href="#Parser-2893"><span class="linenos">2893</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2894"><a href="#Parser-2894"><span class="linenos">2894</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2895"><a href="#Parser-2895"><span class="linenos">2895</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SerdeProperties</span><span class="p">,</span>
</span><span id="Parser-2896"><a href="#Parser-2896"><span class="linenos">2896</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-2897"><a href="#Parser-2897"><span class="linenos">2897</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_properties</span><span class="p">(),</span>
</span><span id="Parser-2898"><a href="#Parser-2898"><span class="linenos">2898</span></a> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="n">with_</span><span class="p">,</span>
</span><span id="Parser-2899"><a href="#Parser-2899"><span class="linenos">2899</span></a> <span class="p">},</span>
</span><span id="Parser-2900"><a href="#Parser-2900"><span class="linenos">2900</span></a> <span class="p">)</span>
</span><span id="Parser-2901"><a href="#Parser-2901"><span class="linenos">2901</span></a>
</span><span id="Parser-2902"><a href="#Parser-2902"><span class="linenos">2902</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_row_format</span><span class="p">(</span>
</span><span id="Parser-2903"><a href="#Parser-2903"><span class="linenos">2903</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">match_row</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-2904"><a href="#Parser-2904"><span class="linenos">2904</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">RowFormatSerdeProperty</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">]:</span>
</span><span id="Parser-2905"><a href="#Parser-2905"><span class="linenos">2905</span></a> <span class="k">if</span> <span class="n">match_row</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">):</span>
</span><span id="Parser-2906"><a href="#Parser-2906"><span class="linenos">2906</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2907"><a href="#Parser-2907"><span class="linenos">2907</span></a>
</span><span id="Parser-2908"><a href="#Parser-2908"><span class="linenos">2908</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SERDE&quot;</span><span class="p">):</span>
</span><span id="Parser-2909"><a href="#Parser-2909"><span class="linenos">2909</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-2910"><a href="#Parser-2910"><span class="linenos">2910</span></a>
</span><span id="Parser-2911"><a href="#Parser-2911"><span class="linenos">2911</span></a> <span class="n">serde_properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_serde_properties</span><span class="p">()</span>
</span><span id="Parser-2912"><a href="#Parser-2912"><span class="linenos">2912</span></a>
</span><span id="Parser-2913"><a href="#Parser-2913"><span class="linenos">2913</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2914"><a href="#Parser-2914"><span class="linenos">2914</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RowFormatSerdeProperty</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">serde_properties</span><span class="o">=</span><span class="n">serde_properties</span>
</span><span id="Parser-2915"><a href="#Parser-2915"><span class="linenos">2915</span></a> <span class="p">)</span>
</span><span id="Parser-2916"><a href="#Parser-2916"><span class="linenos">2916</span></a>
</span><span id="Parser-2917"><a href="#Parser-2917"><span class="linenos">2917</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DELIMITED&quot;</span><span class="p">)</span>
</span><span id="Parser-2918"><a href="#Parser-2918"><span class="linenos">2918</span></a>
</span><span id="Parser-2919"><a href="#Parser-2919"><span class="linenos">2919</span></a> <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Parser-2920"><a href="#Parser-2920"><span class="linenos">2920</span></a>
</span><span id="Parser-2921"><a href="#Parser-2921"><span class="linenos">2921</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FIELDS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="Parser-2922"><a href="#Parser-2922"><span class="linenos">2922</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;fields&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-2923"><a href="#Parser-2923"><span class="linenos">2923</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ESCAPED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="Parser-2924"><a href="#Parser-2924"><span class="linenos">2924</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;escaped&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-2925"><a href="#Parser-2925"><span class="linenos">2925</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLLECTION&quot;</span><span class="p">,</span> <span class="s2">&quot;ITEMS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="Parser-2926"><a href="#Parser-2926"><span class="linenos">2926</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;collection_items&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-2927"><a href="#Parser-2927"><span class="linenos">2927</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAP&quot;</span><span class="p">,</span> <span class="s2">&quot;KEYS&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="Parser-2928"><a href="#Parser-2928"><span class="linenos">2928</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;map_keys&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-2929"><a href="#Parser-2929"><span class="linenos">2929</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LINES&quot;</span><span class="p">,</span> <span class="s2">&quot;TERMINATED&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="Parser-2930"><a href="#Parser-2930"><span class="linenos">2930</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;lines&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-2931"><a href="#Parser-2931"><span class="linenos">2931</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFINED&quot;</span><span class="p">,</span> <span class="s2">&quot;AS&quot;</span><span class="p">):</span>
</span><span id="Parser-2932"><a href="#Parser-2932"><span class="linenos">2932</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;null&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-2933"><a href="#Parser-2933"><span class="linenos">2933</span></a>
</span><span id="Parser-2934"><a href="#Parser-2934"><span class="linenos">2934</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RowFormatDelimitedProperty</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-2935"><a href="#Parser-2935"><span class="linenos">2935</span></a>
</span><span id="Parser-2936"><a href="#Parser-2936"><span class="linenos">2936</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_load</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="Parser-2937"><a href="#Parser-2937"><span class="linenos">2937</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DATA&quot;</span><span class="p">):</span>
</span><span id="Parser-2938"><a href="#Parser-2938"><span class="linenos">2938</span></a> <span class="n">local</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LOCAL&quot;</span><span class="p">)</span>
</span><span id="Parser-2939"><a href="#Parser-2939"><span class="linenos">2939</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INPATH&quot;</span><span class="p">)</span>
</span><span id="Parser-2940"><a href="#Parser-2940"><span class="linenos">2940</span></a> <span class="n">inpath</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-2941"><a href="#Parser-2941"><span class="linenos">2941</span></a> <span class="n">overwrite</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OVERWRITE</span><span class="p">)</span>
</span><span id="Parser-2942"><a href="#Parser-2942"><span class="linenos">2942</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="Parser-2943"><a href="#Parser-2943"><span class="linenos">2943</span></a>
</span><span id="Parser-2944"><a href="#Parser-2944"><span class="linenos">2944</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2945"><a href="#Parser-2945"><span class="linenos">2945</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LoadData</span><span class="p">,</span>
</span><span id="Parser-2946"><a href="#Parser-2946"><span class="linenos">2946</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-2947"><a href="#Parser-2947"><span class="linenos">2947</span></a> <span class="n">local</span><span class="o">=</span><span class="n">local</span><span class="p">,</span>
</span><span id="Parser-2948"><a href="#Parser-2948"><span class="linenos">2948</span></a> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span>
</span><span id="Parser-2949"><a href="#Parser-2949"><span class="linenos">2949</span></a> <span class="n">inpath</span><span class="o">=</span><span class="n">inpath</span><span class="p">,</span>
</span><span id="Parser-2950"><a href="#Parser-2950"><span class="linenos">2950</span></a> <span class="n">partition</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">(),</span>
</span><span id="Parser-2951"><a href="#Parser-2951"><span class="linenos">2951</span></a> <span class="n">input_format</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INPUTFORMAT&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="Parser-2952"><a href="#Parser-2952"><span class="linenos">2952</span></a> <span class="n">serde</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SERDE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="Parser-2953"><a href="#Parser-2953"><span class="linenos">2953</span></a> <span class="p">)</span>
</span><span id="Parser-2954"><a href="#Parser-2954"><span class="linenos">2954</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-2955"><a href="#Parser-2955"><span class="linenos">2955</span></a>
</span><span id="Parser-2956"><a href="#Parser-2956"><span class="linenos">2956</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">:</span>
</span><span id="Parser-2957"><a href="#Parser-2957"><span class="linenos">2957</span></a> <span class="c1"># This handles MySQL&#39;s &quot;Multiple-Table Syntax&quot;</span>
</span><span id="Parser-2958"><a href="#Parser-2958"><span class="linenos">2958</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/delete.html</span>
</span><span id="Parser-2959"><a href="#Parser-2959"><span class="linenos">2959</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2960"><a href="#Parser-2960"><span class="linenos">2960</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-2961"><a href="#Parser-2961"><span class="linenos">2961</span></a> <span class="n">tables</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="Parser-2962"><a href="#Parser-2962"><span class="linenos">2962</span></a>
</span><span id="Parser-2963"><a href="#Parser-2963"><span class="linenos">2963</span></a> <span class="n">returning</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">()</span>
</span><span id="Parser-2964"><a href="#Parser-2964"><span class="linenos">2964</span></a>
</span><span id="Parser-2965"><a href="#Parser-2965"><span class="linenos">2965</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2966"><a href="#Parser-2966"><span class="linenos">2966</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Delete</span><span class="p">,</span>
</span><span id="Parser-2967"><a href="#Parser-2967"><span class="linenos">2967</span></a> <span class="n">tables</span><span class="o">=</span><span class="n">tables</span><span class="p">,</span>
</span><span id="Parser-2968"><a href="#Parser-2968"><span class="linenos">2968</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-2969"><a href="#Parser-2969"><span class="linenos">2969</span></a> <span class="n">using</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-2970"><a href="#Parser-2970"><span class="linenos">2970</span></a> <span class="n">cluster</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_property</span><span class="p">(),</span>
</span><span id="Parser-2971"><a href="#Parser-2971"><span class="linenos">2971</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
</span><span id="Parser-2972"><a href="#Parser-2972"><span class="linenos">2972</span></a> <span class="n">returning</span><span class="o">=</span><span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
</span><span id="Parser-2973"><a href="#Parser-2973"><span class="linenos">2973</span></a> <span class="n">limit</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(),</span>
</span><span id="Parser-2974"><a href="#Parser-2974"><span class="linenos">2974</span></a> <span class="p">)</span>
</span><span id="Parser-2975"><a href="#Parser-2975"><span class="linenos">2975</span></a>
</span><span id="Parser-2976"><a href="#Parser-2976"><span class="linenos">2976</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_update</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">:</span>
</span><span id="Parser-2977"><a href="#Parser-2977"><span class="linenos">2977</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">alias_tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">UPDATE_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="Parser-2978"><a href="#Parser-2978"><span class="linenos">2978</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
</span><span id="Parser-2979"><a href="#Parser-2979"><span class="linenos">2979</span></a> <span class="n">returning</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">()</span>
</span><span id="Parser-2980"><a href="#Parser-2980"><span class="linenos">2980</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2981"><a href="#Parser-2981"><span class="linenos">2981</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
</span><span id="Parser-2982"><a href="#Parser-2982"><span class="linenos">2982</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-2983"><a href="#Parser-2983"><span class="linenos">2983</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="n">this</span><span class="p">,</span>
</span><span id="Parser-2984"><a href="#Parser-2984"><span class="linenos">2984</span></a> <span class="s2">&quot;expressions&quot;</span><span class="p">:</span> <span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-2985"><a href="#Parser-2985"><span class="linenos">2985</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-2986"><a href="#Parser-2986"><span class="linenos">2986</span></a> <span class="s2">&quot;where&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
</span><span id="Parser-2987"><a href="#Parser-2987"><span class="linenos">2987</span></a> <span class="s2">&quot;returning&quot;</span><span class="p">:</span> <span class="n">returning</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
</span><span id="Parser-2988"><a href="#Parser-2988"><span class="linenos">2988</span></a> <span class="s2">&quot;order&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(),</span>
</span><span id="Parser-2989"><a href="#Parser-2989"><span class="linenos">2989</span></a> <span class="s2">&quot;limit&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(),</span>
</span><span id="Parser-2990"><a href="#Parser-2990"><span class="linenos">2990</span></a> <span class="p">},</span>
</span><span id="Parser-2991"><a href="#Parser-2991"><span class="linenos">2991</span></a> <span class="p">)</span>
</span><span id="Parser-2992"><a href="#Parser-2992"><span class="linenos">2992</span></a>
</span><span id="Parser-2993"><a href="#Parser-2993"><span class="linenos">2993</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_use</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Use</span><span class="p">:</span>
</span><span id="Parser-2994"><a href="#Parser-2994"><span class="linenos">2994</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-2995"><a href="#Parser-2995"><span class="linenos">2995</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Use</span><span class="p">,</span>
</span><span id="Parser-2996"><a href="#Parser-2996"><span class="linenos">2996</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">USABLES</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="Parser-2997"><a href="#Parser-2997"><span class="linenos">2997</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="Parser-2998"><a href="#Parser-2998"><span class="linenos">2998</span></a> <span class="p">)</span>
</span><span id="Parser-2999"><a href="#Parser-2999"><span class="linenos">2999</span></a>
</span><span id="Parser-3000"><a href="#Parser-3000"><span class="linenos">3000</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_uncache</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">:</span>
</span><span id="Parser-3001"><a href="#Parser-3001"><span class="linenos">3001</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">):</span>
</span><span id="Parser-3002"><a href="#Parser-3002"><span class="linenos">3002</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting TABLE after UNCACHE&quot;</span><span class="p">)</span>
</span><span id="Parser-3003"><a href="#Parser-3003"><span class="linenos">3003</span></a>
</span><span id="Parser-3004"><a href="#Parser-3004"><span class="linenos">3004</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3005"><a href="#Parser-3005"><span class="linenos">3005</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Uncache</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(),</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-3006"><a href="#Parser-3006"><span class="linenos">3006</span></a> <span class="p">)</span>
</span><span id="Parser-3007"><a href="#Parser-3007"><span class="linenos">3007</span></a>
</span><span id="Parser-3008"><a href="#Parser-3008"><span class="linenos">3008</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_cache</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">:</span>
</span><span id="Parser-3009"><a href="#Parser-3009"><span class="linenos">3009</span></a> <span class="n">lazy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LAZY&quot;</span><span class="p">)</span>
</span><span id="Parser-3010"><a href="#Parser-3010"><span class="linenos">3010</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="Parser-3011"><a href="#Parser-3011"><span class="linenos">3011</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-3012"><a href="#Parser-3012"><span class="linenos">3012</span></a>
</span><span id="Parser-3013"><a href="#Parser-3013"><span class="linenos">3013</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-3014"><a href="#Parser-3014"><span class="linenos">3014</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OPTIONS&quot;</span><span class="p">):</span>
</span><span id="Parser-3015"><a href="#Parser-3015"><span class="linenos">3015</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="Parser-3016"><a href="#Parser-3016"><span class="linenos">3016</span></a> <span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-3017"><a href="#Parser-3017"><span class="linenos">3017</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-3018"><a href="#Parser-3018"><span class="linenos">3018</span></a> <span class="n">v</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-3019"><a href="#Parser-3019"><span class="linenos">3019</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">]</span>
</span><span id="Parser-3020"><a href="#Parser-3020"><span class="linenos">3020</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-3021"><a href="#Parser-3021"><span class="linenos">3021</span></a>
</span><span id="Parser-3022"><a href="#Parser-3022"><span class="linenos">3022</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="Parser-3023"><a href="#Parser-3023"><span class="linenos">3023</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3024"><a href="#Parser-3024"><span class="linenos">3024</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cache</span><span class="p">,</span>
</span><span id="Parser-3025"><a href="#Parser-3025"><span class="linenos">3025</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
</span><span id="Parser-3026"><a href="#Parser-3026"><span class="linenos">3026</span></a> <span class="n">lazy</span><span class="o">=</span><span class="n">lazy</span><span class="p">,</span>
</span><span id="Parser-3027"><a href="#Parser-3027"><span class="linenos">3027</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
</span><span id="Parser-3028"><a href="#Parser-3028"><span class="linenos">3028</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-3029"><a href="#Parser-3029"><span class="linenos">3029</span></a> <span class="p">)</span>
</span><span id="Parser-3030"><a href="#Parser-3030"><span class="linenos">3030</span></a>
</span><span id="Parser-3031"><a href="#Parser-3031"><span class="linenos">3031</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partition</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Partition</span><span class="p">]:</span>
</span><span id="Parser-3032"><a href="#Parser-3032"><span class="linenos">3032</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PARTITION_KEYWORDS</span><span class="p">):</span>
</span><span id="Parser-3033"><a href="#Parser-3033"><span class="linenos">3033</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3034"><a href="#Parser-3034"><span class="linenos">3034</span></a>
</span><span id="Parser-3035"><a href="#Parser-3035"><span class="linenos">3035</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3036"><a href="#Parser-3036"><span class="linenos">3036</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Partition</span><span class="p">,</span>
</span><span id="Parser-3037"><a href="#Parser-3037"><span class="linenos">3037</span></a> <span class="n">subpartition</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;SUBPARTITION&quot;</span><span class="p">,</span>
</span><span id="Parser-3038"><a href="#Parser-3038"><span class="linenos">3038</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">),</span>
</span><span id="Parser-3039"><a href="#Parser-3039"><span class="linenos">3039</span></a> <span class="p">)</span>
</span><span id="Parser-3040"><a href="#Parser-3040"><span class="linenos">3040</span></a>
</span><span id="Parser-3041"><a href="#Parser-3041"><span class="linenos">3041</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_value</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">]:</span>
</span><span id="Parser-3042"><a href="#Parser-3042"><span class="linenos">3042</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_value_expression</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-3043"><a href="#Parser-3043"><span class="linenos">3043</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_VALUES_DEFAULT</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="Parser-3044"><a href="#Parser-3044"><span class="linenos">3044</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-3045"><a href="#Parser-3045"><span class="linenos">3045</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
</span><span id="Parser-3046"><a href="#Parser-3046"><span class="linenos">3046</span></a>
</span><span id="Parser-3047"><a href="#Parser-3047"><span class="linenos">3047</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-3048"><a href="#Parser-3048"><span class="linenos">3048</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_value_expression</span><span class="p">)</span>
</span><span id="Parser-3049"><a href="#Parser-3049"><span class="linenos">3049</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-3050"><a href="#Parser-3050"><span class="linenos">3050</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-3051"><a href="#Parser-3051"><span class="linenos">3051</span></a>
</span><span id="Parser-3052"><a href="#Parser-3052"><span class="linenos">3052</span></a> <span class="c1"># In some dialects we can have VALUES 1, 2 which results in 1 column &amp; 2 rows.</span>
</span><span id="Parser-3053"><a href="#Parser-3053"><span class="linenos">3053</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
</span><span id="Parser-3054"><a href="#Parser-3054"><span class="linenos">3054</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="Parser-3055"><a href="#Parser-3055"><span class="linenos">3055</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">expression</span><span class="p">])</span>
</span><span id="Parser-3056"><a href="#Parser-3056"><span class="linenos">3056</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3057"><a href="#Parser-3057"><span class="linenos">3057</span></a>
</span><span id="Parser-3058"><a href="#Parser-3058"><span class="linenos">3058</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_projections</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-3059"><a href="#Parser-3059"><span class="linenos">3059</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
</span><span id="Parser-3060"><a href="#Parser-3060"><span class="linenos">3060</span></a>
</span><span id="Parser-3061"><a href="#Parser-3061"><span class="linenos">3061</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_select</span><span class="p">(</span>
</span><span id="Parser-3062"><a href="#Parser-3062"><span class="linenos">3062</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-3063"><a href="#Parser-3063"><span class="linenos">3063</span></a> <span class="n">nested</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-3064"><a href="#Parser-3064"><span class="linenos">3064</span></a> <span class="n">table</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-3065"><a href="#Parser-3065"><span class="linenos">3065</span></a> <span class="n">parse_subquery_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="Parser-3066"><a href="#Parser-3066"><span class="linenos">3066</span></a> <span class="n">parse_set_operation</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="Parser-3067"><a href="#Parser-3067"><span class="linenos">3067</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="Parser-3068"><a href="#Parser-3068"><span class="linenos">3068</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_with</span><span class="p">()</span>
</span><span id="Parser-3069"><a href="#Parser-3069"><span class="linenos">3069</span></a>
</span><span id="Parser-3070"><a href="#Parser-3070"><span class="linenos">3070</span></a> <span class="k">if</span> <span class="n">cte</span><span class="p">:</span>
</span><span id="Parser-3071"><a href="#Parser-3071"><span class="linenos">3071</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="Parser-3072"><a href="#Parser-3072"><span class="linenos">3072</span></a>
</span><span id="Parser-3073"><a href="#Parser-3073"><span class="linenos">3073</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="Parser-3074"><a href="#Parser-3074"><span class="linenos">3074</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Failed to parse any statement following CTE&quot;</span><span class="p">)</span>
</span><span id="Parser-3075"><a href="#Parser-3075"><span class="linenos">3075</span></a> <span class="k">return</span> <span class="n">cte</span>
</span><span id="Parser-3076"><a href="#Parser-3076"><span class="linenos">3076</span></a>
</span><span id="Parser-3077"><a href="#Parser-3077"><span class="linenos">3077</span></a> <span class="k">if</span> <span class="s2">&quot;with&quot;</span> <span class="ow">in</span> <span class="n">this</span><span class="o">.</span><span class="n">arg_types</span><span class="p">:</span>
</span><span id="Parser-3078"><a href="#Parser-3078"><span class="linenos">3078</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;with&quot;</span><span class="p">,</span> <span class="n">cte</span><span class="p">)</span>
</span><span id="Parser-3079"><a href="#Parser-3079"><span class="linenos">3079</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3080"><a href="#Parser-3080"><span class="linenos">3080</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> does not support CTE&quot;</span><span class="p">)</span>
</span><span id="Parser-3081"><a href="#Parser-3081"><span class="linenos">3081</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">cte</span>
</span><span id="Parser-3082"><a href="#Parser-3082"><span class="linenos">3082</span></a>
</span><span id="Parser-3083"><a href="#Parser-3083"><span class="linenos">3083</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3084"><a href="#Parser-3084"><span class="linenos">3084</span></a>
</span><span id="Parser-3085"><a href="#Parser-3085"><span class="linenos">3085</span></a> <span class="c1"># duckdb supports leading with FROM x</span>
</span><span id="Parser-3086"><a href="#Parser-3086"><span class="linenos">3086</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-3087"><a href="#Parser-3087"><span class="linenos">3087</span></a>
</span><span id="Parser-3088"><a href="#Parser-3088"><span class="linenos">3088</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">):</span>
</span><span id="Parser-3089"><a href="#Parser-3089"><span class="linenos">3089</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="Parser-3090"><a href="#Parser-3090"><span class="linenos">3090</span></a>
</span><span id="Parser-3091"><a href="#Parser-3091"><span class="linenos">3091</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint</span><span class="p">()</span>
</span><span id="Parser-3092"><a href="#Parser-3092"><span class="linenos">3092</span></a>
</span><span id="Parser-3093"><a href="#Parser-3093"><span class="linenos">3093</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">:</span>
</span><span id="Parser-3094"><a href="#Parser-3094"><span class="linenos">3094</span></a> <span class="n">all_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">)</span>
</span><span id="Parser-3095"><a href="#Parser-3095"><span class="linenos">3095</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">DISTINCT_TOKENS</span><span class="p">)</span>
</span><span id="Parser-3096"><a href="#Parser-3096"><span class="linenos">3096</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3097"><a href="#Parser-3097"><span class="linenos">3097</span></a> <span class="n">all_</span><span class="p">,</span> <span class="n">distinct</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
</span><span id="Parser-3098"><a href="#Parser-3098"><span class="linenos">3098</span></a>
</span><span id="Parser-3099"><a href="#Parser-3099"><span class="linenos">3099</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-3100"><a href="#Parser-3100"><span class="linenos">3100</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="Parser-3101"><a href="#Parser-3101"><span class="linenos">3101</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;STRUCT&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUE&quot;</span><span class="p">))</span>
</span><span id="Parser-3102"><a href="#Parser-3102"><span class="linenos">3102</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-3103"><a href="#Parser-3103"><span class="linenos">3103</span></a> <span class="p">)</span>
</span><span id="Parser-3104"><a href="#Parser-3104"><span class="linenos">3104</span></a>
</span><span id="Parser-3105"><a href="#Parser-3105"><span class="linenos">3105</span></a> <span class="k">if</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="Parser-3106"><a href="#Parser-3106"><span class="linenos">3106</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3107"><a href="#Parser-3107"><span class="linenos">3107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span>
</span><span id="Parser-3108"><a href="#Parser-3108"><span class="linenos">3108</span></a> <span class="n">on</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-3109"><a href="#Parser-3109"><span class="linenos">3109</span></a> <span class="p">)</span>
</span><span id="Parser-3110"><a href="#Parser-3110"><span class="linenos">3110</span></a>
</span><span id="Parser-3111"><a href="#Parser-3111"><span class="linenos">3111</span></a> <span class="k">if</span> <span class="n">all_</span> <span class="ow">and</span> <span class="n">distinct</span><span class="p">:</span>
</span><span id="Parser-3112"><a href="#Parser-3112"><span class="linenos">3112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Cannot specify both ALL and DISTINCT after SELECT&quot;</span><span class="p">)</span>
</span><span id="Parser-3113"><a href="#Parser-3113"><span class="linenos">3113</span></a>
</span><span id="Parser-3114"><a href="#Parser-3114"><span class="linenos">3114</span></a> <span class="n">operation_modifiers</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-3115"><a href="#Parser-3115"><span class="linenos">3115</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPERATION_MODIFIERS</span><span class="p">):</span>
</span><span id="Parser-3116"><a href="#Parser-3116"><span class="linenos">3116</span></a> <span class="n">operation_modifiers</span><span class="o">.</span><span class="n">append</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="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()))</span>
</span><span id="Parser-3117"><a href="#Parser-3117"><span class="linenos">3117</span></a>
</span><span id="Parser-3118"><a href="#Parser-3118"><span class="linenos">3118</span></a> <span class="n">limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="n">top</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-3119"><a href="#Parser-3119"><span class="linenos">3119</span></a> <span class="n">projections</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_projections</span><span class="p">()</span>
</span><span id="Parser-3120"><a href="#Parser-3120"><span class="linenos">3120</span></a>
</span><span id="Parser-3121"><a href="#Parser-3121"><span class="linenos">3121</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3122"><a href="#Parser-3122"><span class="linenos">3122</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">,</span>
</span><span id="Parser-3123"><a href="#Parser-3123"><span class="linenos">3123</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="Parser-3124"><a href="#Parser-3124"><span class="linenos">3124</span></a> <span class="n">hint</span><span class="o">=</span><span class="n">hint</span><span class="p">,</span>
</span><span id="Parser-3125"><a href="#Parser-3125"><span class="linenos">3125</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
</span><span id="Parser-3126"><a href="#Parser-3126"><span class="linenos">3126</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">projections</span><span class="p">,</span>
</span><span id="Parser-3127"><a href="#Parser-3127"><span class="linenos">3127</span></a> <span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">,</span>
</span><span id="Parser-3128"><a href="#Parser-3128"><span class="linenos">3128</span></a> <span class="n">operation_modifiers</span><span class="o">=</span><span class="n">operation_modifiers</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-3129"><a href="#Parser-3129"><span class="linenos">3129</span></a> <span class="p">)</span>
</span><span id="Parser-3130"><a href="#Parser-3130"><span class="linenos">3130</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">comments</span>
</span><span id="Parser-3131"><a href="#Parser-3131"><span class="linenos">3131</span></a>
</span><span id="Parser-3132"><a href="#Parser-3132"><span class="linenos">3132</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_into</span><span class="p">()</span>
</span><span id="Parser-3133"><a href="#Parser-3133"><span class="linenos">3133</span></a> <span class="k">if</span> <span class="n">into</span><span class="p">:</span>
</span><span id="Parser-3134"><a href="#Parser-3134"><span class="linenos">3134</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;into&quot;</span><span class="p">,</span> <span class="n">into</span><span class="p">)</span>
</span><span id="Parser-3135"><a href="#Parser-3135"><span class="linenos">3135</span></a>
</span><span id="Parser-3136"><a href="#Parser-3136"><span class="linenos">3136</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">from_</span><span class="p">:</span>
</span><span id="Parser-3137"><a href="#Parser-3137"><span class="linenos">3137</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span>
</span><span id="Parser-3138"><a href="#Parser-3138"><span class="linenos">3138</span></a>
</span><span id="Parser-3139"><a href="#Parser-3139"><span class="linenos">3139</span></a> <span class="k">if</span> <span class="n">from_</span><span class="p">:</span>
</span><span id="Parser-3140"><a href="#Parser-3140"><span class="linenos">3140</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;from&quot;</span><span class="p">,</span> <span class="n">from_</span><span class="p">)</span>
</span><span id="Parser-3141"><a href="#Parser-3141"><span class="linenos">3141</span></a>
</span><span id="Parser-3142"><a href="#Parser-3142"><span class="linenos">3142</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-3143"><a href="#Parser-3143"><span class="linenos">3143</span></a> <span class="k">elif</span> <span class="p">(</span><span class="n">table</span> <span class="ow">or</span> <span class="n">nested</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-3144"><a href="#Parser-3144"><span class="linenos">3144</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">)):</span>
</span><span id="Parser-3145"><a href="#Parser-3145"><span class="linenos">3145</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_simplified_pivot</span><span class="p">(</span>
</span><span id="Parser-3146"><a href="#Parser-3146"><span class="linenos">3146</span></a> <span class="n">is_unpivot</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span>
</span><span id="Parser-3147"><a href="#Parser-3147"><span class="linenos">3147</span></a> <span class="p">)</span>
</span><span id="Parser-3148"><a href="#Parser-3148"><span class="linenos">3148</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
</span><span id="Parser-3149"><a href="#Parser-3149"><span class="linenos">3149</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">(</span><span class="n">skip_from_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-3150"><a href="#Parser-3150"><span class="linenos">3150</span></a> <span class="c1"># Support parentheses for duckdb FROM-first syntax</span>
</span><span id="Parser-3151"><a href="#Parser-3151"><span class="linenos">3151</span></a> <span class="n">select</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
</span><span id="Parser-3152"><a href="#Parser-3152"><span class="linenos">3152</span></a> <span class="k">if</span> <span class="n">select</span><span class="p">:</span>
</span><span id="Parser-3153"><a href="#Parser-3153"><span class="linenos">3153</span></a> <span class="n">select</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;from&quot;</span><span class="p">,</span> <span class="n">from_</span><span class="p">)</span>
</span><span id="Parser-3154"><a href="#Parser-3154"><span class="linenos">3154</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">select</span>
</span><span id="Parser-3155"><a href="#Parser-3155"><span class="linenos">3155</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3156"><a href="#Parser-3156"><span class="linenos">3156</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">from_</span><span class="p">))</span>
</span><span id="Parser-3157"><a href="#Parser-3157"><span class="linenos">3157</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3158"><a href="#Parser-3158"><span class="linenos">3158</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-3159"><a href="#Parser-3159"><span class="linenos">3159</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="Parser-3160"><a href="#Parser-3160"><span class="linenos">3160</span></a> <span class="k">if</span> <span class="n">table</span>
</span><span id="Parser-3161"><a href="#Parser-3161"><span class="linenos">3161</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_set_operation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-3162"><a href="#Parser-3162"><span class="linenos">3162</span></a> <span class="p">)</span>
</span><span id="Parser-3163"><a href="#Parser-3163"><span class="linenos">3163</span></a>
</span><span id="Parser-3164"><a href="#Parser-3164"><span class="linenos">3164</span></a> <span class="c1"># Transform exp.Values into a exp.Table to pass through parse_query_modifiers</span>
</span><span id="Parser-3165"><a href="#Parser-3165"><span class="linenos">3165</span></a> <span class="c1"># in case a modifier (e.g. join) is following</span>
</span><span id="Parser-3166"><a href="#Parser-3166"><span class="linenos">3166</span></a> <span class="k">if</span> <span class="n">table</span> <span class="ow">and</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">Values</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
</span><span id="Parser-3167"><a href="#Parser-3167"><span class="linenos">3167</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span><span id="Parser-3168"><a href="#Parser-3168"><span class="linenos">3168</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
</span><span id="Parser-3169"><a href="#Parser-3169"><span class="linenos">3169</span></a>
</span><span id="Parser-3170"><a href="#Parser-3170"><span class="linenos">3170</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
</span><span id="Parser-3171"><a href="#Parser-3171"><span class="linenos">3171</span></a>
</span><span id="Parser-3172"><a href="#Parser-3172"><span class="linenos">3172</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-3173"><a href="#Parser-3173"><span class="linenos">3173</span></a>
</span><span id="Parser-3174"><a href="#Parser-3174"><span class="linenos">3174</span></a> <span class="c1"># We return early here so that the UNION isn&#39;t attached to the subquery by the</span>
</span><span id="Parser-3175"><a href="#Parser-3175"><span class="linenos">3175</span></a> <span class="c1"># following call to _parse_set_operations, but instead becomes the parent node</span>
</span><span id="Parser-3176"><a href="#Parser-3176"><span class="linenos">3176</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">parse_alias</span><span class="o">=</span><span class="n">parse_subquery_alias</span><span class="p">)</span>
</span><span id="Parser-3177"><a href="#Parser-3177"><span class="linenos">3177</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-3178"><a href="#Parser-3178"><span class="linenos">3178</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span>
</span><span id="Parser-3179"><a href="#Parser-3179"><span class="linenos">3179</span></a> <span class="k">elif</span> <span class="n">from_</span><span class="p">:</span>
</span><span id="Parser-3180"><a href="#Parser-3180"><span class="linenos">3180</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">from_</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-3181"><a href="#Parser-3181"><span class="linenos">3181</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SUMMARIZE</span><span class="p">):</span>
</span><span id="Parser-3182"><a href="#Parser-3182"><span class="linenos">3182</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="Parser-3183"><a href="#Parser-3183"><span class="linenos">3183</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="Parser-3184"><a href="#Parser-3184"><span class="linenos">3184</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Summarize</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">table</span><span class="o">=</span><span class="n">table</span><span class="p">)</span>
</span><span id="Parser-3185"><a href="#Parser-3185"><span class="linenos">3185</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DESCRIBE</span><span class="p">):</span>
</span><span id="Parser-3186"><a href="#Parser-3186"><span class="linenos">3186</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_describe</span><span class="p">()</span>
</span><span id="Parser-3187"><a href="#Parser-3187"><span class="linenos">3187</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STREAM&quot;</span><span class="p">):</span>
</span><span id="Parser-3188"><a href="#Parser-3188"><span class="linenos">3188</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
</span><span id="Parser-3189"><a href="#Parser-3189"><span class="linenos">3189</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
</span><span id="Parser-3190"><a href="#Parser-3190"><span class="linenos">3190</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Stream</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="Parser-3191"><a href="#Parser-3191"><span class="linenos">3191</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3192"><a href="#Parser-3192"><span class="linenos">3192</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-3193"><a href="#Parser-3193"><span class="linenos">3193</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3194"><a href="#Parser-3194"><span class="linenos">3194</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3195"><a href="#Parser-3195"><span class="linenos">3195</span></a>
</span><span id="Parser-3196"><a href="#Parser-3196"><span class="linenos">3196</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">parse_set_operation</span> <span class="k">else</span> <span class="n">this</span>
</span><span id="Parser-3197"><a href="#Parser-3197"><span class="linenos">3197</span></a>
</span><span id="Parser-3198"><a href="#Parser-3198"><span class="linenos">3198</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_recursive_with_search</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">RecursiveWithSearch</span><span class="p">]:</span>
</span><span id="Parser-3199"><a href="#Parser-3199"><span class="linenos">3199</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SEARCH&quot;</span><span class="p">)</span>
</span><span id="Parser-3200"><a href="#Parser-3200"><span class="linenos">3200</span></a>
</span><span id="Parser-3201"><a href="#Parser-3201"><span class="linenos">3201</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RECURSIVE_CTE_SEARCH_KIND</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-3202"><a href="#Parser-3202"><span class="linenos">3202</span></a>
</span><span id="Parser-3203"><a href="#Parser-3203"><span class="linenos">3203</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
</span><span id="Parser-3204"><a href="#Parser-3204"><span class="linenos">3204</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3205"><a href="#Parser-3205"><span class="linenos">3205</span></a>
</span><span id="Parser-3206"><a href="#Parser-3206"><span class="linenos">3206</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">)</span>
</span><span id="Parser-3207"><a href="#Parser-3207"><span class="linenos">3207</span></a>
</span><span id="Parser-3208"><a href="#Parser-3208"><span class="linenos">3208</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3209"><a href="#Parser-3209"><span class="linenos">3209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">RecursiveWithSearch</span><span class="p">,</span>
</span><span id="Parser-3210"><a href="#Parser-3210"><span class="linenos">3210</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="Parser-3211"><a href="#Parser-3211"><span class="linenos">3211</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span>
</span><span id="Parser-3212"><a href="#Parser-3212"><span class="linenos">3212</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span>
</span><span id="Parser-3213"><a href="#Parser-3213"><span class="linenos">3213</span></a> <span class="n">using</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;USING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span>
</span><span id="Parser-3214"><a href="#Parser-3214"><span class="linenos">3214</span></a> <span class="p">)</span>
</span><span id="Parser-3215"><a href="#Parser-3215"><span class="linenos">3215</span></a>
</span><span id="Parser-3216"><a href="#Parser-3216"><span class="linenos">3216</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_with</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_with_token</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">]:</span>
</span><span id="Parser-3217"><a href="#Parser-3217"><span class="linenos">3217</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_with_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
</span><span id="Parser-3218"><a href="#Parser-3218"><span class="linenos">3218</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3219"><a href="#Parser-3219"><span class="linenos">3219</span></a>
</span><span id="Parser-3220"><a href="#Parser-3220"><span class="linenos">3220</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="Parser-3221"><a href="#Parser-3221"><span class="linenos">3221</span></a> <span class="n">recursive</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">RECURSIVE</span><span class="p">)</span>
</span><span id="Parser-3222"><a href="#Parser-3222"><span class="linenos">3222</span></a>
</span><span id="Parser-3223"><a href="#Parser-3223"><span class="linenos">3223</span></a> <span class="n">last_comments</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3224"><a href="#Parser-3224"><span class="linenos">3224</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-3225"><a href="#Parser-3225"><span class="linenos">3225</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-3226"><a href="#Parser-3226"><span class="linenos">3226</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cte</span><span class="p">()</span>
</span><span id="Parser-3227"><a href="#Parser-3227"><span class="linenos">3227</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cte</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">):</span>
</span><span id="Parser-3228"><a href="#Parser-3228"><span class="linenos">3228</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cte</span><span class="p">)</span>
</span><span id="Parser-3229"><a href="#Parser-3229"><span class="linenos">3229</span></a> <span class="k">if</span> <span class="n">last_comments</span><span class="p">:</span>
</span><span id="Parser-3230"><a href="#Parser-3230"><span class="linenos">3230</span></a> <span class="n">cte</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">last_comments</span><span class="p">)</span>
</span><span id="Parser-3231"><a href="#Parser-3231"><span class="linenos">3231</span></a>
</span><span id="Parser-3232"><a href="#Parser-3232"><span class="linenos">3232</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
</span><span id="Parser-3233"><a href="#Parser-3233"><span class="linenos">3233</span></a> <span class="k">break</span>
</span><span id="Parser-3234"><a href="#Parser-3234"><span class="linenos">3234</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3235"><a href="#Parser-3235"><span class="linenos">3235</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">)</span>
</span><span id="Parser-3236"><a href="#Parser-3236"><span class="linenos">3236</span></a>
</span><span id="Parser-3237"><a href="#Parser-3237"><span class="linenos">3237</span></a> <span class="n">last_comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="Parser-3238"><a href="#Parser-3238"><span class="linenos">3238</span></a>
</span><span id="Parser-3239"><a href="#Parser-3239"><span class="linenos">3239</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3240"><a href="#Parser-3240"><span class="linenos">3240</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">With</span><span class="p">,</span>
</span><span id="Parser-3241"><a href="#Parser-3241"><span class="linenos">3241</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="Parser-3242"><a href="#Parser-3242"><span class="linenos">3242</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-3243"><a href="#Parser-3243"><span class="linenos">3243</span></a> <span class="n">recursive</span><span class="o">=</span><span class="n">recursive</span><span class="p">,</span>
</span><span id="Parser-3244"><a href="#Parser-3244"><span class="linenos">3244</span></a> <span class="n">search</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_recursive_with_search</span><span class="p">(),</span>
</span><span id="Parser-3245"><a href="#Parser-3245"><span class="linenos">3245</span></a> <span class="p">)</span>
</span><span id="Parser-3246"><a href="#Parser-3246"><span class="linenos">3246</span></a>
</span><span id="Parser-3247"><a href="#Parser-3247"><span class="linenos">3247</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_cte</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">]:</span>
</span><span id="Parser-3248"><a href="#Parser-3248"><span class="linenos">3248</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-3249"><a href="#Parser-3249"><span class="linenos">3249</span></a>
</span><span id="Parser-3250"><a href="#Parser-3250"><span class="linenos">3250</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">)</span>
</span><span id="Parser-3251"><a href="#Parser-3251"><span class="linenos">3251</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
</span><span id="Parser-3252"><a href="#Parser-3252"><span class="linenos">3252</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected CTE to have alias&quot;</span><span class="p">)</span>
</span><span id="Parser-3253"><a href="#Parser-3253"><span class="linenos">3253</span></a>
</span><span id="Parser-3254"><a href="#Parser-3254"><span class="linenos">3254</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">OPTIONAL_ALIAS_TOKEN_CTE</span><span class="p">:</span>
</span><span id="Parser-3255"><a href="#Parser-3255"><span class="linenos">3255</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-3256"><a href="#Parser-3256"><span class="linenos">3256</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3257"><a href="#Parser-3257"><span class="linenos">3257</span></a>
</span><span id="Parser-3258"><a href="#Parser-3258"><span class="linenos">3258</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="Parser-3259"><a href="#Parser-3259"><span class="linenos">3259</span></a>
</span><span id="Parser-3260"><a href="#Parser-3260"><span class="linenos">3260</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">):</span>
</span><span id="Parser-3261"><a href="#Parser-3261"><span class="linenos">3261</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-3262"><a href="#Parser-3262"><span class="linenos">3262</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">):</span>
</span><span id="Parser-3263"><a href="#Parser-3263"><span class="linenos">3263</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-3264"><a href="#Parser-3264"><span class="linenos">3264</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3265"><a href="#Parser-3265"><span class="linenos">3265</span></a> <span class="n">materialized</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3266"><a href="#Parser-3266"><span class="linenos">3266</span></a>
</span><span id="Parser-3267"><a href="#Parser-3267"><span class="linenos">3267</span></a> <span class="n">cte</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3268"><a href="#Parser-3268"><span class="linenos">3268</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CTE</span><span class="p">,</span>
</span><span id="Parser-3269"><a href="#Parser-3269"><span class="linenos">3269</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">),</span>
</span><span id="Parser-3270"><a href="#Parser-3270"><span class="linenos">3270</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span>
</span><span id="Parser-3271"><a href="#Parser-3271"><span class="linenos">3271</span></a> <span class="n">materialized</span><span class="o">=</span><span class="n">materialized</span><span class="p">,</span>
</span><span id="Parser-3272"><a href="#Parser-3272"><span class="linenos">3272</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="Parser-3273"><a href="#Parser-3273"><span class="linenos">3273</span></a> <span class="p">)</span>
</span><span id="Parser-3274"><a href="#Parser-3274"><span class="linenos">3274</span></a>
</span><span id="Parser-3275"><a href="#Parser-3275"><span class="linenos">3275</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cte</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">Values</span><span class="p">):</span>
</span><span id="Parser-3276"><a href="#Parser-3276"><span class="linenos">3276</span></a> <span class="n">cte</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">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">cte</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="s2">&quot;_values&quot;</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)))</span>
</span><span id="Parser-3277"><a href="#Parser-3277"><span class="linenos">3277</span></a>
</span><span id="Parser-3278"><a href="#Parser-3278"><span class="linenos">3278</span></a> <span class="k">return</span> <span class="n">cte</span>
</span><span id="Parser-3279"><a href="#Parser-3279"><span class="linenos">3279</span></a>
</span><span id="Parser-3280"><a href="#Parser-3280"><span class="linenos">3280</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_table_alias</span><span class="p">(</span>
</span><span id="Parser-3281"><a href="#Parser-3281"><span class="linenos">3281</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">alias_tokens</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">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3282"><a href="#Parser-3282"><span class="linenos">3282</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">TableAlias</span><span class="p">]:</span>
</span><span id="Parser-3283"><a href="#Parser-3283"><span class="linenos">3283</span></a> <span class="c1"># In some dialects, LIMIT and OFFSET can act as both identifiers and keywords (clauses)</span>
</span><span id="Parser-3284"><a href="#Parser-3284"><span class="linenos">3284</span></a> <span class="c1"># so this section tries to parse the clause version and if it fails, it treats the token</span>
</span><span id="Parser-3285"><a href="#Parser-3285"><span class="linenos">3285</span></a> <span class="c1"># as an identifier (alias)</span>
</span><span id="Parser-3286"><a href="#Parser-3286"><span class="linenos">3286</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_can_parse_limit_or_offset</span><span class="p">():</span>
</span><span id="Parser-3287"><a href="#Parser-3287"><span class="linenos">3287</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3288"><a href="#Parser-3288"><span class="linenos">3288</span></a>
</span><span id="Parser-3289"><a href="#Parser-3289"><span class="linenos">3289</span></a> <span class="n">any_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="Parser-3290"><a href="#Parser-3290"><span class="linenos">3290</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-3291"><a href="#Parser-3291"><span class="linenos">3291</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="n">alias_tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="Parser-3292"><a href="#Parser-3292"><span class="linenos">3292</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
</span><span id="Parser-3293"><a href="#Parser-3293"><span class="linenos">3293</span></a> <span class="p">)</span>
</span><span id="Parser-3294"><a href="#Parser-3294"><span class="linenos">3294</span></a>
</span><span id="Parser-3295"><a href="#Parser-3295"><span class="linenos">3295</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-3296"><a href="#Parser-3296"><span class="linenos">3296</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-3297"><a href="#Parser-3297"><span class="linenos">3297</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_parameter</span><span class="p">)</span>
</span><span id="Parser-3298"><a href="#Parser-3298"><span class="linenos">3298</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span> <span class="k">if</span> <span class="n">columns</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-3299"><a href="#Parser-3299"><span class="linenos">3299</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3300"><a href="#Parser-3300"><span class="linenos">3300</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3301"><a href="#Parser-3301"><span class="linenos">3301</span></a>
</span><span id="Parser-3302"><a href="#Parser-3302"><span class="linenos">3302</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">columns</span><span class="p">:</span>
</span><span id="Parser-3303"><a href="#Parser-3303"><span class="linenos">3303</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3304"><a href="#Parser-3304"><span class="linenos">3304</span></a>
</span><span id="Parser-3305"><a href="#Parser-3305"><span class="linenos">3305</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">)</span>
</span><span id="Parser-3306"><a href="#Parser-3306"><span class="linenos">3306</span></a>
</span><span id="Parser-3307"><a href="#Parser-3307"><span class="linenos">3307</span></a> <span class="c1"># We bubble up comments from the Identifier to the TableAlias</span>
</span><span id="Parser-3308"><a href="#Parser-3308"><span class="linenos">3308</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</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="Parser-3309"><a href="#Parser-3309"><span class="linenos">3309</span></a> <span class="n">table_alias</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">pop_comments</span><span class="p">())</span>
</span><span id="Parser-3310"><a href="#Parser-3310"><span class="linenos">3310</span></a>
</span><span id="Parser-3311"><a href="#Parser-3311"><span class="linenos">3311</span></a> <span class="k">return</span> <span class="n">table_alias</span>
</span><span id="Parser-3312"><a href="#Parser-3312"><span class="linenos">3312</span></a>
</span><span id="Parser-3313"><a href="#Parser-3313"><span class="linenos">3313</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_subquery</span><span class="p">(</span>
</span><span id="Parser-3314"><a href="#Parser-3314"><span class="linenos">3314</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="n">parse_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-3315"><a href="#Parser-3315"><span class="linenos">3315</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">Subquery</span><span class="p">]:</span>
</span><span id="Parser-3316"><a href="#Parser-3316"><span class="linenos">3316</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="Parser-3317"><a href="#Parser-3317"><span class="linenos">3317</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3318"><a href="#Parser-3318"><span class="linenos">3318</span></a>
</span><span id="Parser-3319"><a href="#Parser-3319"><span class="linenos">3319</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3320"><a href="#Parser-3320"><span class="linenos">3320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span>
</span><span id="Parser-3321"><a href="#Parser-3321"><span class="linenos">3321</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-3322"><a href="#Parser-3322"><span class="linenos">3322</span></a> <span class="n">pivots</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">(),</span>
</span><span id="Parser-3323"><a href="#Parser-3323"><span class="linenos">3323</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">parse_alias</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-3324"><a href="#Parser-3324"><span class="linenos">3324</span></a> <span class="n">sample</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">(),</span>
</span><span id="Parser-3325"><a href="#Parser-3325"><span class="linenos">3325</span></a> <span class="p">)</span>
</span><span id="Parser-3326"><a href="#Parser-3326"><span class="linenos">3326</span></a>
</span><span id="Parser-3327"><a href="#Parser-3327"><span class="linenos">3327</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_implicit_unnests_to_explicit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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="Parser-3328"><a href="#Parser-3328"><span class="linenos">3328</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.optimizer.normalize_identifiers</span><span class="w"> </span><span class="kn">import</span> <span class="n">normalize_identifiers</span> <span class="k">as</span> <span class="n">_norm</span>
</span><span id="Parser-3329"><a href="#Parser-3329"><span class="linenos">3329</span></a>
</span><span id="Parser-3330"><a href="#Parser-3330"><span class="linenos">3330</span></a> <span class="n">refs</span> <span class="o">=</span> <span class="p">{</span><span class="n">_norm</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;from&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">}</span>
</span><span id="Parser-3331"><a href="#Parser-3331"><span class="linenos">3331</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">this</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;joins&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]):</span>
</span><span id="Parser-3332"><a href="#Parser-3332"><span class="linenos">3332</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">join</span><span class="o">.</span><span class="n">this</span>
</span><span id="Parser-3333"><a href="#Parser-3333"><span class="linenos">3333</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Parser-3334"><a href="#Parser-3334"><span class="linenos">3334</span></a> <span class="n">normalized_table</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;maybe_column&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-3335"><a href="#Parser-3335"><span class="linenos">3335</span></a> <span class="n">normalized_table</span> <span class="o">=</span> <span class="n">_norm</span><span class="p">(</span><span class="n">normalized_table</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="Parser-3336"><a href="#Parser-3336"><span class="linenos">3336</span></a>
</span><span id="Parser-3337"><a href="#Parser-3337"><span class="linenos">3337</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">):</span>
</span><span id="Parser-3338"><a href="#Parser-3338"><span class="linenos">3338</span></a> <span class="k">if</span> <span class="n">normalized_table</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">refs</span><span class="p">:</span>
</span><span id="Parser-3339"><a href="#Parser-3339"><span class="linenos">3339</span></a> <span class="n">table_as_column</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">to_column</span><span class="p">()</span>
</span><span id="Parser-3340"><a href="#Parser-3340"><span class="linenos">3340</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">table_as_column</span><span class="p">])</span>
</span><span id="Parser-3341"><a href="#Parser-3341"><span class="linenos">3341</span></a>
</span><span id="Parser-3342"><a href="#Parser-3342"><span class="linenos">3342</span></a> <span class="c1"># Table.to_column creates a parent Alias node that we want to convert to</span>
</span><span id="Parser-3343"><a href="#Parser-3343"><span class="linenos">3343</span></a> <span class="c1"># a TableAlias and attach to the Unnest, so it matches the parser&#39;s output</span>
</span><span id="Parser-3344"><a href="#Parser-3344"><span class="linenos">3344</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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;alias&quot;</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">):</span>
</span><span id="Parser-3345"><a href="#Parser-3345"><span class="linenos">3345</span></a> <span class="n">table_as_column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">table_as_column</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-3346"><a href="#Parser-3346"><span class="linenos">3346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">unnest</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="p">[</span><span class="n">table</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">this</span><span class="p">],</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-3347"><a href="#Parser-3347"><span class="linenos">3347</span></a>
</span><span id="Parser-3348"><a href="#Parser-3348"><span class="linenos">3348</span></a> <span class="n">table</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">unnest</span><span class="p">)</span>
</span><span id="Parser-3349"><a href="#Parser-3349"><span class="linenos">3349</span></a>
</span><span id="Parser-3350"><a href="#Parser-3350"><span class="linenos">3350</span></a> <span class="n">refs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">normalized_table</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
</span><span id="Parser-3351"><a href="#Parser-3351"><span class="linenos">3351</span></a>
</span><span id="Parser-3352"><a href="#Parser-3352"><span class="linenos">3352</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3353"><a href="#Parser-3353"><span class="linenos">3353</span></a>
</span><span id="Parser-3354"><a href="#Parser-3354"><span class="linenos">3354</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_query_modifiers</span><span class="p">(</span>
</span><span id="Parser-3355"><a href="#Parser-3355"><span class="linenos">3355</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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="Parser-3356"><a href="#Parser-3356"><span class="linenos">3356</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="Parser-3357"><a href="#Parser-3357"><span class="linenos">3357</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="bp">self</span><span class="o">.</span><span class="n">MODIFIABLES</span><span class="p">):</span>
</span><span id="Parser-3358"><a href="#Parser-3358"><span class="linenos">3358</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_joins</span><span class="p">():</span>
</span><span id="Parser-3359"><a href="#Parser-3359"><span class="linenos">3359</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">join</span><span class="p">)</span>
</span><span id="Parser-3360"><a href="#Parser-3360"><span class="linenos">3360</span></a> <span class="k">for</span> <span class="n">lateral</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
</span><span id="Parser-3361"><a href="#Parser-3361"><span class="linenos">3361</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;laterals&quot;</span><span class="p">,</span> <span class="n">lateral</span><span class="p">)</span>
</span><span id="Parser-3362"><a href="#Parser-3362"><span class="linenos">3362</span></a>
</span><span id="Parser-3363"><a href="#Parser-3363"><span class="linenos">3363</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-3364"><a href="#Parser-3364"><span class="linenos">3364</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">QUERY_MODIFIER_PARSERS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-3365"><a href="#Parser-3365"><span class="linenos">3365</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">QUERY_MODIFIER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span><span class="p">]</span>
</span><span id="Parser-3366"><a href="#Parser-3366"><span class="linenos">3366</span></a> <span class="n">key</span><span class="p">,</span> <span class="n">expression</span> <span class="o">=</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</span><span id="Parser-3367"><a href="#Parser-3367"><span class="linenos">3367</span></a>
</span><span id="Parser-3368"><a href="#Parser-3368"><span class="linenos">3368</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="Parser-3369"><a href="#Parser-3369"><span class="linenos">3369</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="Parser-3370"><a href="#Parser-3370"><span class="linenos">3370</span></a> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;limit&quot;</span><span class="p">:</span>
</span><span id="Parser-3371"><a href="#Parser-3371"><span class="linenos">3371</span></a> <span class="n">offset</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">pop</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="Parser-3372"><a href="#Parser-3372"><span class="linenos">3372</span></a>
</span><span id="Parser-3373"><a href="#Parser-3373"><span class="linenos">3373</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
</span><span id="Parser-3374"><a href="#Parser-3374"><span class="linenos">3374</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
</span><span id="Parser-3375"><a href="#Parser-3375"><span class="linenos">3375</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
</span><span id="Parser-3376"><a href="#Parser-3376"><span class="linenos">3376</span></a>
</span><span id="Parser-3377"><a href="#Parser-3377"><span class="linenos">3377</span></a> <span class="n">limit_by_expressions</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
</span><span id="Parser-3378"><a href="#Parser-3378"><span class="linenos">3378</span></a> <span class="n">expression</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="kc">None</span><span class="p">)</span>
</span><span id="Parser-3379"><a href="#Parser-3379"><span class="linenos">3379</span></a> <span class="n">offset</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="n">limit_by_expressions</span><span class="p">)</span>
</span><span id="Parser-3380"><a href="#Parser-3380"><span class="linenos">3380</span></a> <span class="k">continue</span>
</span><span id="Parser-3381"><a href="#Parser-3381"><span class="linenos">3381</span></a> <span class="k">break</span>
</span><span id="Parser-3382"><a href="#Parser-3382"><span class="linenos">3382</span></a>
</span><span id="Parser-3383"><a href="#Parser-3383"><span class="linenos">3383</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_IMPLICIT_UNNEST</span> <span class="ow">and</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</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;from&quot;</span><span class="p">):</span>
</span><span id="Parser-3384"><a href="#Parser-3384"><span class="linenos">3384</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_implicit_unnests_to_explicit</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-3385"><a href="#Parser-3385"><span class="linenos">3385</span></a>
</span><span id="Parser-3386"><a href="#Parser-3386"><span class="linenos">3386</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3387"><a href="#Parser-3387"><span class="linenos">3387</span></a>
</span><span id="Parser-3388"><a href="#Parser-3388"><span class="linenos">3388</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_hint_fallback_to_string</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
</span><span id="Parser-3389"><a href="#Parser-3389"><span class="linenos">3389</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Parser-3390"><a href="#Parser-3390"><span class="linenos">3390</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-3391"><a href="#Parser-3391"><span class="linenos">3391</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-3392"><a href="#Parser-3392"><span class="linenos">3392</span></a>
</span><span id="Parser-3393"><a href="#Parser-3393"><span class="linenos">3393</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
</span><span id="Parser-3394"><a href="#Parser-3394"><span class="linenos">3394</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)])</span>
</span><span id="Parser-3395"><a href="#Parser-3395"><span class="linenos">3395</span></a>
</span><span id="Parser-3396"><a href="#Parser-3396"><span class="linenos">3396</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_hint_function_call</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-3397"><a href="#Parser-3397"><span class="linenos">3397</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_call</span><span class="p">()</span>
</span><span id="Parser-3398"><a href="#Parser-3398"><span class="linenos">3398</span></a>
</span><span id="Parser-3399"><a href="#Parser-3399"><span class="linenos">3399</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_hint_body</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
</span><span id="Parser-3400"><a href="#Parser-3400"><span class="linenos">3400</span></a> <span class="n">start_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-3401"><a href="#Parser-3401"><span class="linenos">3401</span></a> <span class="n">should_fallback_to_string</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-3402"><a href="#Parser-3402"><span class="linenos">3402</span></a>
</span><span id="Parser-3403"><a href="#Parser-3403"><span class="linenos">3403</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-3404"><a href="#Parser-3404"><span class="linenos">3404</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="Parser-3405"><a href="#Parser-3405"><span class="linenos">3405</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span>
</span><span id="Parser-3406"><a href="#Parser-3406"><span class="linenos">3406</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="Parser-3407"><a href="#Parser-3407"><span class="linenos">3407</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint_function_call</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-3408"><a href="#Parser-3408"><span class="linenos">3408</span></a> <span class="p">),</span>
</span><span id="Parser-3409"><a href="#Parser-3409"><span class="linenos">3409</span></a> <span class="p">[],</span>
</span><span id="Parser-3410"><a href="#Parser-3410"><span class="linenos">3410</span></a> <span class="p">):</span>
</span><span id="Parser-3411"><a href="#Parser-3411"><span class="linenos">3411</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
</span><span id="Parser-3412"><a href="#Parser-3412"><span class="linenos">3412</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
</span><span id="Parser-3413"><a href="#Parser-3413"><span class="linenos">3413</span></a> <span class="n">should_fallback_to_string</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-3414"><a href="#Parser-3414"><span class="linenos">3414</span></a>
</span><span id="Parser-3415"><a href="#Parser-3415"><span class="linenos">3415</span></a> <span class="k">if</span> <span class="n">should_fallback_to_string</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-3416"><a href="#Parser-3416"><span class="linenos">3416</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">start_index</span><span class="p">)</span>
</span><span id="Parser-3417"><a href="#Parser-3417"><span class="linenos">3417</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_hint_fallback_to_string</span><span class="p">()</span>
</span><span id="Parser-3418"><a href="#Parser-3418"><span class="linenos">3418</span></a>
</span><span id="Parser-3419"><a href="#Parser-3419"><span class="linenos">3419</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">hints</span><span class="p">)</span>
</span><span id="Parser-3420"><a href="#Parser-3420"><span class="linenos">3420</span></a>
</span><span id="Parser-3421"><a href="#Parser-3421"><span class="linenos">3421</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
</span><span id="Parser-3422"><a href="#Parser-3422"><span class="linenos">3422</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">:</span>
</span><span id="Parser-3423"><a href="#Parser-3423"><span class="linenos">3423</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">maybe_parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">into</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="Parser-3424"><a href="#Parser-3424"><span class="linenos">3424</span></a>
</span><span id="Parser-3425"><a href="#Parser-3425"><span class="linenos">3425</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3426"><a href="#Parser-3426"><span class="linenos">3426</span></a>
</span><span id="Parser-3427"><a href="#Parser-3427"><span class="linenos">3427</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_into</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">]:</span>
</span><span id="Parser-3428"><a href="#Parser-3428"><span class="linenos">3428</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
</span><span id="Parser-3429"><a href="#Parser-3429"><span class="linenos">3429</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3430"><a href="#Parser-3430"><span class="linenos">3430</span></a>
</span><span id="Parser-3431"><a href="#Parser-3431"><span class="linenos">3431</span></a> <span class="n">temp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">)</span>
</span><span id="Parser-3432"><a href="#Parser-3432"><span class="linenos">3432</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
</span><span id="Parser-3433"><a href="#Parser-3433"><span class="linenos">3433</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="Parser-3434"><a href="#Parser-3434"><span class="linenos">3434</span></a>
</span><span id="Parser-3435"><a href="#Parser-3435"><span class="linenos">3435</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3436"><a href="#Parser-3436"><span class="linenos">3436</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">temporary</span><span class="o">=</span><span class="n">temp</span><span class="p">,</span> <span class="n">unlogged</span><span class="o">=</span><span class="n">unlogged</span>
</span><span id="Parser-3437"><a href="#Parser-3437"><span class="linenos">3437</span></a> <span class="p">)</span>
</span><span id="Parser-3438"><a href="#Parser-3438"><span class="linenos">3438</span></a>
</span><span id="Parser-3439"><a href="#Parser-3439"><span class="linenos">3439</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_from</span><span class="p">(</span>
</span><span id="Parser-3440"><a href="#Parser-3440"><span class="linenos">3440</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</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="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-3441"><a href="#Parser-3441"><span class="linenos">3441</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">From</span><span class="p">]:</span>
</span><span id="Parser-3442"><a href="#Parser-3442"><span class="linenos">3442</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
</span><span id="Parser-3443"><a href="#Parser-3443"><span class="linenos">3443</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3444"><a href="#Parser-3444"><span class="linenos">3444</span></a>
</span><span id="Parser-3445"><a href="#Parser-3445"><span class="linenos">3445</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3446"><a href="#Parser-3446"><span class="linenos">3446</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
</span><span id="Parser-3447"><a href="#Parser-3447"><span class="linenos">3447</span></a> <span class="p">)</span>
</span><span id="Parser-3448"><a href="#Parser-3448"><span class="linenos">3448</span></a>
</span><span id="Parser-3449"><a href="#Parser-3449"><span class="linenos">3449</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_match_recognize_measure</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognizeMeasure</span><span class="p">:</span>
</span><span id="Parser-3450"><a href="#Parser-3450"><span class="linenos">3450</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3451"><a href="#Parser-3451"><span class="linenos">3451</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognizeMeasure</span><span class="p">,</span>
</span><span id="Parser-3452"><a href="#Parser-3452"><span class="linenos">3452</span></a> <span class="n">window_frame</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;FINAL&quot;</span><span class="p">,</span> <span class="s2">&quot;RUNNING&quot;</span><span class="p">))</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span>
</span><span id="Parser-3453"><a href="#Parser-3453"><span class="linenos">3453</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">(),</span>
</span><span id="Parser-3454"><a href="#Parser-3454"><span class="linenos">3454</span></a> <span class="p">)</span>
</span><span id="Parser-3455"><a href="#Parser-3455"><span class="linenos">3455</span></a>
</span><span id="Parser-3456"><a href="#Parser-3456"><span class="linenos">3456</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_match_recognize</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">]:</span>
</span><span id="Parser-3457"><a href="#Parser-3457"><span class="linenos">3457</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">):</span>
</span><span id="Parser-3458"><a href="#Parser-3458"><span class="linenos">3458</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3459"><a href="#Parser-3459"><span class="linenos">3459</span></a>
</span><span id="Parser-3460"><a href="#Parser-3460"><span class="linenos">3460</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="Parser-3461"><a href="#Parser-3461"><span class="linenos">3461</span></a>
</span><span id="Parser-3462"><a href="#Parser-3462"><span class="linenos">3462</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">()</span>
</span><span id="Parser-3463"><a href="#Parser-3463"><span class="linenos">3463</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
</span><span id="Parser-3464"><a href="#Parser-3464"><span class="linenos">3464</span></a>
</span><span id="Parser-3465"><a href="#Parser-3465"><span class="linenos">3465</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-3466"><a href="#Parser-3466"><span class="linenos">3466</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_match_recognize_measure</span><span class="p">)</span>
</span><span id="Parser-3467"><a href="#Parser-3467"><span class="linenos">3467</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MEASURES&quot;</span><span class="p">)</span>
</span><span id="Parser-3468"><a href="#Parser-3468"><span class="linenos">3468</span></a> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-3469"><a href="#Parser-3469"><span class="linenos">3469</span></a> <span class="p">)</span>
</span><span id="Parser-3470"><a href="#Parser-3470"><span class="linenos">3470</span></a>
</span><span id="Parser-3471"><a href="#Parser-3471"><span class="linenos">3471</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
</span><span id="Parser-3472"><a href="#Parser-3472"><span class="linenos">3472</span></a> <span class="n">rows</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="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
</span><span id="Parser-3473"><a href="#Parser-3473"><span class="linenos">3473</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
</span><span id="Parser-3474"><a href="#Parser-3474"><span class="linenos">3474</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;ALL ROWS PER MATCH&quot;</span>
</span><span id="Parser-3475"><a href="#Parser-3475"><span class="linenos">3475</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SHOW&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
</span><span id="Parser-3476"><a href="#Parser-3476"><span class="linenos">3476</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
</span><span id="Parser-3477"><a href="#Parser-3477"><span class="linenos">3477</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
</span><span id="Parser-3478"><a href="#Parser-3478"><span class="linenos">3478</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
</span><span id="Parser-3479"><a href="#Parser-3479"><span class="linenos">3479</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNMATCHED&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
</span><span id="Parser-3480"><a href="#Parser-3480"><span class="linenos">3480</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; WITH UNMATCHED ROWS&quot;</span>
</span><span id="Parser-3481"><a href="#Parser-3481"><span class="linenos">3481</span></a> <span class="n">rows</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">text</span><span class="p">)</span>
</span><span id="Parser-3482"><a href="#Parser-3482"><span class="linenos">3482</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3483"><a href="#Parser-3483"><span class="linenos">3483</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3484"><a href="#Parser-3484"><span class="linenos">3484</span></a>
</span><span id="Parser-3485"><a href="#Parser-3485"><span class="linenos">3485</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;SKIP&quot;</span><span class="p">):</span>
</span><span id="Parser-3486"><a href="#Parser-3486"><span class="linenos">3486</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
</span><span id="Parser-3487"><a href="#Parser-3487"><span class="linenos">3487</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PAST&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
</span><span id="Parser-3488"><a href="#Parser-3488"><span class="linenos">3488</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; PAST LAST ROW&quot;</span>
</span><span id="Parser-3489"><a href="#Parser-3489"><span class="linenos">3489</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;NEXT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
</span><span id="Parser-3490"><a href="#Parser-3490"><span class="linenos">3490</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; TO NEXT ROW&quot;</span>
</span><span id="Parser-3491"><a href="#Parser-3491"><span class="linenos">3491</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">):</span>
</span><span id="Parser-3492"><a href="#Parser-3492"><span class="linenos">3492</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO FIRST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-3493"><a href="#Parser-3493"><span class="linenos">3493</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
</span><span id="Parser-3494"><a href="#Parser-3494"><span class="linenos">3494</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO LAST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-3495"><a href="#Parser-3495"><span class="linenos">3495</span></a> <span class="n">after</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">text</span><span class="p">)</span>
</span><span id="Parser-3496"><a href="#Parser-3496"><span class="linenos">3496</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3497"><a href="#Parser-3497"><span class="linenos">3497</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3498"><a href="#Parser-3498"><span class="linenos">3498</span></a>
</span><span id="Parser-3499"><a href="#Parser-3499"><span class="linenos">3499</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATTERN&quot;</span><span class="p">):</span>
</span><span id="Parser-3500"><a href="#Parser-3500"><span class="linenos">3500</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="Parser-3501"><a href="#Parser-3501"><span class="linenos">3501</span></a>
</span><span id="Parser-3502"><a href="#Parser-3502"><span class="linenos">3502</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-3503"><a href="#Parser-3503"><span class="linenos">3503</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
</span><span id="Parser-3504"><a href="#Parser-3504"><span class="linenos">3504</span></a>
</span><span id="Parser-3505"><a href="#Parser-3505"><span class="linenos">3505</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
</span><span id="Parser-3506"><a href="#Parser-3506"><span class="linenos">3506</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Parser-3507"><a href="#Parser-3507"><span class="linenos">3507</span></a>
</span><span id="Parser-3508"><a href="#Parser-3508"><span class="linenos">3508</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="Parser-3509"><a href="#Parser-3509"><span class="linenos">3509</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
</span><span id="Parser-3510"><a href="#Parser-3510"><span class="linenos">3510</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="Parser-3511"><a href="#Parser-3511"><span class="linenos">3511</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">:</span>
</span><span id="Parser-3512"><a href="#Parser-3512"><span class="linenos">3512</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
</span><span id="Parser-3513"><a href="#Parser-3513"><span class="linenos">3513</span></a>
</span><span id="Parser-3514"><a href="#Parser-3514"><span class="linenos">3514</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-3515"><a href="#Parser-3515"><span class="linenos">3515</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-3516"><a href="#Parser-3516"><span class="linenos">3516</span></a>
</span><span id="Parser-3517"><a href="#Parser-3517"><span class="linenos">3517</span></a> <span class="k">if</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="Parser-3518"><a href="#Parser-3518"><span class="linenos">3518</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
</span><span id="Parser-3519"><a href="#Parser-3519"><span class="linenos">3519</span></a>
</span><span id="Parser-3520"><a href="#Parser-3520"><span class="linenos">3520</span></a> <span class="n">pattern</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="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
</span><span id="Parser-3521"><a href="#Parser-3521"><span class="linenos">3521</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3522"><a href="#Parser-3522"><span class="linenos">3522</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3523"><a href="#Parser-3523"><span class="linenos">3523</span></a>
</span><span id="Parser-3524"><a href="#Parser-3524"><span class="linenos">3524</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-3525"><a href="#Parser-3525"><span class="linenos">3525</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_name_as_expression</span><span class="p">)</span>
</span><span id="Parser-3526"><a href="#Parser-3526"><span class="linenos">3526</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFINE&quot;</span><span class="p">)</span>
</span><span id="Parser-3527"><a href="#Parser-3527"><span class="linenos">3527</span></a> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-3528"><a href="#Parser-3528"><span class="linenos">3528</span></a> <span class="p">)</span>
</span><span id="Parser-3529"><a href="#Parser-3529"><span class="linenos">3529</span></a>
</span><span id="Parser-3530"><a href="#Parser-3530"><span class="linenos">3530</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-3531"><a href="#Parser-3531"><span class="linenos">3531</span></a>
</span><span id="Parser-3532"><a href="#Parser-3532"><span class="linenos">3532</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3533"><a href="#Parser-3533"><span class="linenos">3533</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
</span><span id="Parser-3534"><a href="#Parser-3534"><span class="linenos">3534</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
</span><span id="Parser-3535"><a href="#Parser-3535"><span class="linenos">3535</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
</span><span id="Parser-3536"><a href="#Parser-3536"><span class="linenos">3536</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
</span><span id="Parser-3537"><a href="#Parser-3537"><span class="linenos">3537</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
</span><span id="Parser-3538"><a href="#Parser-3538"><span class="linenos">3538</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
</span><span id="Parser-3539"><a href="#Parser-3539"><span class="linenos">3539</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
</span><span id="Parser-3540"><a href="#Parser-3540"><span class="linenos">3540</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
</span><span id="Parser-3541"><a href="#Parser-3541"><span class="linenos">3541</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
</span><span id="Parser-3542"><a href="#Parser-3542"><span class="linenos">3542</span></a> <span class="p">)</span>
</span><span id="Parser-3543"><a href="#Parser-3543"><span class="linenos">3543</span></a>
</span><span id="Parser-3544"><a href="#Parser-3544"><span class="linenos">3544</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_lateral</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">]:</span>
</span><span id="Parser-3545"><a href="#Parser-3545"><span class="linenos">3545</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">)</span>
</span><span id="Parser-3546"><a href="#Parser-3546"><span class="linenos">3546</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cross_apply</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">):</span>
</span><span id="Parser-3547"><a href="#Parser-3547"><span class="linenos">3547</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-3548"><a href="#Parser-3548"><span class="linenos">3548</span></a>
</span><span id="Parser-3549"><a href="#Parser-3549"><span class="linenos">3549</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-3550"><a href="#Parser-3550"><span class="linenos">3550</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-3551"><a href="#Parser-3551"><span class="linenos">3551</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3552"><a href="#Parser-3552"><span class="linenos">3552</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3553"><a href="#Parser-3553"><span class="linenos">3553</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LATERAL</span><span class="p">):</span>
</span><span id="Parser-3554"><a href="#Parser-3554"><span class="linenos">3554</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-3555"><a href="#Parser-3555"><span class="linenos">3555</span></a> <span class="n">view</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">)</span>
</span><span id="Parser-3556"><a href="#Parser-3556"><span class="linenos">3556</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">)</span>
</span><span id="Parser-3557"><a href="#Parser-3557"><span class="linenos">3557</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3558"><a href="#Parser-3558"><span class="linenos">3558</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3559"><a href="#Parser-3559"><span class="linenos">3559</span></a>
</span><span id="Parser-3560"><a href="#Parser-3560"><span class="linenos">3560</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="Parser-3561"><a href="#Parser-3561"><span class="linenos">3561</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-3562"><a href="#Parser-3562"><span class="linenos">3562</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
</span><span id="Parser-3563"><a href="#Parser-3563"><span class="linenos">3563</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
</span><span id="Parser-3564"><a href="#Parser-3564"><span class="linenos">3564</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-3565"><a href="#Parser-3565"><span class="linenos">3565</span></a> <span class="p">)</span>
</span><span id="Parser-3566"><a href="#Parser-3566"><span class="linenos">3566</span></a>
</span><span id="Parser-3567"><a href="#Parser-3567"><span class="linenos">3567</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
</span><span id="Parser-3568"><a href="#Parser-3568"><span class="linenos">3568</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">(</span>
</span><span id="Parser-3569"><a href="#Parser-3569"><span class="linenos">3569</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-3570"><a href="#Parser-3570"><span class="linenos">3570</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="Parser-3571"><a href="#Parser-3571"><span class="linenos">3571</span></a> <span class="p">)</span>
</span><span id="Parser-3572"><a href="#Parser-3572"><span class="linenos">3572</span></a>
</span><span id="Parser-3573"><a href="#Parser-3573"><span class="linenos">3573</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
</span><span id="Parser-3574"><a href="#Parser-3574"><span class="linenos">3574</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-3575"><a href="#Parser-3575"><span class="linenos">3575</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="k">else</span> <span class="p">[]</span>
</span><span id="Parser-3576"><a href="#Parser-3576"><span class="linenos">3576</span></a> <span class="n">table_alias</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">TableAlias</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3577"><a href="#Parser-3577"><span class="linenos">3577</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
</span><span id="Parser-3578"><a href="#Parser-3578"><span class="linenos">3578</span></a> <span class="p">)</span>
</span><span id="Parser-3579"><a href="#Parser-3579"><span class="linenos">3579</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">))</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
</span><span id="Parser-3580"><a href="#Parser-3580"><span class="linenos">3580</span></a> <span class="c1"># We move the alias from the lateral&#39;s child node to the lateral itself</span>
</span><span id="Parser-3581"><a href="#Parser-3581"><span class="linenos">3581</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span><span id="Parser-3582"><a href="#Parser-3582"><span class="linenos">3582</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3583"><a href="#Parser-3583"><span class="linenos">3583</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
</span><span id="Parser-3584"><a href="#Parser-3584"><span class="linenos">3584</span></a>
</span><span id="Parser-3585"><a href="#Parser-3585"><span class="linenos">3585</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3586"><a href="#Parser-3586"><span class="linenos">3586</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
</span><span id="Parser-3587"><a href="#Parser-3587"><span class="linenos">3587</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-3588"><a href="#Parser-3588"><span class="linenos">3588</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
</span><span id="Parser-3589"><a href="#Parser-3589"><span class="linenos">3589</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
</span><span id="Parser-3590"><a href="#Parser-3590"><span class="linenos">3590</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</span><span class="p">,</span>
</span><span id="Parser-3591"><a href="#Parser-3591"><span class="linenos">3591</span></a> <span class="n">cross_apply</span><span class="o">=</span><span class="n">cross_apply</span><span class="p">,</span>
</span><span id="Parser-3592"><a href="#Parser-3592"><span class="linenos">3592</span></a> <span class="p">)</span>
</span><span id="Parser-3593"><a href="#Parser-3593"><span class="linenos">3593</span></a>
</span><span id="Parser-3594"><a href="#Parser-3594"><span class="linenos">3594</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_join_parts</span><span class="p">(</span>
</span><span id="Parser-3595"><a href="#Parser-3595"><span class="linenos">3595</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-3596"><a href="#Parser-3596"><span class="linenos">3596</span></a> <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="n">Token</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">Token</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">Token</span><span class="p">]]:</span>
</span><span id="Parser-3597"><a href="#Parser-3597"><span class="linenos">3597</span></a> <span class="k">return</span> <span class="p">(</span>
</span><span id="Parser-3598"><a href="#Parser-3598"><span class="linenos">3598</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
</span><span id="Parser-3599"><a href="#Parser-3599"><span class="linenos">3599</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
</span><span id="Parser-3600"><a href="#Parser-3600"><span class="linenos">3600</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
</span><span id="Parser-3601"><a href="#Parser-3601"><span class="linenos">3601</span></a> <span class="p">)</span>
</span><span id="Parser-3602"><a href="#Parser-3602"><span class="linenos">3602</span></a>
</span><span id="Parser-3603"><a href="#Parser-3603"><span class="linenos">3603</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_using_identifiers</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-3604"><a href="#Parser-3604"><span class="linenos">3604</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_column_as_identifier</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-3605"><a href="#Parser-3605"><span class="linenos">3605</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-3606"><a href="#Parser-3606"><span class="linenos">3606</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">Column</span><span class="p">):</span>
</span><span id="Parser-3607"><a href="#Parser-3607"><span class="linenos">3607</span></a> <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="Parser-3608"><a href="#Parser-3608"><span class="linenos">3608</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3609"><a href="#Parser-3609"><span class="linenos">3609</span></a>
</span><span id="Parser-3610"><a href="#Parser-3610"><span class="linenos">3610</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="n">_parse_column_as_identifier</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-3611"><a href="#Parser-3611"><span class="linenos">3611</span></a>
</span><span id="Parser-3612"><a href="#Parser-3612"><span class="linenos">3612</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_join</span><span class="p">(</span>
</span><span id="Parser-3613"><a href="#Parser-3613"><span class="linenos">3613</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</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="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-3614"><a href="#Parser-3614"><span class="linenos">3614</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">Join</span><span class="p">]:</span>
</span><span id="Parser-3615"><a href="#Parser-3615"><span class="linenos">3615</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="Parser-3616"><a href="#Parser-3616"><span class="linenos">3616</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_try_parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">)</span>
</span><span id="Parser-3617"><a href="#Parser-3617"><span class="linenos">3617</span></a> <span class="k">if</span> <span class="n">table</span><span class="p">:</span>
</span><span id="Parser-3618"><a href="#Parser-3618"><span class="linenos">3618</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">)</span>
</span><span id="Parser-3619"><a href="#Parser-3619"><span class="linenos">3619</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3620"><a href="#Parser-3620"><span class="linenos">3620</span></a>
</span><span id="Parser-3621"><a href="#Parser-3621"><span class="linenos">3621</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-3622"><a href="#Parser-3622"><span class="linenos">3622</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
</span><span id="Parser-3623"><a href="#Parser-3623"><span class="linenos">3623</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-3624"><a href="#Parser-3624"><span class="linenos">3624</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRAIGHT_JOIN</span><span class="p">)</span>
</span><span id="Parser-3625"><a href="#Parser-3625"><span class="linenos">3625</span></a>
</span><span id="Parser-3626"><a href="#Parser-3626"><span class="linenos">3626</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
</span><span id="Parser-3627"><a href="#Parser-3627"><span class="linenos">3627</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-3628"><a href="#Parser-3628"><span class="linenos">3628</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3629"><a href="#Parser-3629"><span class="linenos">3629</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3630"><a href="#Parser-3630"><span class="linenos">3630</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3631"><a href="#Parser-3631"><span class="linenos">3631</span></a>
</span><span id="Parser-3632"><a href="#Parser-3632"><span class="linenos">3632</span></a> <span class="n">outer_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-3633"><a href="#Parser-3633"><span class="linenos">3633</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-3634"><a href="#Parser-3634"><span class="linenos">3634</span></a>
</span><span id="Parser-3635"><a href="#Parser-3635"><span class="linenos">3635</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">outer_apply</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">cross_apply</span><span class="p">:</span>
</span><span id="Parser-3636"><a href="#Parser-3636"><span class="linenos">3636</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3637"><a href="#Parser-3637"><span class="linenos">3637</span></a>
</span><span id="Parser-3638"><a href="#Parser-3638"><span class="linenos">3638</span></a> <span class="n">kwargs</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">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
</span><span id="Parser-3639"><a href="#Parser-3639"><span class="linenos">3639</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="Parser-3640"><a href="#Parser-3640"><span class="linenos">3640</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;expressions&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="Parser-3641"><a href="#Parser-3641"><span class="linenos">3641</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)</span>
</span><span id="Parser-3642"><a href="#Parser-3642"><span class="linenos">3642</span></a> <span class="p">)</span>
</span><span id="Parser-3643"><a href="#Parser-3643"><span class="linenos">3643</span></a>
</span><span id="Parser-3644"><a href="#Parser-3644"><span class="linenos">3644</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
</span><span id="Parser-3645"><a href="#Parser-3645"><span class="linenos">3645</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-3646"><a href="#Parser-3646"><span class="linenos">3646</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
</span><span id="Parser-3647"><a href="#Parser-3647"><span class="linenos">3647</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-3648"><a href="#Parser-3648"><span class="linenos">3648</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
</span><span id="Parser-3649"><a href="#Parser-3649"><span class="linenos">3649</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kind</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-3650"><a href="#Parser-3650"><span class="linenos">3650</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
</span><span id="Parser-3651"><a href="#Parser-3651"><span class="linenos">3651</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;hint&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hint</span>
</span><span id="Parser-3652"><a href="#Parser-3652"><span class="linenos">3652</span></a>
</span><span id="Parser-3653"><a href="#Parser-3653"><span class="linenos">3653</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_CONDITION</span><span class="p">):</span>
</span><span id="Parser-3654"><a href="#Parser-3654"><span class="linenos">3654</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;match_condition&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_comparison</span><span class="p">)</span>
</span><span id="Parser-3655"><a href="#Parser-3655"><span class="linenos">3655</span></a>
</span><span id="Parser-3656"><a href="#Parser-3656"><span class="linenos">3656</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
</span><span id="Parser-3657"><a href="#Parser-3657"><span class="linenos">3657</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-3658"><a href="#Parser-3658"><span class="linenos">3658</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
</span><span id="Parser-3659"><a href="#Parser-3659"><span class="linenos">3659</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_using_identifiers</span><span class="p">()</span>
</span><span id="Parser-3660"><a href="#Parser-3660"><span class="linenos">3660</span></a> <span class="k">elif</span> <span class="p">(</span>
</span><span id="Parser-3661"><a href="#Parser-3661"><span class="linenos">3661</span></a> <span class="ow">not</span> <span class="p">(</span><span class="n">outer_apply</span> <span class="ow">or</span> <span class="n">cross_apply</span><span class="p">)</span>
</span><span id="Parser-3662"><a href="#Parser-3662"><span class="linenos">3662</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span>
</span><span id="Parser-3663"><a href="#Parser-3663"><span class="linenos">3663</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">))</span>
</span><span id="Parser-3664"><a href="#Parser-3664"><span class="linenos">3664</span></a> <span class="p">):</span>
</span><span id="Parser-3665"><a href="#Parser-3665"><span class="linenos">3665</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-3666"><a href="#Parser-3666"><span class="linenos">3666</span></a> <span class="n">joins</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">list</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_joins</span><span class="p">())</span>
</span><span id="Parser-3667"><a href="#Parser-3667"><span class="linenos">3667</span></a>
</span><span id="Parser-3668"><a href="#Parser-3668"><span class="linenos">3668</span></a> <span class="k">if</span> <span class="n">joins</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
</span><span id="Parser-3669"><a href="#Parser-3669"><span class="linenos">3669</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-3670"><a href="#Parser-3670"><span class="linenos">3670</span></a> <span class="k">elif</span> <span class="n">joins</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
</span><span id="Parser-3671"><a href="#Parser-3671"><span class="linenos">3671</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_using_identifiers</span><span class="p">()</span>
</span><span id="Parser-3672"><a href="#Parser-3672"><span class="linenos">3672</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3673"><a href="#Parser-3673"><span class="linenos">3673</span></a> <span class="n">joins</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3674"><a href="#Parser-3674"><span class="linenos">3674</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-3675"><a href="#Parser-3675"><span class="linenos">3675</span></a>
</span><span id="Parser-3676"><a href="#Parser-3676"><span class="linenos">3676</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">joins</span> <span class="k">if</span> <span class="n">joins</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="Parser-3677"><a href="#Parser-3677"><span class="linenos">3677</span></a>
</span><span id="Parser-3678"><a href="#Parser-3678"><span class="linenos">3678</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">if</span> <span class="n">token</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">]</span>
</span><span id="Parser-3679"><a href="#Parser-3679"><span class="linenos">3679</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="Parser-3680"><a href="#Parser-3680"><span class="linenos">3680</span></a>
</span><span id="Parser-3681"><a href="#Parser-3681"><span class="linenos">3681</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_opclass</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-3682"><a href="#Parser-3682"><span class="linenos">3682</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-3683"><a href="#Parser-3683"><span class="linenos">3683</span></a>
</span><span id="Parser-3684"><a href="#Parser-3684"><span class="linenos">3684</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPCLASS_FOLLOW_KEYWORDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-3685"><a href="#Parser-3685"><span class="linenos">3685</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3686"><a href="#Parser-3686"><span class="linenos">3686</span></a>
</span><span id="Parser-3687"><a href="#Parser-3687"><span class="linenos">3687</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPTYPE_FOLLOW_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-3688"><a href="#Parser-3688"><span class="linenos">3688</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Opclass</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="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
</span><span id="Parser-3689"><a href="#Parser-3689"><span class="linenos">3689</span></a>
</span><span id="Parser-3690"><a href="#Parser-3690"><span class="linenos">3690</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3691"><a href="#Parser-3691"><span class="linenos">3691</span></a>
</span><span id="Parser-3692"><a href="#Parser-3692"><span class="linenos">3692</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_index_params</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexParameters</span><span class="p">:</span>
</span><span id="Parser-3693"><a href="#Parser-3693"><span class="linenos">3693</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-3694"><a href="#Parser-3694"><span class="linenos">3694</span></a>
</span><span id="Parser-3695"><a href="#Parser-3695"><span class="linenos">3695</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-3696"><a href="#Parser-3696"><span class="linenos">3696</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_with_operator</span><span class="p">)</span>
</span><span id="Parser-3697"><a href="#Parser-3697"><span class="linenos">3697</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3698"><a href="#Parser-3698"><span class="linenos">3698</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3699"><a href="#Parser-3699"><span class="linenos">3699</span></a>
</span><span id="Parser-3700"><a href="#Parser-3700"><span class="linenos">3700</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-3701"><a href="#Parser-3701"><span class="linenos">3701</span></a> <span class="n">partition_by</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">()</span>
</span><span id="Parser-3702"><a href="#Parser-3702"><span class="linenos">3702</span></a> <span class="n">with_storage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_properties</span><span class="p">()</span>
</span><span id="Parser-3703"><a href="#Parser-3703"><span class="linenos">3703</span></a> <span class="n">tablespace</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-3704"><a href="#Parser-3704"><span class="linenos">3704</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-3705"><a href="#Parser-3705"><span class="linenos">3705</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;TABLESPACE&quot;</span><span class="p">)</span>
</span><span id="Parser-3706"><a href="#Parser-3706"><span class="linenos">3706</span></a> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-3707"><a href="#Parser-3707"><span class="linenos">3707</span></a> <span class="p">)</span>
</span><span id="Parser-3708"><a href="#Parser-3708"><span class="linenos">3708</span></a> <span class="n">where</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">()</span>
</span><span id="Parser-3709"><a href="#Parser-3709"><span class="linenos">3709</span></a>
</span><span id="Parser-3710"><a href="#Parser-3710"><span class="linenos">3710</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-3711"><a href="#Parser-3711"><span class="linenos">3711</span></a>
</span><span id="Parser-3712"><a href="#Parser-3712"><span class="linenos">3712</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3713"><a href="#Parser-3713"><span class="linenos">3713</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IndexParameters</span><span class="p">,</span>
</span><span id="Parser-3714"><a href="#Parser-3714"><span class="linenos">3714</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
</span><span id="Parser-3715"><a href="#Parser-3715"><span class="linenos">3715</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
</span><span id="Parser-3716"><a href="#Parser-3716"><span class="linenos">3716</span></a> <span class="n">include</span><span class="o">=</span><span class="n">include</span><span class="p">,</span>
</span><span id="Parser-3717"><a href="#Parser-3717"><span class="linenos">3717</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition_by</span><span class="p">,</span>
</span><span id="Parser-3718"><a href="#Parser-3718"><span class="linenos">3718</span></a> <span class="n">where</span><span class="o">=</span><span class="n">where</span><span class="p">,</span>
</span><span id="Parser-3719"><a href="#Parser-3719"><span class="linenos">3719</span></a> <span class="n">with_storage</span><span class="o">=</span><span class="n">with_storage</span><span class="p">,</span>
</span><span id="Parser-3720"><a href="#Parser-3720"><span class="linenos">3720</span></a> <span class="n">tablespace</span><span class="o">=</span><span class="n">tablespace</span><span class="p">,</span>
</span><span id="Parser-3721"><a href="#Parser-3721"><span class="linenos">3721</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
</span><span id="Parser-3722"><a href="#Parser-3722"><span class="linenos">3722</span></a> <span class="p">)</span>
</span><span id="Parser-3723"><a href="#Parser-3723"><span class="linenos">3723</span></a>
</span><span id="Parser-3724"><a href="#Parser-3724"><span class="linenos">3724</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_index</span><span class="p">(</span>
</span><span id="Parser-3725"><a href="#Parser-3725"><span class="linenos">3725</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">index</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 class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-3726"><a href="#Parser-3726"><span class="linenos">3726</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">Index</span><span class="p">]:</span>
</span><span id="Parser-3727"><a href="#Parser-3727"><span class="linenos">3727</span></a> <span class="k">if</span> <span class="n">index</span> <span class="ow">or</span> <span class="n">anonymous</span><span class="p">:</span>
</span><span id="Parser-3728"><a href="#Parser-3728"><span class="linenos">3728</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3729"><a href="#Parser-3729"><span class="linenos">3729</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3730"><a href="#Parser-3730"><span class="linenos">3730</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3731"><a href="#Parser-3731"><span class="linenos">3731</span></a>
</span><span id="Parser-3732"><a href="#Parser-3732"><span class="linenos">3732</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
</span><span id="Parser-3733"><a href="#Parser-3733"><span class="linenos">3733</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span> <span class="c1"># hive</span>
</span><span id="Parser-3734"><a href="#Parser-3734"><span class="linenos">3734</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-3735"><a href="#Parser-3735"><span class="linenos">3735</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3736"><a href="#Parser-3736"><span class="linenos">3736</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">)</span>
</span><span id="Parser-3737"><a href="#Parser-3737"><span class="linenos">3737</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PRIMARY&quot;</span><span class="p">)</span>
</span><span id="Parser-3738"><a href="#Parser-3738"><span class="linenos">3738</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AMP&quot;</span><span class="p">)</span>
</span><span id="Parser-3739"><a href="#Parser-3739"><span class="linenos">3739</span></a>
</span><span id="Parser-3740"><a href="#Parser-3740"><span class="linenos">3740</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">):</span>
</span><span id="Parser-3741"><a href="#Parser-3741"><span class="linenos">3741</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3742"><a href="#Parser-3742"><span class="linenos">3742</span></a>
</span><span id="Parser-3743"><a href="#Parser-3743"><span class="linenos">3743</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-3744"><a href="#Parser-3744"><span class="linenos">3744</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3745"><a href="#Parser-3745"><span class="linenos">3745</span></a>
</span><span id="Parser-3746"><a href="#Parser-3746"><span class="linenos">3746</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_index_params</span><span class="p">()</span>
</span><span id="Parser-3747"><a href="#Parser-3747"><span class="linenos">3747</span></a>
</span><span id="Parser-3748"><a href="#Parser-3748"><span class="linenos">3748</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3749"><a href="#Parser-3749"><span class="linenos">3749</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
</span><span id="Parser-3750"><a href="#Parser-3750"><span class="linenos">3750</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
</span><span id="Parser-3751"><a href="#Parser-3751"><span class="linenos">3751</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
</span><span id="Parser-3752"><a href="#Parser-3752"><span class="linenos">3752</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
</span><span id="Parser-3753"><a href="#Parser-3753"><span class="linenos">3753</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
</span><span id="Parser-3754"><a href="#Parser-3754"><span class="linenos">3754</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
</span><span id="Parser-3755"><a href="#Parser-3755"><span class="linenos">3755</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
</span><span id="Parser-3756"><a href="#Parser-3756"><span class="linenos">3756</span></a> <span class="p">)</span>
</span><span id="Parser-3757"><a href="#Parser-3757"><span class="linenos">3757</span></a>
</span><span id="Parser-3758"><a href="#Parser-3758"><span class="linenos">3758</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_table_hints</span><span class="p">(</span><span class="bp">self</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">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><span id="Parser-3759"><a href="#Parser-3759"><span class="linenos">3759</span></a> <span class="n">hints</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="o">=</span> <span class="p">[]</span>
</span><span id="Parser-3760"><a href="#Parser-3760"><span class="linenos">3760</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-3761"><a href="#Parser-3761"><span class="linenos">3761</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
</span><span id="Parser-3762"><a href="#Parser-3762"><span class="linenos">3762</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="Parser-3763"><a href="#Parser-3763"><span class="linenos">3763</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3764"><a href="#Parser-3764"><span class="linenos">3764</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">,</span>
</span><span id="Parser-3765"><a href="#Parser-3765"><span class="linenos">3765</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="Parser-3766"><a href="#Parser-3766"><span class="linenos">3766</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-3767"><a href="#Parser-3767"><span class="linenos">3767</span></a> <span class="p">),</span>
</span><span id="Parser-3768"><a href="#Parser-3768"><span class="linenos">3768</span></a> <span class="p">)</span>
</span><span id="Parser-3769"><a href="#Parser-3769"><span class="linenos">3769</span></a> <span class="p">)</span>
</span><span id="Parser-3770"><a href="#Parser-3770"><span class="linenos">3770</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-3771"><a href="#Parser-3771"><span class="linenos">3771</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3772"><a href="#Parser-3772"><span class="linenos">3772</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
</span><span id="Parser-3773"><a href="#Parser-3773"><span class="linenos">3773</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
</span><span id="Parser-3774"><a href="#Parser-3774"><span class="linenos">3774</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-3775"><a href="#Parser-3775"><span class="linenos">3775</span></a>
</span><span id="Parser-3776"><a href="#Parser-3776"><span class="linenos">3776</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">KEY</span><span class="p">))</span>
</span><span id="Parser-3777"><a href="#Parser-3777"><span class="linenos">3777</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
</span><span id="Parser-3778"><a href="#Parser-3778"><span class="linenos">3778</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-3779"><a href="#Parser-3779"><span class="linenos">3779</span></a>
</span><span id="Parser-3780"><a href="#Parser-3780"><span class="linenos">3780</span></a> <span class="n">hint</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="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
</span><span id="Parser-3781"><a href="#Parser-3781"><span class="linenos">3781</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
</span><span id="Parser-3782"><a href="#Parser-3782"><span class="linenos">3782</span></a>
</span><span id="Parser-3783"><a href="#Parser-3783"><span class="linenos">3783</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="Parser-3784"><a href="#Parser-3784"><span class="linenos">3784</span></a>
</span><span id="Parser-3785"><a href="#Parser-3785"><span class="linenos">3785</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</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">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="Parser-3786"><a href="#Parser-3786"><span class="linenos">3786</span></a> <span class="k">return</span> <span class="p">(</span>
</span><span id="Parser-3787"><a href="#Parser-3787"><span class="linenos">3787</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
</span><span id="Parser-3788"><a href="#Parser-3788"><span class="linenos">3788</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-3789"><a href="#Parser-3789"><span class="linenos">3789</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
</span><span id="Parser-3790"><a href="#Parser-3790"><span class="linenos">3790</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="Parser-3791"><a href="#Parser-3791"><span class="linenos">3791</span></a> <span class="p">)</span>
</span><span id="Parser-3792"><a href="#Parser-3792"><span class="linenos">3792</span></a>
</span><span id="Parser-3793"><a href="#Parser-3793"><span class="linenos">3793</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_table_parts</span><span class="p">(</span>
</span><span id="Parser-3794"><a href="#Parser-3794"><span class="linenos">3794</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">schema</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="n">is_db_reference</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="n">wildcard</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-3795"><a href="#Parser-3795"><span class="linenos">3795</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span>
</span><span id="Parser-3796"><a href="#Parser-3796"><span class="linenos">3796</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3797"><a href="#Parser-3797"><span class="linenos">3797</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3798"><a href="#Parser-3798"><span class="linenos">3798</span></a> <span class="n">table</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="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
</span><span id="Parser-3799"><a href="#Parser-3799"><span class="linenos">3799</span></a>
</span><span id="Parser-3800"><a href="#Parser-3800"><span class="linenos">3800</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
</span><span id="Parser-3801"><a href="#Parser-3801"><span class="linenos">3801</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
</span><span id="Parser-3802"><a href="#Parser-3802"><span class="linenos">3802</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
</span><span id="Parser-3803"><a href="#Parser-3803"><span class="linenos">3803</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3804"><a href="#Parser-3804"><span class="linenos">3804</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
</span><span id="Parser-3805"><a href="#Parser-3805"><span class="linenos">3805</span></a> <span class="p">)</span>
</span><span id="Parser-3806"><a href="#Parser-3806"><span class="linenos">3806</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3807"><a href="#Parser-3807"><span class="linenos">3807</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
</span><span id="Parser-3808"><a href="#Parser-3808"><span class="linenos">3808</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
</span><span id="Parser-3809"><a href="#Parser-3809"><span class="linenos">3809</span></a> <span class="c1"># &quot;&quot; used for tsql FROM a..b case</span>
</span><span id="Parser-3810"><a href="#Parser-3810"><span class="linenos">3810</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
</span><span id="Parser-3811"><a href="#Parser-3811"><span class="linenos">3811</span></a>
</span><span id="Parser-3812"><a href="#Parser-3812"><span class="linenos">3812</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Parser-3813"><a href="#Parser-3813"><span class="linenos">3813</span></a> <span class="n">wildcard</span>
</span><span id="Parser-3814"><a href="#Parser-3814"><span class="linenos">3814</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">()</span>
</span><span id="Parser-3815"><a href="#Parser-3815"><span class="linenos">3815</span></a> <span class="ow">and</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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="ow">or</span> <span class="ow">not</span> <span class="n">table</span><span class="p">)</span>
</span><span id="Parser-3816"><a href="#Parser-3816"><span class="linenos">3816</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">)</span>
</span><span id="Parser-3817"><a href="#Parser-3817"><span class="linenos">3817</span></a> <span class="p">):</span>
</span><span id="Parser-3818"><a href="#Parser-3818"><span class="linenos">3818</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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="Parser-3819"><a href="#Parser-3819"><span class="linenos">3819</span></a> <span class="n">table</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span> <span class="o">+=</span> <span class="s2">&quot;*&quot;</span>
</span><span id="Parser-3820"><a href="#Parser-3820"><span class="linenos">3820</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3821"><a href="#Parser-3821"><span class="linenos">3821</span></a> <span class="n">table</span> <span class="o">=</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="s2">&quot;*&quot;</span><span class="p">)</span>
</span><span id="Parser-3822"><a href="#Parser-3822"><span class="linenos">3822</span></a>
</span><span id="Parser-3823"><a href="#Parser-3823"><span class="linenos">3823</span></a> <span class="c1"># We bubble up comments from the Identifier to the Table</span>
</span><span id="Parser-3824"><a href="#Parser-3824"><span class="linenos">3824</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="n">table</span><span class="o">.</span><span class="n">pop_comments</span><span class="p">()</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</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="k">else</span> <span class="kc">None</span>
</span><span id="Parser-3825"><a href="#Parser-3825"><span class="linenos">3825</span></a>
</span><span id="Parser-3826"><a href="#Parser-3826"><span class="linenos">3826</span></a> <span class="k">if</span> <span class="n">is_db_reference</span><span class="p">:</span>
</span><span id="Parser-3827"><a href="#Parser-3827"><span class="linenos">3827</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
</span><span id="Parser-3828"><a href="#Parser-3828"><span class="linenos">3828</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
</span><span id="Parser-3829"><a href="#Parser-3829"><span class="linenos">3829</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3830"><a href="#Parser-3830"><span class="linenos">3830</span></a>
</span><span id="Parser-3831"><a href="#Parser-3831"><span class="linenos">3831</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">is_db_reference</span><span class="p">:</span>
</span><span id="Parser-3832"><a href="#Parser-3832"><span class="linenos">3832</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected table name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Parser-3833"><a href="#Parser-3833"><span class="linenos">3833</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db</span> <span class="ow">and</span> <span class="n">is_db_reference</span><span class="p">:</span>
</span><span id="Parser-3834"><a href="#Parser-3834"><span class="linenos">3834</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected database name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Parser-3835"><a href="#Parser-3835"><span class="linenos">3835</span></a>
</span><span id="Parser-3836"><a href="#Parser-3836"><span class="linenos">3836</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3837"><a href="#Parser-3837"><span class="linenos">3837</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span>
</span><span id="Parser-3838"><a href="#Parser-3838"><span class="linenos">3838</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="Parser-3839"><a href="#Parser-3839"><span class="linenos">3839</span></a> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
</span><span id="Parser-3840"><a href="#Parser-3840"><span class="linenos">3840</span></a> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span>
</span><span id="Parser-3841"><a href="#Parser-3841"><span class="linenos">3841</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">catalog</span><span class="p">,</span>
</span><span id="Parser-3842"><a href="#Parser-3842"><span class="linenos">3842</span></a> <span class="p">)</span>
</span><span id="Parser-3843"><a href="#Parser-3843"><span class="linenos">3843</span></a>
</span><span id="Parser-3844"><a href="#Parser-3844"><span class="linenos">3844</span></a> <span class="n">changes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_changes</span><span class="p">()</span>
</span><span id="Parser-3845"><a href="#Parser-3845"><span class="linenos">3845</span></a> <span class="k">if</span> <span class="n">changes</span><span class="p">:</span>
</span><span id="Parser-3846"><a href="#Parser-3846"><span class="linenos">3846</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;changes&quot;</span><span class="p">,</span> <span class="n">changes</span><span class="p">)</span>
</span><span id="Parser-3847"><a href="#Parser-3847"><span class="linenos">3847</span></a>
</span><span id="Parser-3848"><a href="#Parser-3848"><span class="linenos">3848</span></a> <span class="n">at_before</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_historical_data</span><span class="p">()</span>
</span><span id="Parser-3849"><a href="#Parser-3849"><span class="linenos">3849</span></a> <span class="k">if</span> <span class="n">at_before</span><span class="p">:</span>
</span><span id="Parser-3850"><a href="#Parser-3850"><span class="linenos">3850</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;when&quot;</span><span class="p">,</span> <span class="n">at_before</span><span class="p">)</span>
</span><span id="Parser-3851"><a href="#Parser-3851"><span class="linenos">3851</span></a>
</span><span id="Parser-3852"><a href="#Parser-3852"><span class="linenos">3852</span></a> <span class="n">pivots</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">()</span>
</span><span id="Parser-3853"><a href="#Parser-3853"><span class="linenos">3853</span></a> <span class="k">if</span> <span class="n">pivots</span><span class="p">:</span>
</span><span id="Parser-3854"><a href="#Parser-3854"><span class="linenos">3854</span></a> <span class="n">table</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="n">pivots</span><span class="p">)</span>
</span><span id="Parser-3855"><a href="#Parser-3855"><span class="linenos">3855</span></a>
</span><span id="Parser-3856"><a href="#Parser-3856"><span class="linenos">3856</span></a> <span class="k">return</span> <span class="n">table</span>
</span><span id="Parser-3857"><a href="#Parser-3857"><span class="linenos">3857</span></a>
</span><span id="Parser-3858"><a href="#Parser-3858"><span class="linenos">3858</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_table</span><span class="p">(</span>
</span><span id="Parser-3859"><a href="#Parser-3859"><span class="linenos">3859</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-3860"><a href="#Parser-3860"><span class="linenos">3860</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-3861"><a href="#Parser-3861"><span class="linenos">3861</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-3862"><a href="#Parser-3862"><span class="linenos">3862</span></a> <span class="n">alias_tokens</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">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-3863"><a href="#Parser-3863"><span class="linenos">3863</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-3864"><a href="#Parser-3864"><span class="linenos">3864</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-3865"><a href="#Parser-3865"><span class="linenos">3865</span></a> <span class="n">parse_partition</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-3866"><a href="#Parser-3866"><span class="linenos">3866</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="Parser-3867"><a href="#Parser-3867"><span class="linenos">3867</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">()</span>
</span><span id="Parser-3868"><a href="#Parser-3868"><span class="linenos">3868</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
</span><span id="Parser-3869"><a href="#Parser-3869"><span class="linenos">3869</span></a> <span class="k">return</span> <span class="n">lateral</span>
</span><span id="Parser-3870"><a href="#Parser-3870"><span class="linenos">3870</span></a>
</span><span id="Parser-3871"><a href="#Parser-3871"><span class="linenos">3871</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
</span><span id="Parser-3872"><a href="#Parser-3872"><span class="linenos">3872</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
</span><span id="Parser-3873"><a href="#Parser-3873"><span class="linenos">3873</span></a> <span class="k">return</span> <span class="n">unnest</span>
</span><span id="Parser-3874"><a href="#Parser-3874"><span class="linenos">3874</span></a>
</span><span id="Parser-3875"><a href="#Parser-3875"><span class="linenos">3875</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span>
</span><span id="Parser-3876"><a href="#Parser-3876"><span class="linenos">3876</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
</span><span id="Parser-3877"><a href="#Parser-3877"><span class="linenos">3877</span></a> <span class="k">return</span> <span class="n">values</span>
</span><span id="Parser-3878"><a href="#Parser-3878"><span class="linenos">3878</span></a>
</span><span id="Parser-3879"><a href="#Parser-3879"><span class="linenos">3879</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-3880"><a href="#Parser-3880"><span class="linenos">3880</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
</span><span id="Parser-3881"><a href="#Parser-3881"><span class="linenos">3881</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subquery</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;pivots&quot;</span><span class="p">):</span>
</span><span id="Parser-3882"><a href="#Parser-3882"><span class="linenos">3882</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
</span><span id="Parser-3883"><a href="#Parser-3883"><span class="linenos">3883</span></a> <span class="k">return</span> <span class="n">subquery</span>
</span><span id="Parser-3884"><a href="#Parser-3884"><span class="linenos">3884</span></a>
</span><span id="Parser-3885"><a href="#Parser-3885"><span class="linenos">3885</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
</span><span id="Parser-3886"><a href="#Parser-3886"><span class="linenos">3886</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-3887"><a href="#Parser-3887"><span class="linenos">3887</span></a>
</span><span id="Parser-3888"><a href="#Parser-3888"><span class="linenos">3888</span></a> <span class="n">rows_from</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ROWS&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span>
</span><span id="Parser-3889"><a href="#Parser-3889"><span class="linenos">3889</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span>
</span><span id="Parser-3890"><a href="#Parser-3890"><span class="linenos">3890</span></a> <span class="p">)</span>
</span><span id="Parser-3891"><a href="#Parser-3891"><span class="linenos">3891</span></a> <span class="n">rows_from</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">rows_from</span><span class="o">=</span><span class="n">rows_from</span><span class="p">)</span> <span class="k">if</span> <span class="n">rows_from</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-3892"><a href="#Parser-3892"><span class="linenos">3892</span></a>
</span><span id="Parser-3893"><a href="#Parser-3893"><span class="linenos">3893</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ONLY</span><span class="p">)</span>
</span><span id="Parser-3894"><a href="#Parser-3894"><span class="linenos">3894</span></a>
</span><span id="Parser-3895"><a href="#Parser-3895"><span class="linenos">3895</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
</span><span id="Parser-3896"><a href="#Parser-3896"><span class="linenos">3896</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
</span><span id="Parser-3897"><a href="#Parser-3897"><span class="linenos">3897</span></a> <span class="n">bracket</span>
</span><span id="Parser-3898"><a href="#Parser-3898"><span class="linenos">3898</span></a> <span class="ow">or</span> <span class="n">rows_from</span>
</span><span id="Parser-3899"><a href="#Parser-3899"><span class="linenos">3899</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span>
</span><span id="Parser-3900"><a href="#Parser-3900"><span class="linenos">3900</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">)</span>
</span><span id="Parser-3901"><a href="#Parser-3901"><span class="linenos">3901</span></a> <span class="p">),</span>
</span><span id="Parser-3902"><a href="#Parser-3902"><span class="linenos">3902</span></a> <span class="p">)</span>
</span><span id="Parser-3903"><a href="#Parser-3903"><span class="linenos">3903</span></a>
</span><span id="Parser-3904"><a href="#Parser-3904"><span class="linenos">3904</span></a> <span class="k">if</span> <span class="n">only</span><span class="p">:</span>
</span><span id="Parser-3905"><a href="#Parser-3905"><span class="linenos">3905</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;only&quot;</span><span class="p">,</span> <span class="n">only</span><span class="p">)</span>
</span><span id="Parser-3906"><a href="#Parser-3906"><span class="linenos">3906</span></a>
</span><span id="Parser-3907"><a href="#Parser-3907"><span class="linenos">3907</span></a> <span class="c1"># Postgres supports a wildcard (table) suffix operator, which is a no-op in this context</span>
</span><span id="Parser-3908"><a href="#Parser-3908"><span class="linenos">3908</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span>
</span><span id="Parser-3909"><a href="#Parser-3909"><span class="linenos">3909</span></a>
</span><span id="Parser-3910"><a href="#Parser-3910"><span class="linenos">3910</span></a> <span class="n">parse_partition</span> <span class="o">=</span> <span class="n">parse_partition</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUPPORTS_PARTITION_SELECTION</span>
</span><span id="Parser-3911"><a href="#Parser-3911"><span class="linenos">3911</span></a> <span class="k">if</span> <span class="n">parse_partition</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-3912"><a href="#Parser-3912"><span class="linenos">3912</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;partition&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">())</span>
</span><span id="Parser-3913"><a href="#Parser-3913"><span class="linenos">3913</span></a>
</span><span id="Parser-3914"><a href="#Parser-3914"><span class="linenos">3914</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
</span><span id="Parser-3915"><a href="#Parser-3915"><span class="linenos">3915</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</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="Parser-3916"><a href="#Parser-3916"><span class="linenos">3916</span></a>
</span><span id="Parser-3917"><a href="#Parser-3917"><span class="linenos">3917</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_version</span><span class="p">()</span>
</span><span id="Parser-3918"><a href="#Parser-3918"><span class="linenos">3918</span></a>
</span><span id="Parser-3919"><a href="#Parser-3919"><span class="linenos">3919</span></a> <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
</span><span id="Parser-3920"><a href="#Parser-3920"><span class="linenos">3920</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
</span><span id="Parser-3921"><a href="#Parser-3921"><span class="linenos">3921</span></a>
</span><span id="Parser-3922"><a href="#Parser-3922"><span class="linenos">3922</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
</span><span id="Parser-3923"><a href="#Parser-3923"><span class="linenos">3923</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sample&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">())</span>
</span><span id="Parser-3924"><a href="#Parser-3924"><span class="linenos">3924</span></a>
</span><span id="Parser-3925"><a href="#Parser-3925"><span class="linenos">3925</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(</span><span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="Parser-3926"><a href="#Parser-3926"><span class="linenos">3926</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
</span><span id="Parser-3927"><a href="#Parser-3927"><span class="linenos">3927</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="n">alias</span><span class="p">)</span>
</span><span id="Parser-3928"><a href="#Parser-3928"><span class="linenos">3928</span></a>
</span><span id="Parser-3929"><a href="#Parser-3929"><span class="linenos">3929</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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">):</span>
</span><span id="Parser-3930"><a href="#Parser-3930"><span class="linenos">3930</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3931"><a href="#Parser-3931"><span class="linenos">3931</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtIndex</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">to_column</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-3932"><a href="#Parser-3932"><span class="linenos">3932</span></a> <span class="p">)</span>
</span><span id="Parser-3933"><a href="#Parser-3933"><span class="linenos">3933</span></a>
</span><span id="Parser-3934"><a href="#Parser-3934"><span class="linenos">3934</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
</span><span id="Parser-3935"><a href="#Parser-3935"><span class="linenos">3935</span></a>
</span><span id="Parser-3936"><a href="#Parser-3936"><span class="linenos">3936</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</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;pivots&quot;</span><span class="p">):</span>
</span><span id="Parser-3937"><a href="#Parser-3937"><span class="linenos">3937</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
</span><span id="Parser-3938"><a href="#Parser-3938"><span class="linenos">3938</span></a>
</span><span id="Parser-3939"><a href="#Parser-3939"><span class="linenos">3939</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
</span><span id="Parser-3940"><a href="#Parser-3940"><span class="linenos">3940</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;sample&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">())</span>
</span><span id="Parser-3941"><a href="#Parser-3941"><span class="linenos">3941</span></a>
</span><span id="Parser-3942"><a href="#Parser-3942"><span class="linenos">3942</span></a> <span class="k">if</span> <span class="n">joins</span><span class="p">:</span>
</span><span id="Parser-3943"><a href="#Parser-3943"><span class="linenos">3943</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_joins</span><span class="p">():</span>
</span><span id="Parser-3944"><a href="#Parser-3944"><span class="linenos">3944</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">join</span><span class="p">)</span>
</span><span id="Parser-3945"><a href="#Parser-3945"><span class="linenos">3945</span></a>
</span><span id="Parser-3946"><a href="#Parser-3946"><span class="linenos">3946</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">):</span>
</span><span id="Parser-3947"><a href="#Parser-3947"><span class="linenos">3947</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;ordinality&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-3948"><a href="#Parser-3948"><span class="linenos">3948</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
</span><span id="Parser-3949"><a href="#Parser-3949"><span class="linenos">3949</span></a>
</span><span id="Parser-3950"><a href="#Parser-3950"><span class="linenos">3950</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3951"><a href="#Parser-3951"><span class="linenos">3951</span></a>
</span><span id="Parser-3952"><a href="#Parser-3952"><span class="linenos">3952</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_version</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">]:</span>
</span><span id="Parser-3953"><a href="#Parser-3953"><span class="linenos">3953</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
</span><span id="Parser-3954"><a href="#Parser-3954"><span class="linenos">3954</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;TIMESTAMP&quot;</span>
</span><span id="Parser-3955"><a href="#Parser-3955"><span class="linenos">3955</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">):</span>
</span><span id="Parser-3956"><a href="#Parser-3956"><span class="linenos">3956</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;VERSION&quot;</span>
</span><span id="Parser-3957"><a href="#Parser-3957"><span class="linenos">3957</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3958"><a href="#Parser-3958"><span class="linenos">3958</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3959"><a href="#Parser-3959"><span class="linenos">3959</span></a>
</span><span id="Parser-3960"><a href="#Parser-3960"><span class="linenos">3960</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
</span><span id="Parser-3961"><a href="#Parser-3961"><span class="linenos">3961</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-3962"><a href="#Parser-3962"><span class="linenos">3962</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-3963"><a href="#Parser-3963"><span class="linenos">3963</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
</span><span id="Parser-3964"><a href="#Parser-3964"><span class="linenos">3964</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-3965"><a href="#Parser-3965"><span class="linenos">3965</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3966"><a href="#Parser-3966"><span class="linenos">3966</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span>
</span><span id="Parser-3967"><a href="#Parser-3967"><span class="linenos">3967</span></a> <span class="p">)</span>
</span><span id="Parser-3968"><a href="#Parser-3968"><span class="linenos">3968</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
</span><span id="Parser-3969"><a href="#Parser-3969"><span class="linenos">3969</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;CONTAINED IN&quot;</span>
</span><span id="Parser-3970"><a href="#Parser-3970"><span class="linenos">3970</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3971"><a href="#Parser-3971"><span class="linenos">3971</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="Parser-3972"><a href="#Parser-3972"><span class="linenos">3972</span></a> <span class="p">)</span>
</span><span id="Parser-3973"><a href="#Parser-3973"><span class="linenos">3973</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
</span><span id="Parser-3974"><a href="#Parser-3974"><span class="linenos">3974</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</span>
</span><span id="Parser-3975"><a href="#Parser-3975"><span class="linenos">3975</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3976"><a href="#Parser-3976"><span class="linenos">3976</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3977"><a href="#Parser-3977"><span class="linenos">3977</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
</span><span id="Parser-3978"><a href="#Parser-3978"><span class="linenos">3978</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;AS OF&quot;</span>
</span><span id="Parser-3979"><a href="#Parser-3979"><span class="linenos">3979</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="Parser-3980"><a href="#Parser-3980"><span class="linenos">3980</span></a>
</span><span id="Parser-3981"><a href="#Parser-3981"><span class="linenos">3981</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</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">expression</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="Parser-3982"><a href="#Parser-3982"><span class="linenos">3982</span></a>
</span><span id="Parser-3983"><a href="#Parser-3983"><span class="linenos">3983</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_historical_data</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">HistoricalData</span><span class="p">]:</span>
</span><span id="Parser-3984"><a href="#Parser-3984"><span class="linenos">3984</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/constructs/at-before</span>
</span><span id="Parser-3985"><a href="#Parser-3985"><span class="linenos">3985</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-3986"><a href="#Parser-3986"><span class="linenos">3986</span></a> <span class="n">historical_data</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3987"><a href="#Parser-3987"><span class="linenos">3987</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">HISTORICAL_DATA_PREFIX</span><span class="p">):</span>
</span><span id="Parser-3988"><a href="#Parser-3988"><span class="linenos">3988</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-3989"><a href="#Parser-3989"><span class="linenos">3989</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-3990"><a href="#Parser-3990"><span class="linenos">3990</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="Parser-3991"><a href="#Parser-3991"><span class="linenos">3991</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">HISTORICAL_DATA_KIND</span><span class="p">)</span>
</span><span id="Parser-3992"><a href="#Parser-3992"><span class="linenos">3992</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-3993"><a href="#Parser-3993"><span class="linenos">3993</span></a> <span class="p">)</span>
</span><span id="Parser-3994"><a href="#Parser-3994"><span class="linenos">3994</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-3995"><a href="#Parser-3995"><span class="linenos">3995</span></a>
</span><span id="Parser-3996"><a href="#Parser-3996"><span class="linenos">3996</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="Parser-3997"><a href="#Parser-3997"><span class="linenos">3997</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-3998"><a href="#Parser-3998"><span class="linenos">3998</span></a> <span class="n">historical_data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-3999"><a href="#Parser-3999"><span class="linenos">3999</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HistoricalData</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span>
</span><span id="Parser-4000"><a href="#Parser-4000"><span class="linenos">4000</span></a> <span class="p">)</span>
</span><span id="Parser-4001"><a href="#Parser-4001"><span class="linenos">4001</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4002"><a href="#Parser-4002"><span class="linenos">4002</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-4003"><a href="#Parser-4003"><span class="linenos">4003</span></a>
</span><span id="Parser-4004"><a href="#Parser-4004"><span class="linenos">4004</span></a> <span class="k">return</span> <span class="n">historical_data</span>
</span><span id="Parser-4005"><a href="#Parser-4005"><span class="linenos">4005</span></a>
</span><span id="Parser-4006"><a href="#Parser-4006"><span class="linenos">4006</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_changes</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Changes</span><span class="p">]:</span>
</span><span id="Parser-4007"><a href="#Parser-4007"><span class="linenos">4007</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHANGES&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="s2">&quot;INFORMATION&quot;</span><span class="p">,</span> <span class="s2">&quot;=&gt;&quot;</span><span class="p">):</span>
</span><span id="Parser-4008"><a href="#Parser-4008"><span class="linenos">4008</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4009"><a href="#Parser-4009"><span class="linenos">4009</span></a>
</span><span id="Parser-4010"><a href="#Parser-4010"><span class="linenos">4010</span></a> <span class="n">information</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-4011"><a href="#Parser-4011"><span class="linenos">4011</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-4012"><a href="#Parser-4012"><span class="linenos">4012</span></a>
</span><span id="Parser-4013"><a href="#Parser-4013"><span class="linenos">4013</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4014"><a href="#Parser-4014"><span class="linenos">4014</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Changes</span><span class="p">,</span>
</span><span id="Parser-4015"><a href="#Parser-4015"><span class="linenos">4015</span></a> <span class="n">information</span><span class="o">=</span><span class="n">information</span><span class="p">,</span>
</span><span id="Parser-4016"><a href="#Parser-4016"><span class="linenos">4016</span></a> <span class="n">at_before</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_historical_data</span><span class="p">(),</span>
</span><span id="Parser-4017"><a href="#Parser-4017"><span class="linenos">4017</span></a> <span class="n">end</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_historical_data</span><span class="p">(),</span>
</span><span id="Parser-4018"><a href="#Parser-4018"><span class="linenos">4018</span></a> <span class="p">)</span>
</span><span id="Parser-4019"><a href="#Parser-4019"><span class="linenos">4019</span></a>
</span><span id="Parser-4020"><a href="#Parser-4020"><span class="linenos">4020</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</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">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">Unnest</span><span class="p">]:</span>
</span><span id="Parser-4021"><a href="#Parser-4021"><span class="linenos">4021</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">):</span>
</span><span id="Parser-4022"><a href="#Parser-4022"><span class="linenos">4022</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4023"><a href="#Parser-4023"><span class="linenos">4023</span></a>
</span><span id="Parser-4024"><a href="#Parser-4024"><span class="linenos">4024</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
</span><span id="Parser-4025"><a href="#Parser-4025"><span class="linenos">4025</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">)</span>
</span><span id="Parser-4026"><a href="#Parser-4026"><span class="linenos">4026</span></a>
</span><span id="Parser-4027"><a href="#Parser-4027"><span class="linenos">4027</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-4028"><a href="#Parser-4028"><span class="linenos">4028</span></a>
</span><span id="Parser-4029"><a href="#Parser-4029"><span class="linenos">4029</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
</span><span id="Parser-4030"><a href="#Parser-4030"><span class="linenos">4030</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
</span><span id="Parser-4031"><a href="#Parser-4031"><span class="linenos">4031</span></a> <span class="k">if</span> <span class="n">alias</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;columns&quot;</span><span class="p">):</span>
</span><span id="Parser-4032"><a href="#Parser-4032"><span class="linenos">4032</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected extra column alias in unnest.&quot;</span><span class="p">)</span>
</span><span id="Parser-4033"><a href="#Parser-4033"><span class="linenos">4033</span></a>
</span><span id="Parser-4034"><a href="#Parser-4034"><span class="linenos">4034</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">])</span>
</span><span id="Parser-4035"><a href="#Parser-4035"><span class="linenos">4035</span></a> <span class="n">alias</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="kc">None</span><span class="p">)</span>
</span><span id="Parser-4036"><a href="#Parser-4036"><span class="linenos">4036</span></a>
</span><span id="Parser-4037"><a href="#Parser-4037"><span class="linenos">4037</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</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;columns&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
</span><span id="Parser-4038"><a href="#Parser-4038"><span class="linenos">4038</span></a> <span class="k">if</span> <span class="n">offset</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">):</span>
</span><span id="Parser-4039"><a href="#Parser-4039"><span class="linenos">4039</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">columns</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span><span id="Parser-4040"><a href="#Parser-4040"><span class="linenos">4040</span></a>
</span><span id="Parser-4041"><a href="#Parser-4041"><span class="linenos">4041</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">offset</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
</span><span id="Parser-4042"><a href="#Parser-4042"><span class="linenos">4042</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="Parser-4043"><a href="#Parser-4043"><span class="linenos">4043</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
</span><span id="Parser-4044"><a href="#Parser-4044"><span class="linenos">4044</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_OFFSET_ALIAS_TOKENS</span>
</span><span id="Parser-4045"><a href="#Parser-4045"><span class="linenos">4045</span></a> <span class="p">)</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">)</span>
</span><span id="Parser-4046"><a href="#Parser-4046"><span class="linenos">4046</span></a>
</span><span id="Parser-4047"><a href="#Parser-4047"><span class="linenos">4047</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
</span><span id="Parser-4048"><a href="#Parser-4048"><span class="linenos">4048</span></a>
</span><span id="Parser-4049"><a href="#Parser-4049"><span class="linenos">4049</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_derived_table_values</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">]:</span>
</span><span id="Parser-4050"><a href="#Parser-4050"><span class="linenos">4050</span></a> <span class="n">is_derived</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span>
</span><span id="Parser-4051"><a href="#Parser-4051"><span class="linenos">4051</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_derived</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
</span><span id="Parser-4052"><a href="#Parser-4052"><span class="linenos">4052</span></a> <span class="c1"># ClickHouse&#39;s `FORMAT Values` is equivalent to `VALUES`</span>
</span><span id="Parser-4053"><a href="#Parser-4053"><span class="linenos">4053</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUES&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUES&quot;</span><span class="p">)</span>
</span><span id="Parser-4054"><a href="#Parser-4054"><span class="linenos">4054</span></a> <span class="p">):</span>
</span><span id="Parser-4055"><a href="#Parser-4055"><span class="linenos">4055</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4056"><a href="#Parser-4056"><span class="linenos">4056</span></a>
</span><span id="Parser-4057"><a href="#Parser-4057"><span class="linenos">4057</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">)</span>
</span><span id="Parser-4058"><a href="#Parser-4058"><span class="linenos">4058</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
</span><span id="Parser-4059"><a href="#Parser-4059"><span class="linenos">4059</span></a>
</span><span id="Parser-4060"><a href="#Parser-4060"><span class="linenos">4060</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
</span><span id="Parser-4061"><a href="#Parser-4061"><span class="linenos">4061</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-4062"><a href="#Parser-4062"><span class="linenos">4062</span></a>
</span><span id="Parser-4063"><a href="#Parser-4063"><span class="linenos">4063</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4064"><a href="#Parser-4064"><span class="linenos">4064</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
</span><span id="Parser-4065"><a href="#Parser-4065"><span class="linenos">4065</span></a> <span class="p">)</span>
</span><span id="Parser-4066"><a href="#Parser-4066"><span class="linenos">4066</span></a>
</span><span id="Parser-4067"><a href="#Parser-4067"><span class="linenos">4067</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">]:</span>
</span><span id="Parser-4068"><a href="#Parser-4068"><span class="linenos">4068</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
</span><span id="Parser-4069"><a href="#Parser-4069"><span class="linenos">4069</span></a> <span class="n">as_modifier</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">)</span>
</span><span id="Parser-4070"><a href="#Parser-4070"><span class="linenos">4070</span></a> <span class="p">):</span>
</span><span id="Parser-4071"><a href="#Parser-4071"><span class="linenos">4071</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4072"><a href="#Parser-4072"><span class="linenos">4072</span></a>
</span><span id="Parser-4073"><a href="#Parser-4073"><span class="linenos">4073</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4074"><a href="#Parser-4074"><span class="linenos">4074</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4075"><a href="#Parser-4075"><span class="linenos">4075</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4076"><a href="#Parser-4076"><span class="linenos">4076</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4077"><a href="#Parser-4077"><span class="linenos">4077</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4078"><a href="#Parser-4078"><span class="linenos">4078</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4079"><a href="#Parser-4079"><span class="linenos">4079</span></a>
</span><span id="Parser-4080"><a href="#Parser-4080"><span class="linenos">4080</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,),</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-4081"><a href="#Parser-4081"><span class="linenos">4081</span></a> <span class="n">matched_l_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="Parser-4082"><a href="#Parser-4082"><span class="linenos">4082</span></a>
</span><span id="Parser-4083"><a href="#Parser-4083"><span class="linenos">4083</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_CSV</span><span class="p">:</span>
</span><span id="Parser-4084"><a href="#Parser-4084"><span class="linenos">4084</span></a> <span class="n">num</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4085"><a href="#Parser-4085"><span class="linenos">4085</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">)</span>
</span><span id="Parser-4086"><a href="#Parser-4086"><span class="linenos">4086</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4087"><a href="#Parser-4087"><span class="linenos">4087</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4088"><a href="#Parser-4088"><span class="linenos">4088</span></a> <span class="n">num</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-4089"><a href="#Parser-4089"><span class="linenos">4089</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
</span><span id="Parser-4090"><a href="#Parser-4090"><span class="linenos">4090</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-4091"><a href="#Parser-4091"><span class="linenos">4091</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="Parser-4092"><a href="#Parser-4092"><span class="linenos">4092</span></a> <span class="p">)</span>
</span><span id="Parser-4093"><a href="#Parser-4093"><span class="linenos">4093</span></a>
</span><span id="Parser-4094"><a href="#Parser-4094"><span class="linenos">4094</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKET&quot;</span><span class="p">):</span>
</span><span id="Parser-4095"><a href="#Parser-4095"><span class="linenos">4095</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="Parser-4096"><a href="#Parser-4096"><span class="linenos">4096</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
</span><span id="Parser-4097"><a href="#Parser-4097"><span class="linenos">4097</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="Parser-4098"><a href="#Parser-4098"><span class="linenos">4098</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
</span><span id="Parser-4099"><a href="#Parser-4099"><span class="linenos">4099</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
</span><span id="Parser-4100"><a href="#Parser-4100"><span class="linenos">4100</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">)):</span>
</span><span id="Parser-4101"><a href="#Parser-4101"><span class="linenos">4101</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
</span><span id="Parser-4102"><a href="#Parser-4102"><span class="linenos">4102</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
</span><span id="Parser-4103"><a href="#Parser-4103"><span class="linenos">4103</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
</span><span id="Parser-4104"><a href="#Parser-4104"><span class="linenos">4104</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4105"><a href="#Parser-4105"><span class="linenos">4105</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
</span><span id="Parser-4106"><a href="#Parser-4106"><span class="linenos">4106</span></a>
</span><span id="Parser-4107"><a href="#Parser-4107"><span class="linenos">4107</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
</span><span id="Parser-4108"><a href="#Parser-4108"><span class="linenos">4108</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-4109"><a href="#Parser-4109"><span class="linenos">4109</span></a>
</span><span id="Parser-4110"><a href="#Parser-4110"><span class="linenos">4110</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-4111"><a href="#Parser-4111"><span class="linenos">4111</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-4112"><a href="#Parser-4112"><span class="linenos">4112</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="Parser-4113"><a href="#Parser-4113"><span class="linenos">4113</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-4114"><a href="#Parser-4114"><span class="linenos">4114</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)):</span>
</span><span id="Parser-4115"><a href="#Parser-4115"><span class="linenos">4115</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">)</span>
</span><span id="Parser-4116"><a href="#Parser-4116"><span class="linenos">4116</span></a>
</span><span id="Parser-4117"><a href="#Parser-4117"><span class="linenos">4117</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">method</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">DEFAULT_SAMPLING_METHOD</span><span class="p">:</span>
</span><span id="Parser-4118"><a href="#Parser-4118"><span class="linenos">4118</span></a> <span class="n">method</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="bp">self</span><span class="o">.</span><span class="n">DEFAULT_SAMPLING_METHOD</span><span class="p">)</span>
</span><span id="Parser-4119"><a href="#Parser-4119"><span class="linenos">4119</span></a>
</span><span id="Parser-4120"><a href="#Parser-4120"><span class="linenos">4120</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4121"><a href="#Parser-4121"><span class="linenos">4121</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
</span><span id="Parser-4122"><a href="#Parser-4122"><span class="linenos">4122</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-4123"><a href="#Parser-4123"><span class="linenos">4123</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
</span><span id="Parser-4124"><a href="#Parser-4124"><span class="linenos">4124</span></a> <span class="n">bucket_numerator</span><span class="o">=</span><span class="n">bucket_numerator</span><span class="p">,</span>
</span><span id="Parser-4125"><a href="#Parser-4125"><span class="linenos">4125</span></a> <span class="n">bucket_denominator</span><span class="o">=</span><span class="n">bucket_denominator</span><span class="p">,</span>
</span><span id="Parser-4126"><a href="#Parser-4126"><span class="linenos">4126</span></a> <span class="n">bucket_field</span><span class="o">=</span><span class="n">bucket_field</span><span class="p">,</span>
</span><span id="Parser-4127"><a href="#Parser-4127"><span class="linenos">4127</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
</span><span id="Parser-4128"><a href="#Parser-4128"><span class="linenos">4128</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
</span><span id="Parser-4129"><a href="#Parser-4129"><span class="linenos">4129</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
</span><span id="Parser-4130"><a href="#Parser-4130"><span class="linenos">4130</span></a> <span class="p">)</span>
</span><span id="Parser-4131"><a href="#Parser-4131"><span class="linenos">4131</span></a>
</span><span id="Parser-4132"><a href="#Parser-4132"><span class="linenos">4132</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_pivots</span><span class="p">(</span><span class="bp">self</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">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">Pivot</span><span class="p">]]:</span>
</span><span id="Parser-4133"><a href="#Parser-4133"><span class="linenos">4133</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="Parser-4134"><a href="#Parser-4134"><span class="linenos">4134</span></a>
</span><span id="Parser-4135"><a href="#Parser-4135"><span class="linenos">4135</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_joins</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Iterator</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
</span><span id="Parser-4136"><a href="#Parser-4136"><span class="linenos">4136</span></a> <span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="Parser-4137"><a href="#Parser-4137"><span class="linenos">4137</span></a>
</span><span id="Parser-4138"><a href="#Parser-4138"><span class="linenos">4138</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unpivot_columns</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">UnpivotColumns</span><span class="p">]:</span>
</span><span id="Parser-4139"><a href="#Parser-4139"><span class="linenos">4139</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
</span><span id="Parser-4140"><a href="#Parser-4140"><span class="linenos">4140</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4141"><a href="#Parser-4141"><span class="linenos">4141</span></a>
</span><span id="Parser-4142"><a href="#Parser-4142"><span class="linenos">4142</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4143"><a href="#Parser-4143"><span class="linenos">4143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnpivotColumns</span><span class="p">,</span>
</span><span id="Parser-4144"><a href="#Parser-4144"><span class="linenos">4144</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NAME&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
</span><span id="Parser-4145"><a href="#Parser-4145"><span class="linenos">4145</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">),</span>
</span><span id="Parser-4146"><a href="#Parser-4146"><span class="linenos">4146</span></a> <span class="p">)</span>
</span><span id="Parser-4147"><a href="#Parser-4147"><span class="linenos">4147</span></a>
</span><span id="Parser-4148"><a href="#Parser-4148"><span class="linenos">4148</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
</span><span id="Parser-4149"><a href="#Parser-4149"><span class="linenos">4149</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_simplified_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">is_unpivot</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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span>
</span><span id="Parser-4150"><a href="#Parser-4150"><span class="linenos">4150</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_on</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4151"><a href="#Parser-4151"><span class="linenos">4151</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-4152"><a href="#Parser-4152"><span class="linenos">4152</span></a>
</span><span id="Parser-4153"><a href="#Parser-4153"><span class="linenos">4153</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
</span><span id="Parser-4154"><a href="#Parser-4154"><span class="linenos">4154</span></a> <span class="c1"># PIVOT ... ON col IN (row_val1, row_val2)</span>
</span><span id="Parser-4155"><a href="#Parser-4155"><span class="linenos">4155</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-4156"><a href="#Parser-4156"><span class="linenos">4156</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-4157"><a href="#Parser-4157"><span class="linenos">4157</span></a> <span class="c1"># UNPIVOT ... ON (col1, col2, col3) AS row_val</span>
</span><span id="Parser-4158"><a href="#Parser-4158"><span class="linenos">4158</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-4159"><a href="#Parser-4159"><span class="linenos">4159</span></a>
</span><span id="Parser-4160"><a href="#Parser-4160"><span class="linenos">4160</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4161"><a href="#Parser-4161"><span class="linenos">4161</span></a>
</span><span id="Parser-4162"><a href="#Parser-4162"><span class="linenos">4162</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="Parser-4163"><a href="#Parser-4163"><span class="linenos">4163</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
</span><span id="Parser-4164"><a href="#Parser-4164"><span class="linenos">4164</span></a> <span class="n">into</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unpivot_columns</span><span class="p">()</span>
</span><span id="Parser-4165"><a href="#Parser-4165"><span class="linenos">4165</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="Parser-4166"><a href="#Parser-4166"><span class="linenos">4166</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
</span><span id="Parser-4167"><a href="#Parser-4167"><span class="linenos">4167</span></a> <span class="p">)</span>
</span><span id="Parser-4168"><a href="#Parser-4168"><span class="linenos">4168</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
</span><span id="Parser-4169"><a href="#Parser-4169"><span class="linenos">4169</span></a>
</span><span id="Parser-4170"><a href="#Parser-4170"><span class="linenos">4170</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4171"><a href="#Parser-4171"><span class="linenos">4171</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
</span><span id="Parser-4172"><a href="#Parser-4172"><span class="linenos">4172</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-4173"><a href="#Parser-4173"><span class="linenos">4173</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-4174"><a href="#Parser-4174"><span class="linenos">4174</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
</span><span id="Parser-4175"><a href="#Parser-4175"><span class="linenos">4175</span></a> <span class="n">group</span><span class="o">=</span><span class="n">group</span><span class="p">,</span>
</span><span id="Parser-4176"><a href="#Parser-4176"><span class="linenos">4176</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">is_unpivot</span><span class="p">,</span>
</span><span id="Parser-4177"><a href="#Parser-4177"><span class="linenos">4177</span></a> <span class="n">into</span><span class="o">=</span><span class="n">into</span><span class="p">,</span>
</span><span id="Parser-4178"><a href="#Parser-4178"><span class="linenos">4178</span></a> <span class="p">)</span>
</span><span id="Parser-4179"><a href="#Parser-4179"><span class="linenos">4179</span></a>
</span><span id="Parser-4180"><a href="#Parser-4180"><span class="linenos">4180</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_pivot_in</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PivotAny</span><span class="p">:</span>
</span><span id="Parser-4181"><a href="#Parser-4181"><span class="linenos">4181</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_aliased_expression</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4182"><a href="#Parser-4182"><span class="linenos">4182</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">()</span>
</span><span id="Parser-4183"><a href="#Parser-4183"><span class="linenos">4183</span></a>
</span><span id="Parser-4184"><a href="#Parser-4184"><span class="linenos">4184</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="Parser-4185"><a href="#Parser-4185"><span class="linenos">4185</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-4186"><a href="#Parser-4186"><span class="linenos">4186</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
</span><span id="Parser-4187"><a href="#Parser-4187"><span class="linenos">4187</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">alias</span><span class="o">.</span><span class="n">db</span><span class="p">:</span>
</span><span id="Parser-4188"><a href="#Parser-4188"><span class="linenos">4188</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">alias</span><span class="o">.</span><span class="n">this</span>
</span><span id="Parser-4189"><a href="#Parser-4189"><span class="linenos">4189</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PivotAlias</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
</span><span id="Parser-4190"><a href="#Parser-4190"><span class="linenos">4190</span></a>
</span><span id="Parser-4191"><a href="#Parser-4191"><span class="linenos">4191</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4192"><a href="#Parser-4192"><span class="linenos">4192</span></a>
</span><span id="Parser-4193"><a href="#Parser-4193"><span class="linenos">4193</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-4194"><a href="#Parser-4194"><span class="linenos">4194</span></a>
</span><span id="Parser-4195"><a href="#Parser-4195"><span class="linenos">4195</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-4196"><a href="#Parser-4196"><span class="linenos">4196</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting IN (&quot;</span><span class="p">)</span>
</span><span id="Parser-4197"><a href="#Parser-4197"><span class="linenos">4197</span></a>
</span><span id="Parser-4198"><a href="#Parser-4198"><span class="linenos">4198</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">):</span>
</span><span id="Parser-4199"><a href="#Parser-4199"><span class="linenos">4199</span></a> <span class="n">exprs</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="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PivotAny</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()))</span>
</span><span id="Parser-4200"><a href="#Parser-4200"><span class="linenos">4200</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4201"><a href="#Parser-4201"><span class="linenos">4201</span></a> <span class="n">exprs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_aliased_expression</span><span class="p">)</span>
</span><span id="Parser-4202"><a href="#Parser-4202"><span class="linenos">4202</span></a>
</span><span id="Parser-4203"><a href="#Parser-4203"><span class="linenos">4203</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-4204"><a href="#Parser-4204"><span class="linenos">4204</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">exprs</span><span class="p">)</span>
</span><span id="Parser-4205"><a href="#Parser-4205"><span class="linenos">4205</span></a>
</span><span id="Parser-4206"><a href="#Parser-4206"><span class="linenos">4206</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_pivot</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]:</span>
</span><span id="Parser-4207"><a href="#Parser-4207"><span class="linenos">4207</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-4208"><a href="#Parser-4208"><span class="linenos">4208</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4209"><a href="#Parser-4209"><span class="linenos">4209</span></a>
</span><span id="Parser-4210"><a href="#Parser-4210"><span class="linenos">4210</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">):</span>
</span><span id="Parser-4211"><a href="#Parser-4211"><span class="linenos">4211</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-4212"><a href="#Parser-4212"><span class="linenos">4212</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">):</span>
</span><span id="Parser-4213"><a href="#Parser-4213"><span class="linenos">4213</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-4214"><a href="#Parser-4214"><span class="linenos">4214</span></a>
</span><span id="Parser-4215"><a href="#Parser-4215"><span class="linenos">4215</span></a> <span class="c1"># https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-unpivot.html#syntax</span>
</span><span id="Parser-4216"><a href="#Parser-4216"><span class="linenos">4216</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
</span><span id="Parser-4217"><a href="#Parser-4217"><span class="linenos">4217</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-4218"><a href="#Parser-4218"><span class="linenos">4218</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;EXCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
</span><span id="Parser-4219"><a href="#Parser-4219"><span class="linenos">4219</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-4220"><a href="#Parser-4220"><span class="linenos">4220</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4221"><a href="#Parser-4221"><span class="linenos">4221</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4222"><a href="#Parser-4222"><span class="linenos">4222</span></a>
</span><span id="Parser-4223"><a href="#Parser-4223"><span class="linenos">4223</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-4224"><a href="#Parser-4224"><span class="linenos">4224</span></a>
</span><span id="Parser-4225"><a href="#Parser-4225"><span class="linenos">4225</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-4226"><a href="#Parser-4226"><span class="linenos">4226</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-4227"><a href="#Parser-4227"><span class="linenos">4227</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4228"><a href="#Parser-4228"><span class="linenos">4228</span></a>
</span><span id="Parser-4229"><a href="#Parser-4229"><span class="linenos">4229</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
</span><span id="Parser-4230"><a href="#Parser-4230"><span class="linenos">4230</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="Parser-4231"><a href="#Parser-4231"><span class="linenos">4231</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4232"><a href="#Parser-4232"><span class="linenos">4232</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()))</span>
</span><span id="Parser-4233"><a href="#Parser-4233"><span class="linenos">4233</span></a>
</span><span id="Parser-4234"><a href="#Parser-4234"><span class="linenos">4234</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
</span><span id="Parser-4235"><a href="#Parser-4235"><span class="linenos">4235</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Failed to parse PIVOT&#39;s aggregation list&quot;</span><span class="p">)</span>
</span><span id="Parser-4236"><a href="#Parser-4236"><span class="linenos">4236</span></a>
</span><span id="Parser-4237"><a href="#Parser-4237"><span class="linenos">4237</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
</span><span id="Parser-4238"><a href="#Parser-4238"><span class="linenos">4238</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting FOR&quot;</span><span class="p">)</span>
</span><span id="Parser-4239"><a href="#Parser-4239"><span class="linenos">4239</span></a>
</span><span id="Parser-4240"><a href="#Parser-4240"><span class="linenos">4240</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot_in</span><span class="p">()</span>
</span><span id="Parser-4241"><a href="#Parser-4241"><span class="linenos">4241</span></a> <span class="n">default_on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFAULT&quot;</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
</span><span id="Parser-4242"><a href="#Parser-4242"><span class="linenos">4242</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span>
</span><span id="Parser-4243"><a href="#Parser-4243"><span class="linenos">4243</span></a> <span class="p">)</span>
</span><span id="Parser-4244"><a href="#Parser-4244"><span class="linenos">4244</span></a>
</span><span id="Parser-4245"><a href="#Parser-4245"><span class="linenos">4245</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-4246"><a href="#Parser-4246"><span class="linenos">4246</span></a>
</span><span id="Parser-4247"><a href="#Parser-4247"><span class="linenos">4247</span></a> <span class="n">pivot</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4248"><a href="#Parser-4248"><span class="linenos">4248</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
</span><span id="Parser-4249"><a href="#Parser-4249"><span class="linenos">4249</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-4250"><a href="#Parser-4250"><span class="linenos">4250</span></a> <span class="n">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
</span><span id="Parser-4251"><a href="#Parser-4251"><span class="linenos">4251</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">,</span>
</span><span id="Parser-4252"><a href="#Parser-4252"><span class="linenos">4252</span></a> <span class="n">include_nulls</span><span class="o">=</span><span class="n">include_nulls</span><span class="p">,</span>
</span><span id="Parser-4253"><a href="#Parser-4253"><span class="linenos">4253</span></a> <span class="n">default_on_null</span><span class="o">=</span><span class="n">default_on_null</span><span class="p">,</span>
</span><span id="Parser-4254"><a href="#Parser-4254"><span class="linenos">4254</span></a> <span class="p">)</span>
</span><span id="Parser-4255"><a href="#Parser-4255"><span class="linenos">4255</span></a>
</span><span id="Parser-4256"><a href="#Parser-4256"><span class="linenos">4256</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-4257"><a href="#Parser-4257"><span class="linenos">4257</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
</span><span id="Parser-4258"><a href="#Parser-4258"><span class="linenos">4258</span></a>
</span><span id="Parser-4259"><a href="#Parser-4259"><span class="linenos">4259</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
</span><span id="Parser-4260"><a href="#Parser-4260"><span class="linenos">4260</span></a> <span class="n">names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</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">expressions</span><span class="p">))</span>
</span><span id="Parser-4261"><a href="#Parser-4261"><span class="linenos">4261</span></a>
</span><span id="Parser-4262"><a href="#Parser-4262"><span class="linenos">4262</span></a> <span class="n">columns</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="o">=</span> <span class="p">[]</span>
</span><span id="Parser-4263"><a href="#Parser-4263"><span class="linenos">4263</span></a> <span class="n">pivot_field_expressions</span> <span class="o">=</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span>
</span><span id="Parser-4264"><a href="#Parser-4264"><span class="linenos">4264</span></a>
</span><span id="Parser-4265"><a href="#Parser-4265"><span class="linenos">4265</span></a> <span class="c1"># The `PivotAny` expression corresponds to `ANY ORDER BY &lt;column&gt;`; we can&#39;t infer in this case.</span>
</span><span id="Parser-4266"><a href="#Parser-4266"><span class="linenos">4266</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">pivot_field_expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">exp</span><span class="o">.</span><span class="n">PivotAny</span><span class="p">):</span>
</span><span id="Parser-4267"><a href="#Parser-4267"><span class="linenos">4267</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot_field_expressions</span><span class="p">:</span>
</span><span id="Parser-4268"><a href="#Parser-4268"><span class="linenos">4268</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
</span><span id="Parser-4269"><a href="#Parser-4269"><span class="linenos">4269</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
</span><span id="Parser-4270"><a href="#Parser-4270"><span class="linenos">4270</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PREFIXED_PIVOT_COLUMNS</span><span class="p">:</span>
</span><span id="Parser-4271"><a href="#Parser-4271"><span class="linenos">4271</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
</span><span id="Parser-4272"><a href="#Parser-4272"><span class="linenos">4272</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4273"><a href="#Parser-4273"><span class="linenos">4273</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
</span><span id="Parser-4274"><a href="#Parser-4274"><span class="linenos">4274</span></a>
</span><span id="Parser-4275"><a href="#Parser-4275"><span class="linenos">4275</span></a> <span class="n">columns</span><span class="o">.</span><span class="n">append</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">name</span><span class="p">))</span>
</span><span id="Parser-4276"><a href="#Parser-4276"><span class="linenos">4276</span></a>
</span><span id="Parser-4277"><a href="#Parser-4277"><span class="linenos">4277</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">columns</span><span class="p">)</span>
</span><span id="Parser-4278"><a href="#Parser-4278"><span class="linenos">4278</span></a>
</span><span id="Parser-4279"><a href="#Parser-4279"><span class="linenos">4279</span></a> <span class="k">return</span> <span class="n">pivot</span>
</span><span id="Parser-4280"><a href="#Parser-4280"><span class="linenos">4280</span></a>
</span><span id="Parser-4281"><a href="#Parser-4281"><span class="linenos">4281</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</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="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="Parser-4282"><a href="#Parser-4282"><span class="linenos">4282</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <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="Parser-4283"><a href="#Parser-4283"><span class="linenos">4283</span></a>
</span><span id="Parser-4284"><a href="#Parser-4284"><span class="linenos">4284</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_prewhere</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">PreWhere</span><span class="p">]:</span>
</span><span id="Parser-4285"><a href="#Parser-4285"><span class="linenos">4285</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_where_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PREWHERE</span><span class="p">):</span>
</span><span id="Parser-4286"><a href="#Parser-4286"><span class="linenos">4286</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4287"><a href="#Parser-4287"><span class="linenos">4287</span></a>
</span><span id="Parser-4288"><a href="#Parser-4288"><span class="linenos">4288</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4289"><a href="#Parser-4289"><span class="linenos">4289</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PreWhere</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-4290"><a href="#Parser-4290"><span class="linenos">4290</span></a> <span class="p">)</span>
</span><span id="Parser-4291"><a href="#Parser-4291"><span class="linenos">4291</span></a>
</span><span id="Parser-4292"><a href="#Parser-4292"><span class="linenos">4292</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">]:</span>
</span><span id="Parser-4293"><a href="#Parser-4293"><span class="linenos">4293</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_where_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">):</span>
</span><span id="Parser-4294"><a href="#Parser-4294"><span class="linenos">4294</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4295"><a href="#Parser-4295"><span class="linenos">4295</span></a>
</span><span id="Parser-4296"><a href="#Parser-4296"><span class="linenos">4296</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4297"><a href="#Parser-4297"><span class="linenos">4297</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-4298"><a href="#Parser-4298"><span class="linenos">4298</span></a> <span class="p">)</span>
</span><span id="Parser-4299"><a href="#Parser-4299"><span class="linenos">4299</span></a>
</span><span id="Parser-4300"><a href="#Parser-4300"><span class="linenos">4300</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">]:</span>
</span><span id="Parser-4301"><a href="#Parser-4301"><span class="linenos">4301</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_group_by_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">):</span>
</span><span id="Parser-4302"><a href="#Parser-4302"><span class="linenos">4302</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4303"><a href="#Parser-4303"><span class="linenos">4303</span></a>
</span><span id="Parser-4304"><a href="#Parser-4304"><span class="linenos">4304</span></a> <span class="n">elements</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">Any</span><span class="p">]</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
</span><span id="Parser-4305"><a href="#Parser-4305"><span class="linenos">4305</span></a>
</span><span id="Parser-4306"><a href="#Parser-4306"><span class="linenos">4306</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
</span><span id="Parser-4307"><a href="#Parser-4307"><span class="linenos">4307</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;all&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-4308"><a href="#Parser-4308"><span class="linenos">4308</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
</span><span id="Parser-4309"><a href="#Parser-4309"><span class="linenos">4309</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;all&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-4310"><a href="#Parser-4310"><span class="linenos">4310</span></a>
</span><span id="Parser-4311"><a href="#Parser-4311"><span class="linenos">4311</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-4312"><a href="#Parser-4312"><span class="linenos">4312</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-4313"><a href="#Parser-4313"><span class="linenos">4313</span></a>
</span><span id="Parser-4314"><a href="#Parser-4314"><span class="linenos">4314</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;expressions&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
</span><span id="Parser-4315"><a href="#Parser-4315"><span class="linenos">4315</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="Parser-4316"><a href="#Parser-4316"><span class="linenos">4316</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="kc">None</span>
</span><span id="Parser-4317"><a href="#Parser-4317"><span class="linenos">4317</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-4318"><a href="#Parser-4318"><span class="linenos">4318</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-4319"><a href="#Parser-4319"><span class="linenos">4319</span></a> <span class="p">)</span>
</span><span id="Parser-4320"><a href="#Parser-4320"><span class="linenos">4320</span></a> <span class="p">)</span>
</span><span id="Parser-4321"><a href="#Parser-4321"><span class="linenos">4321</span></a>
</span><span id="Parser-4322"><a href="#Parser-4322"><span class="linenos">4322</span></a> <span class="n">before_with_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-4323"><a href="#Parser-4323"><span class="linenos">4323</span></a> <span class="n">with_prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">)</span>
</span><span id="Parser-4324"><a href="#Parser-4324"><span class="linenos">4324</span></a>
</span><span id="Parser-4325"><a href="#Parser-4325"><span class="linenos">4325</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">):</span>
</span><span id="Parser-4326"><a href="#Parser-4326"><span class="linenos">4326</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;rollup&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="Parser-4327"><a href="#Parser-4327"><span class="linenos">4327</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cube_or_rollup</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Rollup</span><span class="p">,</span> <span class="n">with_prefix</span><span class="o">=</span><span class="n">with_prefix</span><span class="p">)</span>
</span><span id="Parser-4328"><a href="#Parser-4328"><span class="linenos">4328</span></a> <span class="p">)</span>
</span><span id="Parser-4329"><a href="#Parser-4329"><span class="linenos">4329</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">):</span>
</span><span id="Parser-4330"><a href="#Parser-4330"><span class="linenos">4330</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;cube&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="Parser-4331"><a href="#Parser-4331"><span class="linenos">4331</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_cube_or_rollup</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cube</span><span class="p">,</span> <span class="n">with_prefix</span><span class="o">=</span><span class="n">with_prefix</span><span class="p">)</span>
</span><span id="Parser-4332"><a href="#Parser-4332"><span class="linenos">4332</span></a> <span class="p">)</span>
</span><span id="Parser-4333"><a href="#Parser-4333"><span class="linenos">4333</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">):</span>
</span><span id="Parser-4334"><a href="#Parser-4334"><span class="linenos">4334</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="Parser-4335"><a href="#Parser-4335"><span class="linenos">4335</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4336"><a href="#Parser-4336"><span class="linenos">4336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupingSets</span><span class="p">,</span>
</span><span id="Parser-4337"><a href="#Parser-4337"><span class="linenos">4337</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_set</span><span class="p">),</span>
</span><span id="Parser-4338"><a href="#Parser-4338"><span class="linenos">4338</span></a> <span class="p">)</span>
</span><span id="Parser-4339"><a href="#Parser-4339"><span class="linenos">4339</span></a> <span class="p">)</span>
</span><span id="Parser-4340"><a href="#Parser-4340"><span class="linenos">4340</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TOTALS&quot;</span><span class="p">):</span>
</span><span id="Parser-4341"><a href="#Parser-4341"><span class="linenos">4341</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-4342"><a href="#Parser-4342"><span class="linenos">4342</span></a>
</span><span id="Parser-4343"><a href="#Parser-4343"><span class="linenos">4343</span></a> <span class="k">if</span> <span class="n">before_with_index</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">&lt;=</span> <span class="n">before_with_index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Parser-4344"><a href="#Parser-4344"><span class="linenos">4344</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">before_with_index</span><span class="p">)</span>
</span><span id="Parser-4345"><a href="#Parser-4345"><span class="linenos">4345</span></a> <span class="k">break</span>
</span><span id="Parser-4346"><a href="#Parser-4346"><span class="linenos">4346</span></a>
</span><span id="Parser-4347"><a href="#Parser-4347"><span class="linenos">4347</span></a> <span class="k">if</span> <span class="n">index</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="p">:</span>
</span><span id="Parser-4348"><a href="#Parser-4348"><span class="linenos">4348</span></a> <span class="k">break</span>
</span><span id="Parser-4349"><a href="#Parser-4349"><span class="linenos">4349</span></a>
</span><span id="Parser-4350"><a href="#Parser-4350"><span class="linenos">4350</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">,</span> <span class="o">**</span><span class="n">elements</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-4351"><a href="#Parser-4351"><span class="linenos">4351</span></a>
</span><span id="Parser-4352"><a href="#Parser-4352"><span class="linenos">4352</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_cube_or_rollup</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">kind</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">with_prefix</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">E</span><span class="p">:</span>
</span><span id="Parser-4353"><a href="#Parser-4353"><span class="linenos">4353</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4354"><a href="#Parser-4354"><span class="linenos">4354</span></a> <span class="n">kind</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[]</span> <span class="k">if</span> <span class="n">with_prefix</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="Parser-4355"><a href="#Parser-4355"><span class="linenos">4355</span></a> <span class="p">)</span>
</span><span id="Parser-4356"><a href="#Parser-4356"><span class="linenos">4356</span></a>
</span><span id="Parser-4357"><a href="#Parser-4357"><span class="linenos">4357</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_grouping_set</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4358"><a href="#Parser-4358"><span class="linenos">4358</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-4359"><a href="#Parser-4359"><span class="linenos">4359</span></a> <span class="n">grouping_set</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="Parser-4360"><a href="#Parser-4360"><span class="linenos">4360</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-4361"><a href="#Parser-4361"><span class="linenos">4361</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">grouping_set</span><span class="p">)</span>
</span><span id="Parser-4362"><a href="#Parser-4362"><span class="linenos">4362</span></a>
</span><span id="Parser-4363"><a href="#Parser-4363"><span class="linenos">4363</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-4364"><a href="#Parser-4364"><span class="linenos">4364</span></a>
</span><span id="Parser-4365"><a href="#Parser-4365"><span class="linenos">4365</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">]:</span>
</span><span id="Parser-4366"><a href="#Parser-4366"><span class="linenos">4366</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_having_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">):</span>
</span><span id="Parser-4367"><a href="#Parser-4367"><span class="linenos">4367</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4368"><a href="#Parser-4368"><span class="linenos">4368</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">())</span>
</span><span id="Parser-4369"><a href="#Parser-4369"><span class="linenos">4369</span></a>
</span><span id="Parser-4370"><a href="#Parser-4370"><span class="linenos">4370</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_qualify</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">]:</span>
</span><span id="Parser-4371"><a href="#Parser-4371"><span class="linenos">4371</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">):</span>
</span><span id="Parser-4372"><a href="#Parser-4372"><span class="linenos">4372</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4373"><a href="#Parser-4373"><span class="linenos">4373</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">())</span>
</span><span id="Parser-4374"><a href="#Parser-4374"><span class="linenos">4374</span></a>
</span><span id="Parser-4375"><a href="#Parser-4375"><span class="linenos">4375</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_start_token</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">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">]:</span>
</span><span id="Parser-4376"><a href="#Parser-4376"><span class="linenos">4376</span></a> <span class="k">if</span> <span class="n">skip_start_token</span><span class="p">:</span>
</span><span id="Parser-4377"><a href="#Parser-4377"><span class="linenos">4377</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4378"><a href="#Parser-4378"><span class="linenos">4378</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
</span><span id="Parser-4379"><a href="#Parser-4379"><span class="linenos">4379</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-4380"><a href="#Parser-4380"><span class="linenos">4380</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4381"><a href="#Parser-4381"><span class="linenos">4381</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4382"><a href="#Parser-4382"><span class="linenos">4382</span></a>
</span><span id="Parser-4383"><a href="#Parser-4383"><span class="linenos">4383</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">)</span>
</span><span id="Parser-4384"><a href="#Parser-4384"><span class="linenos">4384</span></a> <span class="n">nocycle</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOCYCLE&quot;</span><span class="p">)</span>
</span><span id="Parser-4385"><a href="#Parser-4385"><span class="linenos">4385</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">[</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4386"><a href="#Parser-4386"><span class="linenos">4386</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-4387"><a href="#Parser-4387"><span class="linenos">4387</span></a> <span class="p">)</span>
</span><span id="Parser-4388"><a href="#Parser-4388"><span class="linenos">4388</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-4389"><a href="#Parser-4389"><span class="linenos">4389</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">)</span>
</span><span id="Parser-4390"><a href="#Parser-4390"><span class="linenos">4390</span></a>
</span><span id="Parser-4391"><a href="#Parser-4391"><span class="linenos">4391</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
</span><span id="Parser-4392"><a href="#Parser-4392"><span class="linenos">4392</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-4393"><a href="#Parser-4393"><span class="linenos">4393</span></a>
</span><span id="Parser-4394"><a href="#Parser-4394"><span class="linenos">4394</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">connect</span><span class="o">=</span><span class="n">connect</span><span class="p">,</span> <span class="n">nocycle</span><span class="o">=</span><span class="n">nocycle</span><span class="p">)</span>
</span><span id="Parser-4395"><a href="#Parser-4395"><span class="linenos">4395</span></a>
</span><span id="Parser-4396"><a href="#Parser-4396"><span class="linenos">4396</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_name_as_expression</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4397"><a href="#Parser-4397"><span class="linenos">4397</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-4398"><a href="#Parser-4398"><span class="linenos">4398</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
</span><span id="Parser-4399"><a href="#Parser-4399"><span class="linenos">4399</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">())</span>
</span><span id="Parser-4400"><a href="#Parser-4400"><span class="linenos">4400</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4401"><a href="#Parser-4401"><span class="linenos">4401</span></a>
</span><span id="Parser-4402"><a href="#Parser-4402"><span class="linenos">4402</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_interpolate</span><span class="p">(</span><span class="bp">self</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">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><span id="Parser-4403"><a href="#Parser-4403"><span class="linenos">4403</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INTERPOLATE&quot;</span><span class="p">):</span>
</span><span id="Parser-4404"><a href="#Parser-4404"><span class="linenos">4404</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_name_as_expression</span><span class="p">)</span>
</span><span id="Parser-4405"><a href="#Parser-4405"><span class="linenos">4405</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4406"><a href="#Parser-4406"><span class="linenos">4406</span></a>
</span><span id="Parser-4407"><a href="#Parser-4407"><span class="linenos">4407</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_order</span><span class="p">(</span>
</span><span id="Parser-4408"><a href="#Parser-4408"><span class="linenos">4408</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">skip_order_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-4409"><a href="#Parser-4409"><span class="linenos">4409</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="Parser-4410"><a href="#Parser-4410"><span class="linenos">4410</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4411"><a href="#Parser-4411"><span class="linenos">4411</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_order_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">):</span>
</span><span id="Parser-4412"><a href="#Parser-4412"><span class="linenos">4412</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_SIBLINGS_BY</span><span class="p">):</span>
</span><span id="Parser-4413"><a href="#Parser-4413"><span class="linenos">4413</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4414"><a href="#Parser-4414"><span class="linenos">4414</span></a>
</span><span id="Parser-4415"><a href="#Parser-4415"><span class="linenos">4415</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-4416"><a href="#Parser-4416"><span class="linenos">4416</span></a>
</span><span id="Parser-4417"><a href="#Parser-4417"><span class="linenos">4417</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4418"><a href="#Parser-4418"><span class="linenos">4418</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">,</span>
</span><span id="Parser-4419"><a href="#Parser-4419"><span class="linenos">4419</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-4420"><a href="#Parser-4420"><span class="linenos">4420</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">),</span>
</span><span id="Parser-4421"><a href="#Parser-4421"><span class="linenos">4421</span></a> <span class="n">siblings</span><span class="o">=</span><span class="n">siblings</span><span class="p">,</span>
</span><span id="Parser-4422"><a href="#Parser-4422"><span class="linenos">4422</span></a> <span class="p">)</span>
</span><span id="Parser-4423"><a href="#Parser-4423"><span class="linenos">4423</span></a>
</span><span id="Parser-4424"><a href="#Parser-4424"><span class="linenos">4424</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <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">token</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">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
</span><span id="Parser-4425"><a href="#Parser-4425"><span class="linenos">4425</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
</span><span id="Parser-4426"><a href="#Parser-4426"><span class="linenos">4426</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4427"><a href="#Parser-4427"><span class="linenos">4427</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp_class</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">))</span>
</span><span id="Parser-4428"><a href="#Parser-4428"><span class="linenos">4428</span></a>
</span><span id="Parser-4429"><a href="#Parser-4429"><span class="linenos">4429</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_ordered</span><span class="p">(</span>
</span><span id="Parser-4430"><a href="#Parser-4430"><span class="linenos">4430</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</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">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4431"><a href="#Parser-4431"><span class="linenos">4431</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">Ordered</span><span class="p">]:</span>
</span><span id="Parser-4432"><a href="#Parser-4432"><span class="linenos">4432</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span> <span class="k">if</span> <span class="n">parse_method</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-4433"><a href="#Parser-4433"><span class="linenos">4433</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="Parser-4434"><a href="#Parser-4434"><span class="linenos">4434</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4435"><a href="#Parser-4435"><span class="linenos">4435</span></a>
</span><span id="Parser-4436"><a href="#Parser-4436"><span class="linenos">4436</span></a> <span class="k">if</span> <span class="n">this</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="o">==</span> <span class="s2">&quot;ALL&quot;</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_ORDER_BY_ALL</span><span class="p">:</span>
</span><span id="Parser-4437"><a href="#Parser-4437"><span class="linenos">4437</span></a> <span class="n">this</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="s2">&quot;ALL&quot;</span><span class="p">)</span>
</span><span id="Parser-4438"><a href="#Parser-4438"><span class="linenos">4438</span></a>
</span><span id="Parser-4439"><a href="#Parser-4439"><span class="linenos">4439</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">)</span>
</span><span id="Parser-4440"><a href="#Parser-4440"><span class="linenos">4440</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-4441"><a href="#Parser-4441"><span class="linenos">4441</span></a>
</span><span id="Parser-4442"><a href="#Parser-4442"><span class="linenos">4442</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
</span><span id="Parser-4443"><a href="#Parser-4443"><span class="linenos">4443</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
</span><span id="Parser-4444"><a href="#Parser-4444"><span class="linenos">4444</span></a>
</span><span id="Parser-4445"><a href="#Parser-4445"><span class="linenos">4445</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="kc">False</span>
</span><span id="Parser-4446"><a href="#Parser-4446"><span class="linenos">4446</span></a> <span class="n">explicitly_null_ordered</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="n">is_nulls_last</span>
</span><span id="Parser-4447"><a href="#Parser-4447"><span class="linenos">4447</span></a>
</span><span id="Parser-4448"><a href="#Parser-4448"><span class="linenos">4448</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Parser-4449"><a href="#Parser-4449"><span class="linenos">4449</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
</span><span id="Parser-4450"><a href="#Parser-4450"><span class="linenos">4450</span></a> <span class="ow">and</span> <span class="p">(</span>
</span><span id="Parser-4451"><a href="#Parser-4451"><span class="linenos">4451</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
</span><span id="Parser-4452"><a href="#Parser-4452"><span class="linenos">4452</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
</span><span id="Parser-4453"><a href="#Parser-4453"><span class="linenos">4453</span></a> <span class="p">)</span>
</span><span id="Parser-4454"><a href="#Parser-4454"><span class="linenos">4454</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
</span><span id="Parser-4455"><a href="#Parser-4455"><span class="linenos">4455</span></a> <span class="p">):</span>
</span><span id="Parser-4456"><a href="#Parser-4456"><span class="linenos">4456</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-4457"><a href="#Parser-4457"><span class="linenos">4457</span></a>
</span><span id="Parser-4458"><a href="#Parser-4458"><span class="linenos">4458</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;FILL&quot;</span><span class="p">):</span>
</span><span id="Parser-4459"><a href="#Parser-4459"><span class="linenos">4459</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4460"><a href="#Parser-4460"><span class="linenos">4460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithFill</span><span class="p">,</span>
</span><span id="Parser-4461"><a href="#Parser-4461"><span class="linenos">4461</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-4462"><a href="#Parser-4462"><span class="linenos">4462</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="Parser-4463"><a href="#Parser-4463"><span class="linenos">4463</span></a> <span class="s2">&quot;to&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="Parser-4464"><a href="#Parser-4464"><span class="linenos">4464</span></a> <span class="s2">&quot;step&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STEP&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="Parser-4465"><a href="#Parser-4465"><span class="linenos">4465</span></a> <span class="s2">&quot;interpolate&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_interpolate</span><span class="p">(),</span>
</span><span id="Parser-4466"><a href="#Parser-4466"><span class="linenos">4466</span></a> <span class="p">},</span>
</span><span id="Parser-4467"><a href="#Parser-4467"><span class="linenos">4467</span></a> <span class="p">)</span>
</span><span id="Parser-4468"><a href="#Parser-4468"><span class="linenos">4468</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4469"><a href="#Parser-4469"><span class="linenos">4469</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4470"><a href="#Parser-4470"><span class="linenos">4470</span></a>
</span><span id="Parser-4471"><a href="#Parser-4471"><span class="linenos">4471</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4472"><a href="#Parser-4472"><span class="linenos">4472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="n">nulls_first</span><span class="p">,</span> <span class="n">with_fill</span><span class="o">=</span><span class="n">with_fill</span>
</span><span id="Parser-4473"><a href="#Parser-4473"><span class="linenos">4473</span></a> <span class="p">)</span>
</span><span id="Parser-4474"><a href="#Parser-4474"><span class="linenos">4474</span></a>
</span><span id="Parser-4475"><a href="#Parser-4475"><span class="linenos">4475</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_limit_options</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">LimitOptions</span><span class="p">:</span>
</span><span id="Parser-4476"><a href="#Parser-4476"><span class="linenos">4476</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">)</span>
</span><span id="Parser-4477"><a href="#Parser-4477"><span class="linenos">4477</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
</span><span id="Parser-4478"><a href="#Parser-4478"><span class="linenos">4478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
</span><span id="Parser-4479"><a href="#Parser-4479"><span class="linenos">4479</span></a> <span class="n">with_ties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIES&quot;</span><span class="p">)</span>
</span><span id="Parser-4480"><a href="#Parser-4480"><span class="linenos">4480</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">LimitOptions</span><span class="p">,</span> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span> <span class="n">with_ties</span><span class="o">=</span><span class="n">with_ties</span><span class="p">)</span>
</span><span id="Parser-4481"><a href="#Parser-4481"><span class="linenos">4481</span></a>
</span><span id="Parser-4482"><a href="#Parser-4482"><span class="linenos">4482</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_limit</span><span class="p">(</span>
</span><span id="Parser-4483"><a href="#Parser-4483"><span class="linenos">4483</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-4484"><a href="#Parser-4484"><span class="linenos">4484</span></a> <span class="n">this</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 class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-4485"><a href="#Parser-4485"><span class="linenos">4485</span></a> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-4486"><a href="#Parser-4486"><span class="linenos">4486</span></a> <span class="n">skip_limit_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-4487"><a href="#Parser-4487"><span class="linenos">4487</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="Parser-4488"><a href="#Parser-4488"><span class="linenos">4488</span></a> <span class="k">if</span> <span class="n">skip_limit_token</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">):</span>
</span><span id="Parser-4489"><a href="#Parser-4489"><span class="linenos">4489</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="Parser-4490"><a href="#Parser-4490"><span class="linenos">4490</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
</span><span id="Parser-4491"><a href="#Parser-4491"><span class="linenos">4491</span></a> <span class="n">limit_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="Parser-4492"><a href="#Parser-4492"><span class="linenos">4492</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span> <span class="k">if</span> <span class="n">limit_paren</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="Parser-4493"><a href="#Parser-4493"><span class="linenos">4493</span></a>
</span><span id="Parser-4494"><a href="#Parser-4494"><span class="linenos">4494</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
</span><span id="Parser-4495"><a href="#Parser-4495"><span class="linenos">4495</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-4496"><a href="#Parser-4496"><span class="linenos">4496</span></a>
</span><span id="Parser-4497"><a href="#Parser-4497"><span class="linenos">4497</span></a> <span class="n">limit_options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_options</span><span class="p">()</span>
</span><span id="Parser-4498"><a href="#Parser-4498"><span class="linenos">4498</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4499"><a href="#Parser-4499"><span class="linenos">4499</span></a> <span class="n">limit_options</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4500"><a href="#Parser-4500"><span class="linenos">4500</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="Parser-4501"><a href="#Parser-4501"><span class="linenos">4501</span></a>
</span><span id="Parser-4502"><a href="#Parser-4502"><span class="linenos">4502</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="Parser-4503"><a href="#Parser-4503"><span class="linenos">4503</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
</span><span id="Parser-4504"><a href="#Parser-4504"><span class="linenos">4504</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="Parser-4505"><a href="#Parser-4505"><span class="linenos">4505</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4506"><a href="#Parser-4506"><span class="linenos">4506</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4507"><a href="#Parser-4507"><span class="linenos">4507</span></a>
</span><span id="Parser-4508"><a href="#Parser-4508"><span class="linenos">4508</span></a> <span class="n">limit_exp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4509"><a href="#Parser-4509"><span class="linenos">4509</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span>
</span><span id="Parser-4510"><a href="#Parser-4510"><span class="linenos">4510</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-4511"><a href="#Parser-4511"><span class="linenos">4511</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="Parser-4512"><a href="#Parser-4512"><span class="linenos">4512</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
</span><span id="Parser-4513"><a href="#Parser-4513"><span class="linenos">4513</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="Parser-4514"><a href="#Parser-4514"><span class="linenos">4514</span></a> <span class="n">limit_options</span><span class="o">=</span><span class="n">limit_options</span><span class="p">,</span>
</span><span id="Parser-4515"><a href="#Parser-4515"><span class="linenos">4515</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_by</span><span class="p">(),</span>
</span><span id="Parser-4516"><a href="#Parser-4516"><span class="linenos">4516</span></a> <span class="p">)</span>
</span><span id="Parser-4517"><a href="#Parser-4517"><span class="linenos">4517</span></a>
</span><span id="Parser-4518"><a href="#Parser-4518"><span class="linenos">4518</span></a> <span class="k">return</span> <span class="n">limit_exp</span>
</span><span id="Parser-4519"><a href="#Parser-4519"><span class="linenos">4519</span></a>
</span><span id="Parser-4520"><a href="#Parser-4520"><span class="linenos">4520</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">):</span>
</span><span id="Parser-4521"><a href="#Parser-4521"><span class="linenos">4521</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">))</span>
</span><span id="Parser-4522"><a href="#Parser-4522"><span class="linenos">4522</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
</span><span id="Parser-4523"><a href="#Parser-4523"><span class="linenos">4523</span></a>
</span><span id="Parser-4524"><a href="#Parser-4524"><span class="linenos">4524</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">FETCH_TOKENS</span><span class="p">)</span>
</span><span id="Parser-4525"><a href="#Parser-4525"><span class="linenos">4525</span></a>
</span><span id="Parser-4526"><a href="#Parser-4526"><span class="linenos">4526</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4527"><a href="#Parser-4527"><span class="linenos">4527</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
</span><span id="Parser-4528"><a href="#Parser-4528"><span class="linenos">4528</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
</span><span id="Parser-4529"><a href="#Parser-4529"><span class="linenos">4529</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
</span><span id="Parser-4530"><a href="#Parser-4530"><span class="linenos">4530</span></a> <span class="n">limit_options</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_options</span><span class="p">(),</span>
</span><span id="Parser-4531"><a href="#Parser-4531"><span class="linenos">4531</span></a> <span class="p">)</span>
</span><span id="Parser-4532"><a href="#Parser-4532"><span class="linenos">4532</span></a>
</span><span id="Parser-4533"><a href="#Parser-4533"><span class="linenos">4533</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4534"><a href="#Parser-4534"><span class="linenos">4534</span></a>
</span><span id="Parser-4535"><a href="#Parser-4535"><span class="linenos">4535</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_offset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">=</span> <span class="kc">None</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4536"><a href="#Parser-4536"><span class="linenos">4536</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
</span><span id="Parser-4537"><a href="#Parser-4537"><span class="linenos">4537</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4538"><a href="#Parser-4538"><span class="linenos">4538</span></a>
</span><span id="Parser-4539"><a href="#Parser-4539"><span class="linenos">4539</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="Parser-4540"><a href="#Parser-4540"><span class="linenos">4540</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
</span><span id="Parser-4541"><a href="#Parser-4541"><span class="linenos">4541</span></a>
</span><span id="Parser-4542"><a href="#Parser-4542"><span class="linenos">4542</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4543"><a href="#Parser-4543"><span class="linenos">4543</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</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">count</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_by</span><span class="p">()</span>
</span><span id="Parser-4544"><a href="#Parser-4544"><span class="linenos">4544</span></a> <span class="p">)</span>
</span><span id="Parser-4545"><a href="#Parser-4545"><span class="linenos">4545</span></a>
</span><span id="Parser-4546"><a href="#Parser-4546"><span class="linenos">4546</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_can_parse_limit_or_offset</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span><span id="Parser-4547"><a href="#Parser-4547"><span class="linenos">4547</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AMBIGUOUS_ALIAS_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-4548"><a href="#Parser-4548"><span class="linenos">4548</span></a> <span class="k">return</span> <span class="kc">False</span>
</span><span id="Parser-4549"><a href="#Parser-4549"><span class="linenos">4549</span></a>
</span><span id="Parser-4550"><a href="#Parser-4550"><span class="linenos">4550</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-4551"><a href="#Parser-4551"><span class="linenos">4551</span></a> <span class="n">result</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span>
</span><span id="Parser-4552"><a href="#Parser-4552"><span class="linenos">4552</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_try_parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">,</span> <span class="n">retreat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-4553"><a href="#Parser-4553"><span class="linenos">4553</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_try_parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_offset</span><span class="p">,</span> <span class="n">retreat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-4554"><a href="#Parser-4554"><span class="linenos">4554</span></a> <span class="p">)</span>
</span><span id="Parser-4555"><a href="#Parser-4555"><span class="linenos">4555</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-4556"><a href="#Parser-4556"><span class="linenos">4556</span></a> <span class="k">return</span> <span class="n">result</span>
</span><span id="Parser-4557"><a href="#Parser-4557"><span class="linenos">4557</span></a>
</span><span id="Parser-4558"><a href="#Parser-4558"><span class="linenos">4558</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_limit_by</span><span class="p">(</span><span class="bp">self</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">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><span id="Parser-4559"><a href="#Parser-4559"><span class="linenos">4559</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="Parser-4560"><a href="#Parser-4560"><span class="linenos">4560</span></a>
</span><span id="Parser-4561"><a href="#Parser-4561"><span class="linenos">4561</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_locks</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
</span><span id="Parser-4562"><a href="#Parser-4562"><span class="linenos">4562</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-4563"><a href="#Parser-4563"><span class="linenos">4563</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-4564"><a href="#Parser-4564"><span class="linenos">4564</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">):</span>
</span><span id="Parser-4565"><a href="#Parser-4565"><span class="linenos">4565</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-4566"><a href="#Parser-4566"><span class="linenos">4566</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
</span><span id="Parser-4567"><a href="#Parser-4567"><span class="linenos">4567</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
</span><span id="Parser-4568"><a href="#Parser-4568"><span class="linenos">4568</span></a> <span class="p">):</span>
</span><span id="Parser-4569"><a href="#Parser-4569"><span class="linenos">4569</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-4570"><a href="#Parser-4570"><span class="linenos">4570</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4571"><a href="#Parser-4571"><span class="linenos">4571</span></a> <span class="k">break</span>
</span><span id="Parser-4572"><a href="#Parser-4572"><span class="linenos">4572</span></a>
</span><span id="Parser-4573"><a href="#Parser-4573"><span class="linenos">4573</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4574"><a href="#Parser-4574"><span class="linenos">4574</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OF&quot;</span><span class="p">):</span>
</span><span id="Parser-4575"><a href="#Parser-4575"><span class="linenos">4575</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="Parser-4576"><a href="#Parser-4576"><span class="linenos">4576</span></a>
</span><span id="Parser-4577"><a href="#Parser-4577"><span class="linenos">4577</span></a> <span class="n">wait</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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4578"><a href="#Parser-4578"><span class="linenos">4578</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOWAIT&quot;</span><span class="p">):</span>
</span><span id="Parser-4579"><a href="#Parser-4579"><span class="linenos">4579</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-4580"><a href="#Parser-4580"><span class="linenos">4580</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WAIT&quot;</span><span class="p">):</span>
</span><span id="Parser-4581"><a href="#Parser-4581"><span class="linenos">4581</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="Parser-4582"><a href="#Parser-4582"><span class="linenos">4582</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
</span><span id="Parser-4583"><a href="#Parser-4583"><span class="linenos">4583</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-4584"><a href="#Parser-4584"><span class="linenos">4584</span></a>
</span><span id="Parser-4585"><a href="#Parser-4585"><span class="linenos">4585</span></a> <span class="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="Parser-4586"><a href="#Parser-4586"><span class="linenos">4586</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
</span><span id="Parser-4587"><a href="#Parser-4587"><span class="linenos">4587</span></a> <span class="p">)</span>
</span><span id="Parser-4588"><a href="#Parser-4588"><span class="linenos">4588</span></a>
</span><span id="Parser-4589"><a href="#Parser-4589"><span class="linenos">4589</span></a> <span class="k">return</span> <span class="n">locks</span>
</span><span id="Parser-4590"><a href="#Parser-4590"><span class="linenos">4590</span></a>
</span><span id="Parser-4591"><a href="#Parser-4591"><span class="linenos">4591</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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="Parser-4592"><a href="#Parser-4592"><span class="linenos">4592</span></a> <span class="k">while</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_OPERATIONS</span><span class="p">):</span>
</span><span id="Parser-4593"><a href="#Parser-4593"><span class="linenos">4593</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="Parser-4594"><a href="#Parser-4594"><span class="linenos">4594</span></a>
</span><span id="Parser-4595"><a href="#Parser-4595"><span class="linenos">4595</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">:</span>
</span><span id="Parser-4596"><a href="#Parser-4596"><span class="linenos">4596</span></a> <span class="n">operation</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">exp</span><span class="o">.</span><span class="n">SetOperation</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
</span><span id="Parser-4597"><a href="#Parser-4597"><span class="linenos">4597</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">:</span>
</span><span id="Parser-4598"><a href="#Parser-4598"><span class="linenos">4598</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
</span><span id="Parser-4599"><a href="#Parser-4599"><span class="linenos">4599</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4600"><a href="#Parser-4600"><span class="linenos">4600</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span>
</span><span id="Parser-4601"><a href="#Parser-4601"><span class="linenos">4601</span></a>
</span><span id="Parser-4602"><a href="#Parser-4602"><span class="linenos">4602</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">comments</span>
</span><span id="Parser-4603"><a href="#Parser-4603"><span class="linenos">4603</span></a>
</span><span id="Parser-4604"><a href="#Parser-4604"><span class="linenos">4604</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
</span><span id="Parser-4605"><a href="#Parser-4605"><span class="linenos">4605</span></a> <span class="n">distinct</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="p">]</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-4606"><a href="#Parser-4606"><span class="linenos">4606</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
</span><span id="Parser-4607"><a href="#Parser-4607"><span class="linenos">4607</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-4608"><a href="#Parser-4608"><span class="linenos">4608</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4609"><a href="#Parser-4609"><span class="linenos">4609</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SET_OP_DISTINCT_BY_DEFAULT</span><span class="p">[</span><span class="n">operation</span><span class="p">]</span>
</span><span id="Parser-4610"><a href="#Parser-4610"><span class="linenos">4610</span></a> <span class="k">if</span> <span class="n">distinct</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-4611"><a href="#Parser-4611"><span class="linenos">4611</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected DISTINCT or ALL for </span><span class="si">{</span><span class="n">operation</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Parser-4612"><a href="#Parser-4612"><span class="linenos">4612</span></a>
</span><span id="Parser-4613"><a href="#Parser-4613"><span class="linenos">4613</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">)</span>
</span><span id="Parser-4614"><a href="#Parser-4614"><span class="linenos">4614</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_set_operation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-4615"><a href="#Parser-4615"><span class="linenos">4615</span></a>
</span><span id="Parser-4616"><a href="#Parser-4616"><span class="linenos">4616</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4617"><a href="#Parser-4617"><span class="linenos">4617</span></a> <span class="n">operation</span><span class="p">,</span>
</span><span id="Parser-4618"><a href="#Parser-4618"><span class="linenos">4618</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="Parser-4619"><a href="#Parser-4619"><span class="linenos">4619</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-4620"><a href="#Parser-4620"><span class="linenos">4620</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
</span><span id="Parser-4621"><a href="#Parser-4621"><span class="linenos">4621</span></a> <span class="n">by_name</span><span class="o">=</span><span class="n">by_name</span><span class="p">,</span>
</span><span id="Parser-4622"><a href="#Parser-4622"><span class="linenos">4622</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="Parser-4623"><a href="#Parser-4623"><span class="linenos">4623</span></a> <span class="p">)</span>
</span><span id="Parser-4624"><a href="#Parser-4624"><span class="linenos">4624</span></a>
</span><span id="Parser-4625"><a href="#Parser-4625"><span class="linenos">4625</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">SetOperation</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">MODIFIERS_ATTACHED_TO_SET_OP</span><span class="p">:</span>
</span><span id="Parser-4626"><a href="#Parser-4626"><span class="linenos">4626</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">expression</span>
</span><span id="Parser-4627"><a href="#Parser-4627"><span class="linenos">4627</span></a>
</span><span id="Parser-4628"><a href="#Parser-4628"><span class="linenos">4628</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="Parser-4629"><a href="#Parser-4629"><span class="linenos">4629</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_OP_MODIFIERS</span><span class="p">:</span>
</span><span id="Parser-4630"><a href="#Parser-4630"><span class="linenos">4630</span></a> <span class="n">expr</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="n">arg</span><span class="p">)</span>
</span><span id="Parser-4631"><a href="#Parser-4631"><span class="linenos">4631</span></a> <span class="k">if</span> <span class="n">expr</span><span class="p">:</span>
</span><span id="Parser-4632"><a href="#Parser-4632"><span class="linenos">4632</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
</span><span id="Parser-4633"><a href="#Parser-4633"><span class="linenos">4633</span></a>
</span><span id="Parser-4634"><a href="#Parser-4634"><span class="linenos">4634</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4635"><a href="#Parser-4635"><span class="linenos">4635</span></a>
</span><span id="Parser-4636"><a href="#Parser-4636"><span class="linenos">4636</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_expression</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4637"><a href="#Parser-4637"><span class="linenos">4637</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">())</span>
</span><span id="Parser-4638"><a href="#Parser-4638"><span class="linenos">4638</span></a>
</span><span id="Parser-4639"><a href="#Parser-4639"><span class="linenos">4639</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_assignment</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4640"><a href="#Parser-4640"><span class="linenos">4640</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_disjunction</span><span class="p">()</span>
</span><span id="Parser-4641"><a href="#Parser-4641"><span class="linenos">4641</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ASSIGNMENT</span><span class="p">:</span>
</span><span id="Parser-4642"><a href="#Parser-4642"><span class="linenos">4642</span></a> <span class="c1"># This allows us to parse &lt;non-identifier token&gt; := &lt;expr&gt;</span>
</span><span id="Parser-4643"><a href="#Parser-4643"><span class="linenos">4643</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span>
</span><span id="Parser-4644"><a href="#Parser-4644"><span class="linenos">4644</span></a> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">(</span><span class="n">ignore_reserved</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="Parser-4645"><a href="#Parser-4645"><span class="linenos">4645</span></a> <span class="p">)</span>
</span><span id="Parser-4646"><a href="#Parser-4646"><span class="linenos">4646</span></a>
</span><span id="Parser-4647"><a href="#Parser-4647"><span class="linenos">4647</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ASSIGNMENT</span><span class="p">):</span>
</span><span id="Parser-4648"><a href="#Parser-4648"><span class="linenos">4648</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Parser-4649"><a href="#Parser-4649"><span class="linenos">4649</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="Parser-4650"><a href="#Parser-4650"><span class="linenos">4650</span></a>
</span><span id="Parser-4651"><a href="#Parser-4651"><span class="linenos">4651</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4652"><a href="#Parser-4652"><span class="linenos">4652</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">ASSIGNMENT</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
</span><span id="Parser-4653"><a href="#Parser-4653"><span class="linenos">4653</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-4654"><a href="#Parser-4654"><span class="linenos">4654</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
</span><span id="Parser-4655"><a href="#Parser-4655"><span class="linenos">4655</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span>
</span><span id="Parser-4656"><a href="#Parser-4656"><span class="linenos">4656</span></a> <span class="p">)</span>
</span><span id="Parser-4657"><a href="#Parser-4657"><span class="linenos">4657</span></a>
</span><span id="Parser-4658"><a href="#Parser-4658"><span class="linenos">4658</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4659"><a href="#Parser-4659"><span class="linenos">4659</span></a>
</span><span id="Parser-4660"><a href="#Parser-4660"><span class="linenos">4660</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_disjunction</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4661"><a href="#Parser-4661"><span class="linenos">4661</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">DISJUNCTION</span><span class="p">)</span>
</span><span id="Parser-4662"><a href="#Parser-4662"><span class="linenos">4662</span></a>
</span><span id="Parser-4663"><a href="#Parser-4663"><span class="linenos">4663</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_conjunction</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4664"><a href="#Parser-4664"><span class="linenos">4664</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONJUNCTION</span><span class="p">)</span>
</span><span id="Parser-4665"><a href="#Parser-4665"><span class="linenos">4665</span></a>
</span><span id="Parser-4666"><a href="#Parser-4666"><span class="linenos">4666</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_equality</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4667"><a href="#Parser-4667"><span class="linenos">4667</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_comparison</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EQUALITY</span><span class="p">)</span>
</span><span id="Parser-4668"><a href="#Parser-4668"><span class="linenos">4668</span></a>
</span><span id="Parser-4669"><a href="#Parser-4669"><span class="linenos">4669</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_comparison</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4670"><a href="#Parser-4670"><span class="linenos">4670</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_range</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPARISON</span><span class="p">)</span>
</span><span id="Parser-4671"><a href="#Parser-4671"><span class="linenos">4671</span></a>
</span><span id="Parser-4672"><a href="#Parser-4672"><span class="linenos">4672</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">=</span> <span class="kc">None</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4673"><a href="#Parser-4673"><span class="linenos">4673</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-4674"><a href="#Parser-4674"><span class="linenos">4674</span></a> <span class="n">negate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
</span><span id="Parser-4675"><a href="#Parser-4675"><span class="linenos">4675</span></a>
</span><span id="Parser-4676"><a href="#Parser-4676"><span class="linenos">4676</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">):</span>
</span><span id="Parser-4677"><a href="#Parser-4677"><span class="linenos">4677</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
</span><span id="Parser-4678"><a href="#Parser-4678"><span class="linenos">4678</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="Parser-4679"><a href="#Parser-4679"><span class="linenos">4679</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4680"><a href="#Parser-4680"><span class="linenos">4680</span></a>
</span><span id="Parser-4681"><a href="#Parser-4681"><span class="linenos">4681</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
</span><span id="Parser-4682"><a href="#Parser-4682"><span class="linenos">4682</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">):</span>
</span><span id="Parser-4683"><a href="#Parser-4683"><span class="linenos">4683</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</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">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
</span><span id="Parser-4684"><a href="#Parser-4684"><span class="linenos">4684</span></a>
</span><span id="Parser-4685"><a href="#Parser-4685"><span class="linenos">4685</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
</span><span id="Parser-4686"><a href="#Parser-4686"><span class="linenos">4686</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
</span><span id="Parser-4687"><a href="#Parser-4687"><span class="linenos">4687</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOTNULL</span><span class="p">):</span>
</span><span id="Parser-4688"><a href="#Parser-4688"><span class="linenos">4688</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</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">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
</span><span id="Parser-4689"><a href="#Parser-4689"><span class="linenos">4689</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</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="Parser-4690"><a href="#Parser-4690"><span class="linenos">4690</span></a>
</span><span id="Parser-4691"><a href="#Parser-4691"><span class="linenos">4691</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
</span><span id="Parser-4692"><a href="#Parser-4692"><span class="linenos">4692</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_negate_range</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-4693"><a href="#Parser-4693"><span class="linenos">4693</span></a>
</span><span id="Parser-4694"><a href="#Parser-4694"><span class="linenos">4694</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">):</span>
</span><span id="Parser-4695"><a href="#Parser-4695"><span class="linenos">4695</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_is</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-4696"><a href="#Parser-4696"><span class="linenos">4696</span></a>
</span><span id="Parser-4697"><a href="#Parser-4697"><span class="linenos">4697</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4698"><a href="#Parser-4698"><span class="linenos">4698</span></a>
</span><span id="Parser-4699"><a href="#Parser-4699"><span class="linenos">4699</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_negate_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">=</span> <span class="kc">None</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4700"><a href="#Parser-4700"><span class="linenos">4700</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="Parser-4701"><a href="#Parser-4701"><span class="linenos">4701</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4702"><a href="#Parser-4702"><span class="linenos">4702</span></a>
</span><span id="Parser-4703"><a href="#Parser-4703"><span class="linenos">4703</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</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="Parser-4704"><a href="#Parser-4704"><span class="linenos">4704</span></a>
</span><span id="Parser-4705"><a href="#Parser-4705"><span class="linenos">4705</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_is</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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="Parser-4706"><a href="#Parser-4706"><span class="linenos">4706</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
</span><span id="Parser-4707"><a href="#Parser-4707"><span class="linenos">4707</span></a> <span class="n">negate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
</span><span id="Parser-4708"><a href="#Parser-4708"><span class="linenos">4708</span></a>
</span><span id="Parser-4709"><a href="#Parser-4709"><span class="linenos">4709</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
</span><span id="Parser-4710"><a href="#Parser-4710"><span class="linenos">4710</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span>
</span><span id="Parser-4711"><a href="#Parser-4711"><span class="linenos">4711</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">klass</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-4712"><a href="#Parser-4712"><span class="linenos">4712</span></a>
</span><span id="Parser-4713"><a href="#Parser-4713"><span class="linenos">4713</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
</span><span id="Parser-4714"><a href="#Parser-4714"><span class="linenos">4714</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">IS_JSON_PREDICATE_KIND</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-4715"><a href="#Parser-4715"><span class="linenos">4715</span></a>
</span><span id="Parser-4716"><a href="#Parser-4716"><span class="linenos">4716</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">):</span>
</span><span id="Parser-4717"><a href="#Parser-4717"><span class="linenos">4717</span></a> <span class="n">_with</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-4718"><a href="#Parser-4718"><span class="linenos">4718</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">):</span>
</span><span id="Parser-4719"><a href="#Parser-4719"><span class="linenos">4719</span></a> <span class="n">_with</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-4720"><a href="#Parser-4720"><span class="linenos">4720</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4721"><a href="#Parser-4721"><span class="linenos">4721</span></a> <span class="n">_with</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4722"><a href="#Parser-4722"><span class="linenos">4722</span></a>
</span><span id="Parser-4723"><a href="#Parser-4723"><span class="linenos">4723</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">)</span>
</span><span id="Parser-4724"><a href="#Parser-4724"><span class="linenos">4724</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEYS&quot;</span><span class="p">)</span>
</span><span id="Parser-4725"><a href="#Parser-4725"><span class="linenos">4725</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4726"><a href="#Parser-4726"><span class="linenos">4726</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSON</span><span class="p">,</span> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="n">kind</span><span class="p">,</span> <span class="s2">&quot;with&quot;</span><span class="p">:</span> <span class="n">_with</span><span class="p">,</span> <span class="s2">&quot;unique&quot;</span><span class="p">:</span> <span class="n">unique</span><span class="p">}</span>
</span><span id="Parser-4727"><a href="#Parser-4727"><span class="linenos">4727</span></a> <span class="p">)</span>
</span><span id="Parser-4728"><a href="#Parser-4728"><span class="linenos">4728</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4729"><a href="#Parser-4729"><span class="linenos">4729</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_null</span><span class="p">()</span>
</span><span id="Parser-4730"><a href="#Parser-4730"><span class="linenos">4730</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="Parser-4731"><a href="#Parser-4731"><span class="linenos">4731</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-4732"><a href="#Parser-4732"><span class="linenos">4732</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4733"><a href="#Parser-4733"><span class="linenos">4733</span></a>
</span><span id="Parser-4734"><a href="#Parser-4734"><span class="linenos">4734</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</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">expression</span><span class="p">)</span>
</span><span id="Parser-4735"><a href="#Parser-4735"><span class="linenos">4735</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</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="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">this</span>
</span><span id="Parser-4736"><a href="#Parser-4736"><span class="linenos">4736</span></a>
</span><span id="Parser-4737"><a href="#Parser-4737"><span class="linenos">4737</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="n">alias</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">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
</span><span id="Parser-4738"><a href="#Parser-4738"><span class="linenos">4738</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-4739"><a href="#Parser-4739"><span class="linenos">4739</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
</span><span id="Parser-4740"><a href="#Parser-4740"><span class="linenos">4740</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</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">unnest</span><span class="o">=</span><span class="n">unnest</span><span class="p">)</span>
</span><span id="Parser-4741"><a href="#Parser-4741"><span class="linenos">4741</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)):</span>
</span><span id="Parser-4742"><a href="#Parser-4742"><span class="linenos">4742</span></a> <span class="n">matched_l_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span>
</span><span id="Parser-4743"><a href="#Parser-4743"><span class="linenos">4743</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
</span><span id="Parser-4744"><a href="#Parser-4744"><span class="linenos">4744</span></a>
</span><span id="Parser-4745"><a href="#Parser-4745"><span class="linenos">4745</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">):</span>
</span><span id="Parser-4746"><a href="#Parser-4746"><span class="linenos">4746</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</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">query</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
</span><span id="Parser-4747"><a href="#Parser-4747"><span class="linenos">4747</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4748"><a href="#Parser-4748"><span class="linenos">4748</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-4749"><a href="#Parser-4749"><span class="linenos">4749</span></a>
</span><span id="Parser-4750"><a href="#Parser-4750"><span class="linenos">4750</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
</span><span id="Parser-4751"><a href="#Parser-4751"><span class="linenos">4751</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-4752"><a href="#Parser-4752"><span class="linenos">4752</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</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="Parser-4753"><a href="#Parser-4753"><span class="linenos">4753</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting ]&quot;</span><span class="p">)</span>
</span><span id="Parser-4754"><a href="#Parser-4754"><span class="linenos">4754</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4755"><a href="#Parser-4755"><span class="linenos">4755</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</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">field</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">())</span>
</span><span id="Parser-4756"><a href="#Parser-4756"><span class="linenos">4756</span></a>
</span><span id="Parser-4757"><a href="#Parser-4757"><span class="linenos">4757</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4758"><a href="#Parser-4758"><span class="linenos">4758</span></a>
</span><span id="Parser-4759"><a href="#Parser-4759"><span class="linenos">4759</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_between</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">:</span>
</span><span id="Parser-4760"><a href="#Parser-4760"><span class="linenos">4760</span></a> <span class="n">low</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-4761"><a href="#Parser-4761"><span class="linenos">4761</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span>
</span><span id="Parser-4762"><a href="#Parser-4762"><span class="linenos">4762</span></a> <span class="n">high</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-4763"><a href="#Parser-4763"><span class="linenos">4763</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Between</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">low</span><span class="o">=</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="n">high</span><span class="p">)</span>
</span><span id="Parser-4764"><a href="#Parser-4764"><span class="linenos">4764</span></a>
</span><span id="Parser-4765"><a href="#Parser-4765"><span class="linenos">4765</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_escape</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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="Parser-4766"><a href="#Parser-4766"><span class="linenos">4766</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">):</span>
</span><span id="Parser-4767"><a href="#Parser-4767"><span class="linenos">4767</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4768"><a href="#Parser-4768"><span class="linenos">4768</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Escape</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="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
</span><span id="Parser-4769"><a href="#Parser-4769"><span class="linenos">4769</span></a>
</span><span id="Parser-4770"><a href="#Parser-4770"><span class="linenos">4770</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_interval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_interval</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">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">Add</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">]:</span>
</span><span id="Parser-4771"><a href="#Parser-4771"><span class="linenos">4771</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-4772"><a href="#Parser-4772"><span class="linenos">4772</span></a>
</span><span id="Parser-4773"><a href="#Parser-4773"><span class="linenos">4773</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span> <span class="ow">and</span> <span class="n">match_interval</span><span class="p">:</span>
</span><span id="Parser-4774"><a href="#Parser-4774"><span class="linenos">4774</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4775"><a href="#Parser-4775"><span class="linenos">4775</span></a>
</span><span id="Parser-4776"><a href="#Parser-4776"><span class="linenos">4776</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-4777"><a href="#Parser-4777"><span class="linenos">4777</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="Parser-4778"><a href="#Parser-4778"><span class="linenos">4778</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4779"><a href="#Parser-4779"><span class="linenos">4779</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="Parser-4780"><a href="#Parser-4780"><span class="linenos">4780</span></a>
</span><span id="Parser-4781"><a href="#Parser-4781"><span class="linenos">4781</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="p">(</span>
</span><span id="Parser-4782"><a href="#Parser-4782"><span class="linenos">4782</span></a> <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">Column</span><span class="p">)</span>
</span><span id="Parser-4783"><a href="#Parser-4783"><span class="linenos">4783</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">table</span>
</span><span id="Parser-4784"><a href="#Parser-4784"><span class="linenos">4784</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span>
</span><span id="Parser-4785"><a href="#Parser-4785"><span class="linenos">4785</span></a> <span class="ow">and</span> <span class="n">this</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="o">==</span> <span class="s2">&quot;IS&quot;</span>
</span><span id="Parser-4786"><a href="#Parser-4786"><span class="linenos">4786</span></a> <span class="p">):</span>
</span><span id="Parser-4787"><a href="#Parser-4787"><span class="linenos">4787</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-4788"><a href="#Parser-4788"><span class="linenos">4788</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4789"><a href="#Parser-4789"><span class="linenos">4789</span></a>
</span><span id="Parser-4790"><a href="#Parser-4790"><span class="linenos">4790</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="p">(</span>
</span><span id="Parser-4791"><a href="#Parser-4791"><span class="linenos">4791</span></a> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-4792"><a href="#Parser-4792"><span class="linenos">4792</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-4793"><a href="#Parser-4793"><span class="linenos">4793</span></a> <span class="p">)</span>
</span><span id="Parser-4794"><a href="#Parser-4794"><span class="linenos">4794</span></a>
</span><span id="Parser-4795"><a href="#Parser-4795"><span class="linenos">4795</span></a> <span class="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
</span><span id="Parser-4796"><a href="#Parser-4796"><span class="linenos">4796</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
</span><span id="Parser-4797"><a href="#Parser-4797"><span class="linenos">4797</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
</span><span id="Parser-4798"><a href="#Parser-4798"><span class="linenos">4798</span></a> <span class="n">this</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">this</span><span class="o">.</span><span class="n">to_py</span><span class="p">())</span>
</span><span id="Parser-4799"><a href="#Parser-4799"><span class="linenos">4799</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
</span><span id="Parser-4800"><a href="#Parser-4800"><span class="linenos">4800</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">INTERVAL_STRING_RE</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="Parser-4801"><a href="#Parser-4801"><span class="linenos">4801</span></a> <span class="k">if</span> <span class="n">parts</span> <span class="ow">and</span> <span class="n">unit</span><span class="p">:</span>
</span><span id="Parser-4802"><a href="#Parser-4802"><span class="linenos">4802</span></a> <span class="c1"># Unconsume the eagerly-parsed unit, since the real unit was part of the string</span>
</span><span id="Parser-4803"><a href="#Parser-4803"><span class="linenos">4803</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4804"><a href="#Parser-4804"><span class="linenos">4804</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-4805"><a href="#Parser-4805"><span class="linenos">4805</span></a>
</span><span id="Parser-4806"><a href="#Parser-4806"><span class="linenos">4806</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Parser-4807"><a href="#Parser-4807"><span class="linenos">4807</span></a> <span class="n">this</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">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>
</span><span id="Parser-4808"><a href="#Parser-4808"><span class="linenos">4808</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-4809"><a href="#Parser-4809"><span class="linenos">4809</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">INTERVAL_SPANS</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
</span><span id="Parser-4810"><a href="#Parser-4810"><span class="linenos">4810</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4811"><a href="#Parser-4811"><span class="linenos">4811</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">IntervalSpan</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-4812"><a href="#Parser-4812"><span class="linenos">4812</span></a> <span class="p">)</span>
</span><span id="Parser-4813"><a href="#Parser-4813"><span class="linenos">4813</span></a>
</span><span id="Parser-4814"><a href="#Parser-4814"><span class="linenos">4814</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</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="Parser-4815"><a href="#Parser-4815"><span class="linenos">4815</span></a>
</span><span id="Parser-4816"><a href="#Parser-4816"><span class="linenos">4816</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-4817"><a href="#Parser-4817"><span class="linenos">4817</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PLUS</span><span class="p">)</span>
</span><span id="Parser-4818"><a href="#Parser-4818"><span class="linenos">4818</span></a>
</span><span id="Parser-4819"><a href="#Parser-4819"><span class="linenos">4819</span></a> <span class="c1"># Convert INTERVAL &#39;val_1&#39; unit_1 [+] ... [+] &#39;val_n&#39; unit_n into a sum of intervals</span>
</span><span id="Parser-4820"><a href="#Parser-4820"><span class="linenos">4820</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-4821"><a href="#Parser-4821"><span class="linenos">4821</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4822"><a href="#Parser-4822"><span class="linenos">4822</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">(</span><span class="n">match_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-4823"><a href="#Parser-4823"><span class="linenos">4823</span></a> <span class="p">)</span>
</span><span id="Parser-4824"><a href="#Parser-4824"><span class="linenos">4824</span></a>
</span><span id="Parser-4825"><a href="#Parser-4825"><span class="linenos">4825</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-4826"><a href="#Parser-4826"><span class="linenos">4826</span></a> <span class="k">return</span> <span class="n">interval</span>
</span><span id="Parser-4827"><a href="#Parser-4827"><span class="linenos">4827</span></a>
</span><span id="Parser-4828"><a href="#Parser-4828"><span class="linenos">4828</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_bitwise</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4829"><a href="#Parser-4829"><span class="linenos">4829</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="Parser-4830"><a href="#Parser-4830"><span class="linenos">4830</span></a>
</span><span id="Parser-4831"><a href="#Parser-4831"><span class="linenos">4831</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-4832"><a href="#Parser-4832"><span class="linenos">4832</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">):</span>
</span><span id="Parser-4833"><a href="#Parser-4833"><span class="linenos">4833</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4834"><a href="#Parser-4834"><span class="linenos">4834</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
</span><span id="Parser-4835"><a href="#Parser-4835"><span class="linenos">4835</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-4836"><a href="#Parser-4836"><span class="linenos">4836</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
</span><span id="Parser-4837"><a href="#Parser-4837"><span class="linenos">4837</span></a> <span class="p">)</span>
</span><span id="Parser-4838"><a href="#Parser-4838"><span class="linenos">4838</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">):</span>
</span><span id="Parser-4839"><a href="#Parser-4839"><span class="linenos">4839</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4840"><a href="#Parser-4840"><span class="linenos">4840</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">,</span>
</span><span id="Parser-4841"><a href="#Parser-4841"><span class="linenos">4841</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-4842"><a href="#Parser-4842"><span class="linenos">4842</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
</span><span id="Parser-4843"><a href="#Parser-4843"><span class="linenos">4843</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
</span><span id="Parser-4844"><a href="#Parser-4844"><span class="linenos">4844</span></a> <span class="p">)</span>
</span><span id="Parser-4845"><a href="#Parser-4845"><span class="linenos">4845</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">):</span>
</span><span id="Parser-4846"><a href="#Parser-4846"><span class="linenos">4846</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4847"><a href="#Parser-4847"><span class="linenos">4847</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</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">expressions</span><span class="o">=</span><span class="n">ensure_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
</span><span id="Parser-4848"><a href="#Parser-4848"><span class="linenos">4848</span></a> <span class="p">)</span>
</span><span id="Parser-4849"><a href="#Parser-4849"><span class="linenos">4849</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
</span><span id="Parser-4850"><a href="#Parser-4850"><span class="linenos">4850</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4851"><a href="#Parser-4851"><span class="linenos">4851</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="Parser-4852"><a href="#Parser-4852"><span class="linenos">4852</span></a> <span class="p">)</span>
</span><span id="Parser-4853"><a href="#Parser-4853"><span class="linenos">4853</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
</span><span id="Parser-4854"><a href="#Parser-4854"><span class="linenos">4854</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4855"><a href="#Parser-4855"><span class="linenos">4855</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</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="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="Parser-4856"><a href="#Parser-4856"><span class="linenos">4856</span></a> <span class="p">)</span>
</span><span id="Parser-4857"><a href="#Parser-4857"><span class="linenos">4857</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-4858"><a href="#Parser-4858"><span class="linenos">4858</span></a> <span class="k">break</span>
</span><span id="Parser-4859"><a href="#Parser-4859"><span class="linenos">4859</span></a>
</span><span id="Parser-4860"><a href="#Parser-4860"><span class="linenos">4860</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4861"><a href="#Parser-4861"><span class="linenos">4861</span></a>
</span><span id="Parser-4862"><a href="#Parser-4862"><span class="linenos">4862</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_term</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4863"><a href="#Parser-4863"><span class="linenos">4863</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
</span><span id="Parser-4864"><a href="#Parser-4864"><span class="linenos">4864</span></a>
</span><span id="Parser-4865"><a href="#Parser-4865"><span class="linenos">4865</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TERM</span><span class="p">):</span>
</span><span id="Parser-4866"><a href="#Parser-4866"><span class="linenos">4866</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TERM</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">]</span>
</span><span id="Parser-4867"><a href="#Parser-4867"><span class="linenos">4867</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="Parser-4868"><a href="#Parser-4868"><span class="linenos">4868</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
</span><span id="Parser-4869"><a href="#Parser-4869"><span class="linenos">4869</span></a>
</span><span id="Parser-4870"><a href="#Parser-4870"><span class="linenos">4870</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">klass</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">comments</span><span class="o">=</span><span class="n">comments</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="Parser-4871"><a href="#Parser-4871"><span class="linenos">4871</span></a>
</span><span id="Parser-4872"><a href="#Parser-4872"><span class="linenos">4872</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">Collate</span><span class="p">):</span>
</span><span id="Parser-4873"><a href="#Parser-4873"><span class="linenos">4873</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">expression</span>
</span><span id="Parser-4874"><a href="#Parser-4874"><span class="linenos">4874</span></a>
</span><span id="Parser-4875"><a href="#Parser-4875"><span class="linenos">4875</span></a> <span class="c1"># Preserve collations such as pg_catalog.&quot;default&quot; (Postgres) as columns, otherwise</span>
</span><span id="Parser-4876"><a href="#Parser-4876"><span class="linenos">4876</span></a> <span class="c1"># fallback to Identifier / Var</span>
</span><span id="Parser-4877"><a href="#Parser-4877"><span class="linenos">4877</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expr</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Parser-4878"><a href="#Parser-4878"><span class="linenos">4878</span></a> <span class="n">ident</span> <span class="o">=</span> <span class="n">expr</span><span class="o">.</span><span class="n">this</span>
</span><span id="Parser-4879"><a href="#Parser-4879"><span class="linenos">4879</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ident</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="Parser-4880"><a href="#Parser-4880"><span class="linenos">4880</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="n">ident</span> <span class="k">if</span> <span class="n">ident</span><span class="o">.</span><span class="n">quoted</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">ident</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
</span><span id="Parser-4881"><a href="#Parser-4881"><span class="linenos">4881</span></a>
</span><span id="Parser-4882"><a href="#Parser-4882"><span class="linenos">4882</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4883"><a href="#Parser-4883"><span class="linenos">4883</span></a>
</span><span id="Parser-4884"><a href="#Parser-4884"><span class="linenos">4884</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_factor</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4885"><a href="#Parser-4885"><span class="linenos">4885</span></a> <span class="n">parse_method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exponent</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span>
</span><span id="Parser-4886"><a href="#Parser-4886"><span class="linenos">4886</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="Parser-4887"><a href="#Parser-4887"><span class="linenos">4887</span></a>
</span><span id="Parser-4888"><a href="#Parser-4888"><span class="linenos">4888</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">):</span>
</span><span id="Parser-4889"><a href="#Parser-4889"><span class="linenos">4889</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">]</span>
</span><span id="Parser-4890"><a href="#Parser-4890"><span class="linenos">4890</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="Parser-4891"><a href="#Parser-4891"><span class="linenos">4891</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="Parser-4892"><a href="#Parser-4892"><span class="linenos">4892</span></a>
</span><span id="Parser-4893"><a href="#Parser-4893"><span class="linenos">4893</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span> <span class="ow">and</span> <span class="n">klass</span> <span class="ow">is</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntDiv</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">isalpha</span><span class="p">():</span>
</span><span id="Parser-4894"><a href="#Parser-4894"><span class="linenos">4894</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-4895"><a href="#Parser-4895"><span class="linenos">4895</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4896"><a href="#Parser-4896"><span class="linenos">4896</span></a>
</span><span id="Parser-4897"><a href="#Parser-4897"><span class="linenos">4897</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">klass</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">comments</span><span class="o">=</span><span class="n">comments</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="Parser-4898"><a href="#Parser-4898"><span class="linenos">4898</span></a>
</span><span id="Parser-4899"><a href="#Parser-4899"><span class="linenos">4899</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">Div</span><span class="p">):</span>
</span><span id="Parser-4900"><a href="#Parser-4900"><span class="linenos">4900</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;typed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span>
</span><span id="Parser-4901"><a href="#Parser-4901"><span class="linenos">4901</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;safe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span>
</span><span id="Parser-4902"><a href="#Parser-4902"><span class="linenos">4902</span></a>
</span><span id="Parser-4903"><a href="#Parser-4903"><span class="linenos">4903</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4904"><a href="#Parser-4904"><span class="linenos">4904</span></a>
</span><span id="Parser-4905"><a href="#Parser-4905"><span class="linenos">4905</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_exponent</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4906"><a href="#Parser-4906"><span class="linenos">4906</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
</span><span id="Parser-4907"><a href="#Parser-4907"><span class="linenos">4907</span></a>
</span><span id="Parser-4908"><a href="#Parser-4908"><span class="linenos">4908</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unary</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-4909"><a href="#Parser-4909"><span class="linenos">4909</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">):</span>
</span><span id="Parser-4910"><a href="#Parser-4910"><span class="linenos">4910</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="Parser-4911"><a href="#Parser-4911"><span class="linenos">4911</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">())</span>
</span><span id="Parser-4912"><a href="#Parser-4912"><span class="linenos">4912</span></a>
</span><span id="Parser-4913"><a href="#Parser-4913"><span class="linenos">4913</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_type</span><span class="p">(</span>
</span><span id="Parser-4914"><a href="#Parser-4914"><span class="linenos">4914</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_interval</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="n">fallback_to_identifier</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-4915"><a href="#Parser-4915"><span class="linenos">4915</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="Parser-4916"><a href="#Parser-4916"><span class="linenos">4916</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">parse_interval</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">()</span>
</span><span id="Parser-4917"><a href="#Parser-4917"><span class="linenos">4917</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
</span><span id="Parser-4918"><a href="#Parser-4918"><span class="linenos">4918</span></a> <span class="k">return</span> <span class="n">interval</span>
</span><span id="Parser-4919"><a href="#Parser-4919"><span class="linenos">4919</span></a>
</span><span id="Parser-4920"><a href="#Parser-4920"><span class="linenos">4920</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-4921"><a href="#Parser-4921"><span class="linenos">4921</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-4922"><a href="#Parser-4922"><span class="linenos">4922</span></a>
</span><span id="Parser-4923"><a href="#Parser-4923"><span class="linenos">4923</span></a> <span class="c1"># parse_types() returns a Cast if we parsed BQ&#39;s inline constructor &lt;type&gt;(&lt;values&gt;) e.g.</span>
</span><span id="Parser-4924"><a href="#Parser-4924"><span class="linenos">4924</span></a> <span class="c1"># STRUCT&lt;a INT, b STRING&gt;(1, &#39;foo&#39;), which is canonicalized to CAST(&lt;values&gt; AS &lt;type&gt;)</span>
</span><span id="Parser-4925"><a href="#Parser-4925"><span class="linenos">4925</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data_type</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
</span><span id="Parser-4926"><a href="#Parser-4926"><span class="linenos">4926</span></a> <span class="c1"># This constructor can contain ops directly after it, for instance struct unnesting:</span>
</span><span id="Parser-4927"><a href="#Parser-4927"><span class="linenos">4927</span></a> <span class="c1"># STRUCT&lt;a INT, b STRING&gt;(1, &#39;foo&#39;).* --&gt; CAST(STRUCT(1, &#39;foo&#39;) AS STRUCT&lt;a iNT, b STRING).*</span>
</span><span id="Parser-4928"><a href="#Parser-4928"><span class="linenos">4928</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
</span><span id="Parser-4929"><a href="#Parser-4929"><span class="linenos">4929</span></a>
</span><span id="Parser-4930"><a href="#Parser-4930"><span class="linenos">4930</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
</span><span id="Parser-4931"><a href="#Parser-4931"><span class="linenos">4931</span></a> <span class="n">index2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-4932"><a href="#Parser-4932"><span class="linenos">4932</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="Parser-4933"><a href="#Parser-4933"><span class="linenos">4933</span></a>
</span><span id="Parser-4934"><a href="#Parser-4934"><span class="linenos">4934</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">Literal</span><span class="p">):</span>
</span><span id="Parser-4935"><a href="#Parser-4935"><span class="linenos">4935</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_LITERAL_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">data_type</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-4936"><a href="#Parser-4936"><span class="linenos">4936</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
</span><span id="Parser-4937"><a href="#Parser-4937"><span class="linenos">4937</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">data_type</span><span class="p">)</span>
</span><span id="Parser-4938"><a href="#Parser-4938"><span class="linenos">4938</span></a>
</span><span id="Parser-4939"><a href="#Parser-4939"><span class="linenos">4939</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</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">to</span><span class="o">=</span><span class="n">data_type</span><span class="p">)</span>
</span><span id="Parser-4940"><a href="#Parser-4940"><span class="linenos">4940</span></a>
</span><span id="Parser-4941"><a href="#Parser-4941"><span class="linenos">4941</span></a> <span class="c1"># The expressions arg gets set by the parser when we have something like DECIMAL(38, 0)</span>
</span><span id="Parser-4942"><a href="#Parser-4942"><span class="linenos">4942</span></a> <span class="c1"># in the input SQL. In that case, we&#39;ll produce these tokens: DECIMAL ( 38 , 0 )</span>
</span><span id="Parser-4943"><a href="#Parser-4943"><span class="linenos">4943</span></a> <span class="c1">#</span>
</span><span id="Parser-4944"><a href="#Parser-4944"><span class="linenos">4944</span></a> <span class="c1"># If the index difference here is greater than 1, that means the parser itself must have</span>
</span><span id="Parser-4945"><a href="#Parser-4945"><span class="linenos">4945</span></a> <span class="c1"># consumed additional tokens such as the DECIMAL scale and precision in the above example.</span>
</span><span id="Parser-4946"><a href="#Parser-4946"><span class="linenos">4946</span></a> <span class="c1">#</span>
</span><span id="Parser-4947"><a href="#Parser-4947"><span class="linenos">4947</span></a> <span class="c1"># If it&#39;s not greater than 1, then it must be 1, because we&#39;ve consumed at least the type</span>
</span><span id="Parser-4948"><a href="#Parser-4948"><span class="linenos">4948</span></a> <span class="c1"># keyword, meaning that the expressions arg of the DataType must have gotten set by a</span>
</span><span id="Parser-4949"><a href="#Parser-4949"><span class="linenos">4949</span></a> <span class="c1"># callable in the TYPE_CONVERTERS mapping. For example, Snowflake converts DECIMAL to</span>
</span><span id="Parser-4950"><a href="#Parser-4950"><span class="linenos">4950</span></a> <span class="c1"># DECIMAL(38, 0)) in order to facilitate the data type&#39;s transpilation.</span>
</span><span id="Parser-4951"><a href="#Parser-4951"><span class="linenos">4951</span></a> <span class="c1">#</span>
</span><span id="Parser-4952"><a href="#Parser-4952"><span class="linenos">4952</span></a> <span class="c1"># In these cases, we don&#39;t really want to return the converted type, but instead retreat</span>
</span><span id="Parser-4953"><a href="#Parser-4953"><span class="linenos">4953</span></a> <span class="c1"># and try to parse a Column or Identifier in the section below.</span>
</span><span id="Parser-4954"><a href="#Parser-4954"><span class="linenos">4954</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span> <span class="ow">and</span> <span class="n">index2</span> <span class="o">-</span> <span class="n">index</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Parser-4955"><a href="#Parser-4955"><span class="linenos">4955</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index2</span><span class="p">)</span>
</span><span id="Parser-4956"><a href="#Parser-4956"><span class="linenos">4956</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
</span><span id="Parser-4957"><a href="#Parser-4957"><span class="linenos">4957</span></a>
</span><span id="Parser-4958"><a href="#Parser-4958"><span class="linenos">4958</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-4959"><a href="#Parser-4959"><span class="linenos">4959</span></a>
</span><span id="Parser-4960"><a href="#Parser-4960"><span class="linenos">4960</span></a> <span class="k">if</span> <span class="n">fallback_to_identifier</span><span class="p">:</span>
</span><span id="Parser-4961"><a href="#Parser-4961"><span class="linenos">4961</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-4962"><a href="#Parser-4962"><span class="linenos">4962</span></a>
</span><span id="Parser-4963"><a href="#Parser-4963"><span class="linenos">4963</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-4964"><a href="#Parser-4964"><span class="linenos">4964</span></a> <span class="k">return</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-4965"><a href="#Parser-4965"><span class="linenos">4965</span></a>
</span><span id="Parser-4966"><a href="#Parser-4966"><span class="linenos">4966</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_type_size</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">]:</span>
</span><span id="Parser-4967"><a href="#Parser-4967"><span class="linenos">4967</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="Parser-4968"><a href="#Parser-4968"><span class="linenos">4968</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="Parser-4969"><a href="#Parser-4969"><span class="linenos">4969</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4970"><a href="#Parser-4970"><span class="linenos">4970</span></a>
</span><span id="Parser-4971"><a href="#Parser-4971"><span class="linenos">4971</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">table</span><span class="p">:</span>
</span><span id="Parser-4972"><a href="#Parser-4972"><span class="linenos">4972</span></a> <span class="n">this</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">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-4973"><a href="#Parser-4973"><span class="linenos">4973</span></a>
</span><span id="Parser-4974"><a href="#Parser-4974"><span class="linenos">4974</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-4975"><a href="#Parser-4975"><span class="linenos">4975</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</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="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-4976"><a href="#Parser-4976"><span class="linenos">4976</span></a> <span class="p">)</span>
</span><span id="Parser-4977"><a href="#Parser-4977"><span class="linenos">4977</span></a>
</span><span id="Parser-4978"><a href="#Parser-4978"><span class="linenos">4978</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_types</span><span class="p">(</span>
</span><span id="Parser-4979"><a href="#Parser-4979"><span class="linenos">4979</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</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="n">schema</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="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-4980"><a href="#Parser-4980"><span class="linenos">4980</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="Parser-4981"><a href="#Parser-4981"><span class="linenos">4981</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-4982"><a href="#Parser-4982"><span class="linenos">4982</span></a>
</span><span id="Parser-4983"><a href="#Parser-4983"><span class="linenos">4983</span></a> <span class="n">this</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 class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4984"><a href="#Parser-4984"><span class="linenos">4984</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SYSUDTLIB&quot;</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">)</span>
</span><span id="Parser-4985"><a href="#Parser-4985"><span class="linenos">4985</span></a>
</span><span id="Parser-4986"><a href="#Parser-4986"><span class="linenos">4986</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">):</span>
</span><span id="Parser-4987"><a href="#Parser-4987"><span class="linenos">4987</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">allow_identifiers</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
</span><span id="Parser-4988"><a href="#Parser-4988"><span class="linenos">4988</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
</span><span id="Parser-4989"><a href="#Parser-4989"><span class="linenos">4989</span></a> <span class="p">)</span>
</span><span id="Parser-4990"><a href="#Parser-4990"><span class="linenos">4990</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">identifier</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="Parser-4991"><a href="#Parser-4991"><span class="linenos">4991</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">identifier</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="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">))</span>
</span><span id="Parser-4992"><a href="#Parser-4992"><span class="linenos">4992</span></a>
</span><span id="Parser-4993"><a href="#Parser-4993"><span class="linenos">4993</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Parser-4994"><a href="#Parser-4994"><span class="linenos">4994</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected identifier&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-4995"><a href="#Parser-4995"><span class="linenos">4995</span></a>
</span><span id="Parser-4996"><a href="#Parser-4996"><span class="linenos">4996</span></a> <span class="k">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">:</span>
</span><span id="Parser-4997"><a href="#Parser-4997"><span class="linenos">4997</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="Parser-4998"><a href="#Parser-4998"><span class="linenos">4998</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span><span class="p">:</span>
</span><span id="Parser-4999"><a href="#Parser-4999"><span class="linenos">4999</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
</span><span id="Parser-5000"><a href="#Parser-5000"><span class="linenos">5000</span></a>
</span><span id="Parser-5001"><a href="#Parser-5001"><span class="linenos">5001</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
</span><span id="Parser-5002"><a href="#Parser-5002"><span class="linenos">5002</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_name</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">_advance_any</span><span class="p">()</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Parser-5003"><a href="#Parser-5003"><span class="linenos">5003</span></a>
</span><span id="Parser-5004"><a href="#Parser-5004"><span class="linenos">5004</span></a> <span class="n">this</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">build</span><span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5005"><a href="#Parser-5005"><span class="linenos">5005</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5006"><a href="#Parser-5006"><span class="linenos">5006</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-5007"><a href="#Parser-5007"><span class="linenos">5007</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5008"><a href="#Parser-5008"><span class="linenos">5008</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5009"><a href="#Parser-5009"><span class="linenos">5009</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5010"><a href="#Parser-5010"><span class="linenos">5010</span></a>
</span><span id="Parser-5011"><a href="#Parser-5011"><span class="linenos">5011</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="Parser-5012"><a href="#Parser-5012"><span class="linenos">5012</span></a>
</span><span id="Parser-5013"><a href="#Parser-5013"><span class="linenos">5013</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">:</span>
</span><span id="Parser-5014"><a href="#Parser-5014"><span class="linenos">5014</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PseudoType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-5015"><a href="#Parser-5015"><span class="linenos">5015</span></a>
</span><span id="Parser-5016"><a href="#Parser-5016"><span class="linenos">5016</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">:</span>
</span><span id="Parser-5017"><a href="#Parser-5017"><span class="linenos">5017</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ObjectIdentifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-5018"><a href="#Parser-5018"><span class="linenos">5018</span></a>
</span><span id="Parser-5019"><a href="#Parser-5019"><span class="linenos">5019</span></a> <span class="c1"># https://materialize.com/docs/sql/types/map/</span>
</span><span id="Parser-5020"><a href="#Parser-5020"><span class="linenos">5020</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MAP</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">):</span>
</span><span id="Parser-5021"><a href="#Parser-5021"><span class="linenos">5021</span></a> <span class="n">key_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
</span><span id="Parser-5022"><a href="#Parser-5022"><span class="linenos">5022</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
</span><span id="Parser-5023"><a href="#Parser-5023"><span class="linenos">5023</span></a> <span class="p">)</span>
</span><span id="Parser-5024"><a href="#Parser-5024"><span class="linenos">5024</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FARROW</span><span class="p">):</span>
</span><span id="Parser-5025"><a href="#Parser-5025"><span class="linenos">5025</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-5026"><a href="#Parser-5026"><span class="linenos">5026</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5027"><a href="#Parser-5027"><span class="linenos">5027</span></a>
</span><span id="Parser-5028"><a href="#Parser-5028"><span class="linenos">5028</span></a> <span class="n">value_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
</span><span id="Parser-5029"><a href="#Parser-5029"><span class="linenos">5029</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
</span><span id="Parser-5030"><a href="#Parser-5030"><span class="linenos">5030</span></a> <span class="p">)</span>
</span><span id="Parser-5031"><a href="#Parser-5031"><span class="linenos">5031</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">):</span>
</span><span id="Parser-5032"><a href="#Parser-5032"><span class="linenos">5032</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-5033"><a href="#Parser-5033"><span class="linenos">5033</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5034"><a href="#Parser-5034"><span class="linenos">5034</span></a>
</span><span id="Parser-5035"><a href="#Parser-5035"><span class="linenos">5035</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
</span><span id="Parser-5036"><a href="#Parser-5036"><span class="linenos">5036</span></a> <span class="n">this</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">MAP</span><span class="p">,</span>
</span><span id="Parser-5037"><a href="#Parser-5037"><span class="linenos">5037</span></a> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">key_type</span><span class="p">,</span> <span class="n">value_type</span><span class="p">],</span>
</span><span id="Parser-5038"><a href="#Parser-5038"><span class="linenos">5038</span></a> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="Parser-5039"><a href="#Parser-5039"><span class="linenos">5039</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
</span><span id="Parser-5040"><a href="#Parser-5040"><span class="linenos">5040</span></a> <span class="p">)</span>
</span><span id="Parser-5041"><a href="#Parser-5041"><span class="linenos">5041</span></a>
</span><span id="Parser-5042"><a href="#Parser-5042"><span class="linenos">5042</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPE_TOKENS</span>
</span><span id="Parser-5043"><a href="#Parser-5043"><span class="linenos">5043</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_TYPE_TOKENS</span>
</span><span id="Parser-5044"><a href="#Parser-5044"><span class="linenos">5044</span></a> <span class="n">is_aggregate</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_TYPE_TOKENS</span>
</span><span id="Parser-5045"><a href="#Parser-5045"><span class="linenos">5045</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5046"><a href="#Parser-5046"><span class="linenos">5046</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-5047"><a href="#Parser-5047"><span class="linenos">5047</span></a>
</span><span id="Parser-5048"><a href="#Parser-5048"><span class="linenos">5048</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-5049"><a href="#Parser-5049"><span class="linenos">5049</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
</span><span id="Parser-5050"><a href="#Parser-5050"><span class="linenos">5050</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">(</span><span class="n">type_required</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="Parser-5051"><a href="#Parser-5051"><span class="linenos">5051</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
</span><span id="Parser-5052"><a href="#Parser-5052"><span class="linenos">5052</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="Parser-5053"><a href="#Parser-5053"><span class="linenos">5053</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
</span><span id="Parser-5054"><a href="#Parser-5054"><span class="linenos">5054</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
</span><span id="Parser-5055"><a href="#Parser-5055"><span class="linenos">5055</span></a> <span class="p">)</span>
</span><span id="Parser-5056"><a href="#Parser-5056"><span class="linenos">5056</span></a> <span class="p">)</span>
</span><span id="Parser-5057"><a href="#Parser-5057"><span class="linenos">5057</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULLABLE</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Parser-5058"><a href="#Parser-5058"><span class="linenos">5058</span></a> <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="Parser-5059"><a href="#Parser-5059"><span class="linenos">5059</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;nullable&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5060"><a href="#Parser-5060"><span class="linenos">5060</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-5061"><a href="#Parser-5061"><span class="linenos">5061</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-5062"><a href="#Parser-5062"><span class="linenos">5062</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
</span><span id="Parser-5063"><a href="#Parser-5063"><span class="linenos">5063</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
</span><span id="Parser-5064"><a href="#Parser-5064"><span class="linenos">5064</span></a> <span class="k">elif</span> <span class="n">is_aggregate</span><span class="p">:</span>
</span><span id="Parser-5065"><a href="#Parser-5065"><span class="linenos">5065</span></a> <span class="n">func_or_ident</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
</span><span id="Parser-5066"><a href="#Parser-5066"><span class="linenos">5066</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ANY</span><span class="p">)</span>
</span><span id="Parser-5067"><a href="#Parser-5067"><span class="linenos">5067</span></a> <span class="p">)</span>
</span><span id="Parser-5068"><a href="#Parser-5068"><span class="linenos">5068</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">func_or_ident</span><span class="p">:</span>
</span><span id="Parser-5069"><a href="#Parser-5069"><span class="linenos">5069</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5070"><a href="#Parser-5070"><span class="linenos">5070</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">func_or_ident</span><span class="p">]</span>
</span><span id="Parser-5071"><a href="#Parser-5071"><span class="linenos">5071</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="Parser-5072"><a href="#Parser-5072"><span class="linenos">5072</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
</span><span id="Parser-5073"><a href="#Parser-5073"><span class="linenos">5073</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="Parser-5074"><a href="#Parser-5074"><span class="linenos">5074</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
</span><span id="Parser-5075"><a href="#Parser-5075"><span class="linenos">5075</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span>
</span><span id="Parser-5076"><a href="#Parser-5076"><span class="linenos">5076</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
</span><span id="Parser-5077"><a href="#Parser-5077"><span class="linenos">5077</span></a> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span><span class="p">,</span>
</span><span id="Parser-5078"><a href="#Parser-5078"><span class="linenos">5078</span></a> <span class="p">)</span>
</span><span id="Parser-5079"><a href="#Parser-5079"><span class="linenos">5079</span></a> <span class="p">)</span>
</span><span id="Parser-5080"><a href="#Parser-5080"><span class="linenos">5080</span></a> <span class="p">)</span>
</span><span id="Parser-5081"><a href="#Parser-5081"><span class="linenos">5081</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5082"><a href="#Parser-5082"><span class="linenos">5082</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type_size</span><span class="p">)</span>
</span><span id="Parser-5083"><a href="#Parser-5083"><span class="linenos">5083</span></a>
</span><span id="Parser-5084"><a href="#Parser-5084"><span class="linenos">5084</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/data-types-vector</span>
</span><span id="Parser-5085"><a href="#Parser-5085"><span class="linenos">5085</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VECTOR</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
</span><span id="Parser-5086"><a href="#Parser-5086"><span class="linenos">5086</span></a> <span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="Parser-5087"><a href="#Parser-5087"><span class="linenos">5087</span></a>
</span><span id="Parser-5088"><a href="#Parser-5088"><span class="linenos">5088</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
</span><span id="Parser-5089"><a href="#Parser-5089"><span class="linenos">5089</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-5090"><a href="#Parser-5090"><span class="linenos">5090</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5091"><a href="#Parser-5091"><span class="linenos">5091</span></a>
</span><span id="Parser-5092"><a href="#Parser-5092"><span class="linenos">5092</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-5093"><a href="#Parser-5093"><span class="linenos">5093</span></a>
</span><span id="Parser-5094"><a href="#Parser-5094"><span class="linenos">5094</span></a> <span class="n">values</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">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="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5095"><a href="#Parser-5095"><span class="linenos">5095</span></a>
</span><span id="Parser-5096"><a href="#Parser-5096"><span class="linenos">5096</span></a> <span class="k">if</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
</span><span id="Parser-5097"><a href="#Parser-5097"><span class="linenos">5097</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
</span><span id="Parser-5098"><a href="#Parser-5098"><span class="linenos">5098</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">(</span><span class="n">type_required</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="Parser-5099"><a href="#Parser-5099"><span class="linenos">5099</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5100"><a href="#Parser-5100"><span class="linenos">5100</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="Parser-5101"><a href="#Parser-5101"><span class="linenos">5101</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
</span><span id="Parser-5102"><a href="#Parser-5102"><span class="linenos">5102</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
</span><span id="Parser-5103"><a href="#Parser-5103"><span class="linenos">5103</span></a> <span class="p">)</span>
</span><span id="Parser-5104"><a href="#Parser-5104"><span class="linenos">5104</span></a> <span class="p">)</span>
</span><span id="Parser-5105"><a href="#Parser-5105"><span class="linenos">5105</span></a>
</span><span id="Parser-5106"><a href="#Parser-5106"><span class="linenos">5106</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
</span><span id="Parser-5107"><a href="#Parser-5107"><span class="linenos">5107</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting &gt;&quot;</span><span class="p">)</span>
</span><span id="Parser-5108"><a href="#Parser-5108"><span class="linenos">5108</span></a>
</span><span id="Parser-5109"><a href="#Parser-5109"><span class="linenos">5109</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)):</span>
</span><span id="Parser-5110"><a href="#Parser-5110"><span class="linenos">5110</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span>
</span><span id="Parser-5111"><a href="#Parser-5111"><span class="linenos">5111</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">values</span> <span class="ow">and</span> <span class="n">is_struct</span><span class="p">:</span>
</span><span id="Parser-5112"><a href="#Parser-5112"><span class="linenos">5112</span></a> <span class="n">values</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5113"><a href="#Parser-5113"><span class="linenos">5113</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-5114"><a href="#Parser-5114"><span class="linenos">5114</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5115"><a href="#Parser-5115"><span class="linenos">5115</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">))</span>
</span><span id="Parser-5116"><a href="#Parser-5116"><span class="linenos">5116</span></a>
</span><span id="Parser-5117"><a href="#Parser-5117"><span class="linenos">5117</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMESTAMPS</span><span class="p">:</span>
</span><span id="Parser-5118"><a href="#Parser-5118"><span class="linenos">5118</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
</span><span id="Parser-5119"><a href="#Parser-5119"><span class="linenos">5119</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-5120"><a href="#Parser-5120"><span class="linenos">5120</span></a> <span class="n">tz_type</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-5121"><a href="#Parser-5121"><span class="linenos">5121</span></a> <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">TIMETZ</span>
</span><span id="Parser-5122"><a href="#Parser-5122"><span class="linenos">5122</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMES</span>
</span><span id="Parser-5123"><a href="#Parser-5123"><span class="linenos">5123</span></a> <span class="k">else</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">TIMESTAMPTZ</span>
</span><span id="Parser-5124"><a href="#Parser-5124"><span class="linenos">5124</span></a> <span class="p">)</span>
</span><span id="Parser-5125"><a href="#Parser-5125"><span class="linenos">5125</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">tz_type</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-5126"><a href="#Parser-5126"><span class="linenos">5126</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
</span><span id="Parser-5127"><a href="#Parser-5127"><span class="linenos">5127</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-5128"><a href="#Parser-5128"><span class="linenos">5128</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-5129"><a href="#Parser-5129"><span class="linenos">5129</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
</span><span id="Parser-5130"><a href="#Parser-5130"><span class="linenos">5130</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-5131"><a href="#Parser-5131"><span class="linenos">5131</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
</span><span id="Parser-5132"><a href="#Parser-5132"><span class="linenos">5132</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5133"><a href="#Parser-5133"><span class="linenos">5133</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
</span><span id="Parser-5134"><a href="#Parser-5134"><span class="linenos">5134</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
</span><span id="Parser-5135"><a href="#Parser-5135"><span class="linenos">5135</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntervalSpan</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="Parser-5136"><a href="#Parser-5136"><span class="linenos">5136</span></a>
</span><span id="Parser-5137"><a href="#Parser-5137"><span class="linenos">5137</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</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="Parser-5138"><a href="#Parser-5138"><span class="linenos">5138</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5139"><a href="#Parser-5139"><span class="linenos">5139</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span>
</span><span id="Parser-5140"><a href="#Parser-5140"><span class="linenos">5140</span></a>
</span><span id="Parser-5141"><a href="#Parser-5141"><span class="linenos">5141</span></a> <span class="k">if</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
</span><span id="Parser-5142"><a href="#Parser-5142"><span class="linenos">5142</span></a> <span class="n">index2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-5143"><a href="#Parser-5143"><span class="linenos">5143</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-5144"><a href="#Parser-5144"><span class="linenos">5144</span></a>
</span><span id="Parser-5145"><a href="#Parser-5145"><span class="linenos">5145</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">peek</span><span class="p">:</span>
</span><span id="Parser-5146"><a href="#Parser-5146"><span class="linenos">5146</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-5147"><a href="#Parser-5147"><span class="linenos">5147</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5148"><a href="#Parser-5148"><span class="linenos">5148</span></a>
</span><span id="Parser-5149"><a href="#Parser-5149"><span class="linenos">5149</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index2</span><span class="p">)</span>
</span><span id="Parser-5150"><a href="#Parser-5150"><span class="linenos">5150</span></a>
</span><span id="Parser-5151"><a href="#Parser-5151"><span class="linenos">5151</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="Parser-5152"><a href="#Parser-5152"><span class="linenos">5152</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNSIGNED&quot;</span><span class="p">):</span>
</span><span id="Parser-5153"><a href="#Parser-5153"><span class="linenos">5153</span></a> <span class="n">unsigned_type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SIGNED_TO_UNSIGNED_TYPE_TOKEN</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_token</span><span class="p">)</span>
</span><span id="Parser-5154"><a href="#Parser-5154"><span class="linenos">5154</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unsigned_type_token</span><span class="p">:</span>
</span><span id="Parser-5155"><a href="#Parser-5155"><span class="linenos">5155</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot convert </span><span class="si">{</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2"> to unsigned.&quot;</span><span class="p">)</span>
</span><span id="Parser-5156"><a href="#Parser-5156"><span class="linenos">5156</span></a>
</span><span id="Parser-5157"><a href="#Parser-5157"><span class="linenos">5157</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="n">unsigned_type_token</span> <span class="ow">or</span> <span class="n">type_token</span>
</span><span id="Parser-5158"><a href="#Parser-5158"><span class="linenos">5158</span></a>
</span><span id="Parser-5159"><a href="#Parser-5159"><span class="linenos">5159</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
</span><span id="Parser-5160"><a href="#Parser-5160"><span class="linenos">5160</span></a> <span class="n">this</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="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
</span><span id="Parser-5161"><a href="#Parser-5161"><span class="linenos">5161</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-5162"><a href="#Parser-5162"><span class="linenos">5162</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
</span><span id="Parser-5163"><a href="#Parser-5163"><span class="linenos">5163</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
</span><span id="Parser-5164"><a href="#Parser-5164"><span class="linenos">5164</span></a> <span class="p">)</span>
</span><span id="Parser-5165"><a href="#Parser-5165"><span class="linenos">5165</span></a>
</span><span id="Parser-5166"><a href="#Parser-5166"><span class="linenos">5166</span></a> <span class="c1"># Empty arrays/structs are allowed</span>
</span><span id="Parser-5167"><a href="#Parser-5167"><span class="linenos">5167</span></a> <span class="k">if</span> <span class="n">values</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-5168"><a href="#Parser-5168"><span class="linenos">5168</span></a> <span class="bp">cls</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Struct</span> <span class="k">if</span> <span class="n">is_struct</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span>
</span><span id="Parser-5169"><a href="#Parser-5169"><span class="linenos">5169</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="bp">cls</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">values</span><span class="p">),</span> <span class="n">this</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-5170"><a href="#Parser-5170"><span class="linenos">5170</span></a>
</span><span id="Parser-5171"><a href="#Parser-5171"><span class="linenos">5171</span></a> <span class="k">elif</span> <span class="n">expressions</span><span class="p">:</span>
</span><span id="Parser-5172"><a href="#Parser-5172"><span class="linenos">5172</span></a> <span class="n">this</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="n">expressions</span><span class="p">)</span>
</span><span id="Parser-5173"><a href="#Parser-5173"><span class="linenos">5173</span></a>
</span><span id="Parser-5174"><a href="#Parser-5174"><span class="linenos">5174</span></a> <span class="c1"># https://materialize.com/docs/sql/types/list/#type-name</span>
</span><span id="Parser-5175"><a href="#Parser-5175"><span class="linenos">5175</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LIST</span><span class="p">):</span>
</span><span id="Parser-5176"><a href="#Parser-5176"><span class="linenos">5176</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</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">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">LIST</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5177"><a href="#Parser-5177"><span class="linenos">5177</span></a>
</span><span id="Parser-5178"><a href="#Parser-5178"><span class="linenos">5178</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-5179"><a href="#Parser-5179"><span class="linenos">5179</span></a>
</span><span id="Parser-5180"><a href="#Parser-5180"><span class="linenos">5180</span></a> <span class="c1"># Postgres supports the INT ARRAY[3] syntax as a synonym for INT[3]</span>
</span><span id="Parser-5181"><a href="#Parser-5181"><span class="linenos">5181</span></a> <span class="n">matched_array</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">)</span>
</span><span id="Parser-5182"><a href="#Parser-5182"><span class="linenos">5182</span></a>
</span><span id="Parser-5183"><a href="#Parser-5183"><span class="linenos">5183</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-5184"><a href="#Parser-5184"><span class="linenos">5184</span></a> <span class="n">datatype_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="Parser-5185"><a href="#Parser-5185"><span class="linenos">5185</span></a> <span class="n">matched_l_bracket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)</span>
</span><span id="Parser-5186"><a href="#Parser-5186"><span class="linenos">5186</span></a>
</span><span id="Parser-5187"><a href="#Parser-5187"><span class="linenos">5187</span></a> <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">matched_l_bracket</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">matched_array</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
</span><span id="Parser-5188"><a href="#Parser-5188"><span class="linenos">5188</span></a> <span class="n">datatype_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">)</span>
</span><span id="Parser-5189"><a href="#Parser-5189"><span class="linenos">5189</span></a> <span class="p">):</span>
</span><span id="Parser-5190"><a href="#Parser-5190"><span class="linenos">5190</span></a> <span class="c1"># Postgres allows casting empty arrays such as ARRAY[]::INT[],</span>
</span><span id="Parser-5191"><a href="#Parser-5191"><span class="linenos">5191</span></a> <span class="c1"># not to be confused with the fixed size array parsing</span>
</span><span id="Parser-5192"><a href="#Parser-5192"><span class="linenos">5192</span></a> <span class="k">break</span>
</span><span id="Parser-5193"><a href="#Parser-5193"><span class="linenos">5193</span></a>
</span><span id="Parser-5194"><a href="#Parser-5194"><span class="linenos">5194</span></a> <span class="n">matched_array</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-5195"><a href="#Parser-5195"><span class="linenos">5195</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="Parser-5196"><a href="#Parser-5196"><span class="linenos">5196</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Parser-5197"><a href="#Parser-5197"><span class="linenos">5197</span></a> <span class="n">values</span>
</span><span id="Parser-5198"><a href="#Parser-5198"><span class="linenos">5198</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">schema</span>
</span><span id="Parser-5199"><a href="#Parser-5199"><span class="linenos">5199</span></a> <span class="ow">and</span> <span class="p">(</span>
</span><span id="Parser-5200"><a href="#Parser-5200"><span class="linenos">5200</span></a> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_FIXED_SIZE_ARRAYS</span> <span class="ow">or</span> <span class="n">datatype_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ARRAY</span>
</span><span id="Parser-5201"><a href="#Parser-5201"><span class="linenos">5201</span></a> <span class="p">)</span>
</span><span id="Parser-5202"><a href="#Parser-5202"><span class="linenos">5202</span></a> <span class="p">):</span>
</span><span id="Parser-5203"><a href="#Parser-5203"><span class="linenos">5203</span></a> <span class="c1"># Retreating here means that we should not parse the following values as part of the data type, e.g. in DuckDB</span>
</span><span id="Parser-5204"><a href="#Parser-5204"><span class="linenos">5204</span></a> <span class="c1"># ARRAY[1] should retreat and instead be parsed into exp.Array in contrast to INT[x][y] which denotes a fixed-size array data type</span>
</span><span id="Parser-5205"><a href="#Parser-5205"><span class="linenos">5205</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-5206"><a href="#Parser-5206"><span class="linenos">5206</span></a> <span class="k">break</span>
</span><span id="Parser-5207"><a href="#Parser-5207"><span class="linenos">5207</span></a>
</span><span id="Parser-5208"><a href="#Parser-5208"><span class="linenos">5208</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
</span><span id="Parser-5209"><a href="#Parser-5209"><span class="linenos">5209</span></a> <span class="n">this</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">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span>
</span><span id="Parser-5210"><a href="#Parser-5210"><span class="linenos">5210</span></a> <span class="p">)</span>
</span><span id="Parser-5211"><a href="#Parser-5211"><span class="linenos">5211</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">)</span>
</span><span id="Parser-5212"><a href="#Parser-5212"><span class="linenos">5212</span></a>
</span><span id="Parser-5213"><a href="#Parser-5213"><span class="linenos">5213</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_CONVERTERS</span> <span class="ow">and</span> <span class="nb">isinstance</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">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">):</span>
</span><span id="Parser-5214"><a href="#Parser-5214"><span class="linenos">5214</span></a> <span class="n">converter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_CONVERTERS</span><span class="o">.</span><span class="n">get</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="Parser-5215"><a href="#Parser-5215"><span class="linenos">5215</span></a> <span class="k">if</span> <span class="n">converter</span><span class="p">:</span>
</span><span id="Parser-5216"><a href="#Parser-5216"><span class="linenos">5216</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">converter</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="p">))</span>
</span><span id="Parser-5217"><a href="#Parser-5217"><span class="linenos">5217</span></a>
</span><span id="Parser-5218"><a href="#Parser-5218"><span class="linenos">5218</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-5219"><a href="#Parser-5219"><span class="linenos">5219</span></a>
</span><span id="Parser-5220"><a href="#Parser-5220"><span class="linenos">5220</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_required</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">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="Parser-5221"><a href="#Parser-5221"><span class="linenos">5221</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-5222"><a href="#Parser-5222"><span class="linenos">5222</span></a>
</span><span id="Parser-5223"><a href="#Parser-5223"><span class="linenos">5223</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Parser-5224"><a href="#Parser-5224"><span class="linenos">5224</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Parser-5225"><a href="#Parser-5225"><span class="linenos">5225</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
</span><span id="Parser-5226"><a href="#Parser-5226"><span class="linenos">5226</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span>
</span><span id="Parser-5227"><a href="#Parser-5227"><span class="linenos">5227</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span>
</span><span id="Parser-5228"><a href="#Parser-5228"><span class="linenos">5228</span></a> <span class="p">):</span>
</span><span id="Parser-5229"><a href="#Parser-5229"><span class="linenos">5229</span></a> <span class="c1"># Takes care of special cases like `STRUCT&lt;list ARRAY&lt;...&gt;&gt;` where the identifier is also a</span>
</span><span id="Parser-5230"><a href="#Parser-5230"><span class="linenos">5230</span></a> <span class="c1"># type token. Without this, the list will be parsed as a type and we&#39;ll eventually crash</span>
</span><span id="Parser-5231"><a href="#Parser-5231"><span class="linenos">5231</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-5232"><a href="#Parser-5232"><span class="linenos">5232</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5233"><a href="#Parser-5233"><span class="linenos">5233</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-5234"><a href="#Parser-5234"><span class="linenos">5234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">(</span><span class="n">parse_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">fallback_to_identifier</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5235"><a href="#Parser-5235"><span class="linenos">5235</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-5236"><a href="#Parser-5236"><span class="linenos">5236</span></a> <span class="p">)</span>
</span><span id="Parser-5237"><a href="#Parser-5237"><span class="linenos">5237</span></a>
</span><span id="Parser-5238"><a href="#Parser-5238"><span class="linenos">5238</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span>
</span><span id="Parser-5239"><a href="#Parser-5239"><span class="linenos">5239</span></a>
</span><span id="Parser-5240"><a href="#Parser-5240"><span class="linenos">5240</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Parser-5241"><a href="#Parser-5241"><span class="linenos">5241</span></a> <span class="n">type_required</span>
</span><span id="Parser-5242"><a href="#Parser-5242"><span class="linenos">5242</span></a> <span class="ow">and</span> <span class="ow">not</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">DataType</span><span class="p">)</span>
</span><span id="Parser-5243"><a href="#Parser-5243"><span class="linenos">5243</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-5244"><a href="#Parser-5244"><span class="linenos">5244</span></a> <span class="p">):</span>
</span><span id="Parser-5245"><a href="#Parser-5245"><span class="linenos">5245</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-5246"><a href="#Parser-5246"><span class="linenos">5246</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="Parser-5247"><a href="#Parser-5247"><span class="linenos">5247</span></a>
</span><span id="Parser-5248"><a href="#Parser-5248"><span class="linenos">5248</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-5249"><a href="#Parser-5249"><span class="linenos">5249</span></a>
</span><span id="Parser-5250"><a href="#Parser-5250"><span class="linenos">5250</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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="Parser-5251"><a href="#Parser-5251"><span class="linenos">5251</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
</span><span id="Parser-5252"><a href="#Parser-5252"><span class="linenos">5252</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-5253"><a href="#Parser-5253"><span class="linenos">5253</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</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">zone</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">())</span>
</span><span id="Parser-5254"><a href="#Parser-5254"><span class="linenos">5254</span></a>
</span><span id="Parser-5255"><a href="#Parser-5255"><span class="linenos">5255</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5256"><a href="#Parser-5256"><span class="linenos">5256</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">()</span>
</span><span id="Parser-5257"><a href="#Parser-5257"><span class="linenos">5257</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-5258"><a href="#Parser-5258"><span class="linenos">5258</span></a>
</span><span id="Parser-5259"><a href="#Parser-5259"><span class="linenos">5259</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_COLUMN_JOIN_MARKS</span> <span class="ow">and</span> <span class="n">column</span><span class="p">:</span>
</span><span id="Parser-5260"><a href="#Parser-5260"><span class="linenos">5260</span></a> <span class="n">column</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;join_mark&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN_MARKER</span><span class="p">))</span>
</span><span id="Parser-5261"><a href="#Parser-5261"><span class="linenos">5261</span></a>
</span><span id="Parser-5262"><a href="#Parser-5262"><span class="linenos">5262</span></a> <span class="k">return</span> <span class="n">column</span>
</span><span id="Parser-5263"><a href="#Parser-5263"><span class="linenos">5263</span></a>
</span><span id="Parser-5264"><a href="#Parser-5264"><span class="linenos">5264</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_column_reference</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5265"><a href="#Parser-5265"><span class="linenos">5265</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
</span><span id="Parser-5266"><a href="#Parser-5266"><span class="linenos">5266</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Parser-5267"><a href="#Parser-5267"><span class="linenos">5267</span></a> <span class="ow">not</span> <span class="n">this</span>
</span><span id="Parser-5268"><a href="#Parser-5268"><span class="linenos">5268</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-5269"><a href="#Parser-5269"><span class="linenos">5269</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">VALUES_FOLLOWED_BY_PAREN</span>
</span><span id="Parser-5270"><a href="#Parser-5270"><span class="linenos">5270</span></a> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="Parser-5271"><a href="#Parser-5271"><span class="linenos">5271</span></a> <span class="p">):</span>
</span><span id="Parser-5272"><a href="#Parser-5272"><span class="linenos">5272</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-5273"><a href="#Parser-5273"><span class="linenos">5273</span></a>
</span><span id="Parser-5274"><a href="#Parser-5274"><span class="linenos">5274</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">Identifier</span><span class="p">):</span>
</span><span id="Parser-5275"><a href="#Parser-5275"><span class="linenos">5275</span></a> <span class="c1"># We bubble up comments from the Identifier to the Column</span>
</span><span id="Parser-5276"><a href="#Parser-5276"><span class="linenos">5276</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">pop_comments</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="Parser-5277"><a href="#Parser-5277"><span class="linenos">5277</span></a>
</span><span id="Parser-5278"><a href="#Parser-5278"><span class="linenos">5278</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-5279"><a href="#Parser-5279"><span class="linenos">5279</span></a>
</span><span id="Parser-5280"><a href="#Parser-5280"><span class="linenos">5280</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_colon_as_variant_extract</span><span class="p">(</span>
</span><span id="Parser-5281"><a href="#Parser-5281"><span class="linenos">5281</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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="Parser-5282"><a href="#Parser-5282"><span class="linenos">5282</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="Parser-5283"><a href="#Parser-5283"><span class="linenos">5283</span></a> <span class="n">casts</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-5284"><a href="#Parser-5284"><span class="linenos">5284</span></a> <span class="n">json_path</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-5285"><a href="#Parser-5285"><span class="linenos">5285</span></a> <span class="n">escape</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5286"><a href="#Parser-5286"><span class="linenos">5286</span></a>
</span><span id="Parser-5287"><a href="#Parser-5287"><span class="linenos">5287</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">):</span>
</span><span id="Parser-5288"><a href="#Parser-5288"><span class="linenos">5288</span></a> <span class="n">start_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-5289"><a href="#Parser-5289"><span class="linenos">5289</span></a>
</span><span id="Parser-5290"><a href="#Parser-5290"><span class="linenos">5290</span></a> <span class="c1"># Snowflake allows reserved keywords as json keys but advance_any() excludes TokenType.SELECT from any_tokens=True</span>
</span><span id="Parser-5291"><a href="#Parser-5291"><span class="linenos">5291</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span>
</span><span id="Parser-5292"><a href="#Parser-5292"><span class="linenos">5292</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,))</span>
</span><span id="Parser-5293"><a href="#Parser-5293"><span class="linenos">5293</span></a> <span class="p">)</span>
</span><span id="Parser-5294"><a href="#Parser-5294"><span class="linenos">5294</span></a>
</span><span id="Parser-5295"><a href="#Parser-5295"><span class="linenos">5295</span></a> <span class="c1"># The cast :: operator has a lower precedence than the extraction operator :, so</span>
</span><span id="Parser-5296"><a href="#Parser-5296"><span class="linenos">5296</span></a> <span class="c1"># we rearrange the AST appropriately to avoid casting the JSON path</span>
</span><span id="Parser-5297"><a href="#Parser-5297"><span class="linenos">5297</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">):</span>
</span><span id="Parser-5298"><a href="#Parser-5298"><span class="linenos">5298</span></a> <span class="n">casts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">to</span><span class="p">)</span>
</span><span id="Parser-5299"><a href="#Parser-5299"><span class="linenos">5299</span></a> <span class="n">path</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">this</span>
</span><span id="Parser-5300"><a href="#Parser-5300"><span class="linenos">5300</span></a>
</span><span id="Parser-5301"><a href="#Parser-5301"><span class="linenos">5301</span></a> <span class="k">if</span> <span class="n">casts</span><span class="p">:</span>
</span><span id="Parser-5302"><a href="#Parser-5302"><span class="linenos">5302</span></a> <span class="n">dcolon_offset</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span>
</span><span id="Parser-5303"><a href="#Parser-5303"><span class="linenos">5303</span></a> <span class="n">i</span>
</span><span id="Parser-5304"><a href="#Parser-5304"><span class="linenos">5304</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="n">start_index</span><span class="p">:])</span>
</span><span id="Parser-5305"><a href="#Parser-5305"><span class="linenos">5305</span></a> <span class="k">if</span> <span class="n">t</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span>
</span><span id="Parser-5306"><a href="#Parser-5306"><span class="linenos">5306</span></a> <span class="p">)</span>
</span><span id="Parser-5307"><a href="#Parser-5307"><span class="linenos">5307</span></a> <span class="n">end_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="n">start_index</span> <span class="o">+</span> <span class="n">dcolon_offset</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
</span><span id="Parser-5308"><a href="#Parser-5308"><span class="linenos">5308</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5309"><a href="#Parser-5309"><span class="linenos">5309</span></a> <span class="n">end_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-5310"><a href="#Parser-5310"><span class="linenos">5310</span></a>
</span><span id="Parser-5311"><a href="#Parser-5311"><span class="linenos">5311</span></a> <span class="k">if</span> <span class="n">path</span><span class="p">:</span>
</span><span id="Parser-5312"><a href="#Parser-5312"><span class="linenos">5312</span></a> <span class="c1"># Escape single quotes from Snowflake&#39;s colon extraction (e.g. col:&quot;a&#39;b&quot;) as</span>
</span><span id="Parser-5313"><a href="#Parser-5313"><span class="linenos">5313</span></a> <span class="c1"># it&#39;ll roundtrip to a string literal in GET_PATH</span>
</span><span id="Parser-5314"><a href="#Parser-5314"><span class="linenos">5314</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">path</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="ow">and</span> <span class="n">path</span><span class="o">.</span><span class="n">quoted</span><span class="p">:</span>
</span><span id="Parser-5315"><a href="#Parser-5315"><span class="linenos">5315</span></a> <span class="n">escape</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-5316"><a href="#Parser-5316"><span class="linenos">5316</span></a>
</span><span id="Parser-5317"><a href="#Parser-5317"><span class="linenos">5317</span></a> <span class="n">json_path</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">_find_sql</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="n">start_index</span><span class="p">],</span> <span class="n">end_token</span><span class="p">))</span>
</span><span id="Parser-5318"><a href="#Parser-5318"><span class="linenos">5318</span></a>
</span><span id="Parser-5319"><a href="#Parser-5319"><span class="linenos">5319</span></a> <span class="c1"># The VARIANT extract in Snowflake/Databricks is parsed as a JSONExtract; Snowflake uses the json_path in GET_PATH() while</span>
</span><span id="Parser-5320"><a href="#Parser-5320"><span class="linenos">5320</span></a> <span class="c1"># Databricks transforms it back to the colon/dot notation</span>
</span><span id="Parser-5321"><a href="#Parser-5321"><span class="linenos">5321</span></a> <span class="k">if</span> <span class="n">json_path</span><span class="p">:</span>
</span><span id="Parser-5322"><a href="#Parser-5322"><span class="linenos">5322</span></a> <span class="n">json_path_expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">to_json_path</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">json_path</span><span class="p">)))</span>
</span><span id="Parser-5323"><a href="#Parser-5323"><span class="linenos">5323</span></a>
</span><span id="Parser-5324"><a href="#Parser-5324"><span class="linenos">5324</span></a> <span class="k">if</span> <span class="n">json_path_expr</span><span class="p">:</span>
</span><span id="Parser-5325"><a href="#Parser-5325"><span class="linenos">5325</span></a> <span class="n">json_path_expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;escape&quot;</span><span class="p">,</span> <span class="n">escape</span><span class="p">)</span>
</span><span id="Parser-5326"><a href="#Parser-5326"><span class="linenos">5326</span></a>
</span><span id="Parser-5327"><a href="#Parser-5327"><span class="linenos">5327</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-5328"><a href="#Parser-5328"><span class="linenos">5328</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">,</span>
</span><span id="Parser-5329"><a href="#Parser-5329"><span class="linenos">5329</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-5330"><a href="#Parser-5330"><span class="linenos">5330</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">json_path_expr</span><span class="p">,</span>
</span><span id="Parser-5331"><a href="#Parser-5331"><span class="linenos">5331</span></a> <span class="n">variant_extract</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="Parser-5332"><a href="#Parser-5332"><span class="linenos">5332</span></a> <span class="p">)</span>
</span><span id="Parser-5333"><a href="#Parser-5333"><span class="linenos">5333</span></a>
</span><span id="Parser-5334"><a href="#Parser-5334"><span class="linenos">5334</span></a> <span class="k">while</span> <span class="n">casts</span><span class="p">:</span>
</span><span id="Parser-5335"><a href="#Parser-5335"><span class="linenos">5335</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</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">to</span><span class="o">=</span><span class="n">casts</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
</span><span id="Parser-5336"><a href="#Parser-5336"><span class="linenos">5336</span></a>
</span><span id="Parser-5337"><a href="#Parser-5337"><span class="linenos">5337</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-5338"><a href="#Parser-5338"><span class="linenos">5338</span></a>
</span><span id="Parser-5339"><a href="#Parser-5339"><span class="linenos">5339</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_dcolon</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5340"><a href="#Parser-5340"><span class="linenos">5340</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="Parser-5341"><a href="#Parser-5341"><span class="linenos">5341</span></a>
</span><span id="Parser-5342"><a href="#Parser-5342"><span class="linenos">5342</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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="Parser-5343"><a href="#Parser-5343"><span class="linenos">5343</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-5344"><a href="#Parser-5344"><span class="linenos">5344</span></a>
</span><span id="Parser-5345"><a href="#Parser-5345"><span class="linenos">5345</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="p">):</span>
</span><span id="Parser-5346"><a href="#Parser-5346"><span class="linenos">5346</span></a> <span class="n">op_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="Parser-5347"><a href="#Parser-5347"><span class="linenos">5347</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">op_token</span><span class="p">)</span>
</span><span id="Parser-5348"><a href="#Parser-5348"><span class="linenos">5348</span></a>
</span><span id="Parser-5349"><a href="#Parser-5349"><span class="linenos">5349</span></a> <span class="k">if</span> <span class="n">op_token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DOTCOLON</span><span class="p">):</span>
</span><span id="Parser-5350"><a href="#Parser-5350"><span class="linenos">5350</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_dcolon</span><span class="p">()</span>
</span><span id="Parser-5351"><a href="#Parser-5351"><span class="linenos">5351</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">field</span><span class="p">:</span>
</span><span id="Parser-5352"><a href="#Parser-5352"><span class="linenos">5352</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected type&quot;</span><span class="p">)</span>
</span><span id="Parser-5353"><a href="#Parser-5353"><span class="linenos">5353</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-5354"><a href="#Parser-5354"><span class="linenos">5354</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">()</span>
</span><span id="Parser-5355"><a href="#Parser-5355"><span class="linenos">5355</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-5356"><a href="#Parser-5356"><span class="linenos">5356</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
</span><span id="Parser-5357"><a href="#Parser-5357"><span class="linenos">5357</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5358"><a href="#Parser-5358"><span class="linenos">5358</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5359"><a href="#Parser-5359"><span class="linenos">5359</span></a>
</span><span id="Parser-5360"><a href="#Parser-5360"><span class="linenos">5360</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</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="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">))</span> <span class="ow">and</span> <span class="n">this</span><span class="p">:</span>
</span><span id="Parser-5361"><a href="#Parser-5361"><span class="linenos">5361</span></a> <span class="c1"># BQ &amp; snowflake allow function calls like x.y.count(...), SAFE.SUBSTR(...) etc</span>
</span><span id="Parser-5362"><a href="#Parser-5362"><span class="linenos">5362</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
</span><span id="Parser-5363"><a href="#Parser-5363"><span class="linenos">5363</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">replace_tree</span><span class="p">(</span>
</span><span id="Parser-5364"><a href="#Parser-5364"><span class="linenos">5364</span></a> <span class="n">this</span><span class="p">,</span>
</span><span id="Parser-5365"><a href="#Parser-5365"><span class="linenos">5365</span></a> <span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="p">(</span>
</span><span id="Parser-5366"><a href="#Parser-5366"><span class="linenos">5366</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">n</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;table&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">n</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-5367"><a href="#Parser-5367"><span class="linenos">5367</span></a> <span class="k">if</span> <span class="n">n</span><span class="o">.</span><span class="n">table</span>
</span><span id="Parser-5368"><a href="#Parser-5368"><span class="linenos">5368</span></a> <span class="k">else</span> <span class="n">n</span><span class="o">.</span><span class="n">this</span>
</span><span id="Parser-5369"><a href="#Parser-5369"><span class="linenos">5369</span></a> <span class="p">)</span>
</span><span id="Parser-5370"><a href="#Parser-5370"><span class="linenos">5370</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span>
</span><span id="Parser-5371"><a href="#Parser-5371"><span class="linenos">5371</span></a> <span class="k">else</span> <span class="n">n</span><span class="p">,</span>
</span><span id="Parser-5372"><a href="#Parser-5372"><span class="linenos">5372</span></a> <span class="p">)</span>
</span><span id="Parser-5373"><a href="#Parser-5373"><span class="linenos">5373</span></a>
</span><span id="Parser-5374"><a href="#Parser-5374"><span class="linenos">5374</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
</span><span id="Parser-5375"><a href="#Parser-5375"><span class="linenos">5375</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span>
</span><span id="Parser-5376"><a href="#Parser-5376"><span class="linenos">5376</span></a> <span class="k">elif</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">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</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;catalog&quot;</span><span class="p">):</span>
</span><span id="Parser-5377"><a href="#Parser-5377"><span class="linenos">5377</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-5378"><a href="#Parser-5378"><span class="linenos">5378</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
</span><span id="Parser-5379"><a href="#Parser-5379"><span class="linenos">5379</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">comments</span><span class="p">,</span>
</span><span id="Parser-5380"><a href="#Parser-5380"><span class="linenos">5380</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
</span><span id="Parser-5381"><a href="#Parser-5381"><span class="linenos">5381</span></a> <span class="n">table</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-5382"><a href="#Parser-5382"><span class="linenos">5382</span></a> <span class="n">db</span><span class="o">=</span><span class="n">this</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;table&quot;</span><span class="p">),</span>
</span><span id="Parser-5383"><a href="#Parser-5383"><span class="linenos">5383</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">this</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;db&quot;</span><span class="p">),</span>
</span><span id="Parser-5384"><a href="#Parser-5384"><span class="linenos">5384</span></a> <span class="p">)</span>
</span><span id="Parser-5385"><a href="#Parser-5385"><span class="linenos">5385</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">):</span>
</span><span id="Parser-5386"><a href="#Parser-5386"><span class="linenos">5386</span></a> <span class="c1"># Move the exp.Dot&#39;s to the window&#39;s function</span>
</span><span id="Parser-5387"><a href="#Parser-5387"><span class="linenos">5387</span></a> <span class="n">window_func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</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">field</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-5388"><a href="#Parser-5388"><span class="linenos">5388</span></a> <span class="n">field</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">window_func</span><span class="p">)</span>
</span><span id="Parser-5389"><a href="#Parser-5389"><span class="linenos">5389</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">field</span>
</span><span id="Parser-5390"><a href="#Parser-5390"><span class="linenos">5390</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5391"><a href="#Parser-5391"><span class="linenos">5391</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</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">field</span><span class="p">)</span>
</span><span id="Parser-5392"><a href="#Parser-5392"><span class="linenos">5392</span></a>
</span><span id="Parser-5393"><a href="#Parser-5393"><span class="linenos">5393</span></a> <span class="k">if</span> <span class="n">field</span> <span class="ow">and</span> <span class="n">field</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
</span><span id="Parser-5394"><a href="#Parser-5394"><span class="linenos">5394</span></a> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">field</span><span class="o">.</span><span class="n">pop_comments</span><span class="p">())</span>
</span><span id="Parser-5395"><a href="#Parser-5395"><span class="linenos">5395</span></a>
</span><span id="Parser-5396"><a href="#Parser-5396"><span class="linenos">5396</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-5397"><a href="#Parser-5397"><span class="linenos">5397</span></a>
</span><span id="Parser-5398"><a href="#Parser-5398"><span class="linenos">5398</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_colon_as_variant_extract</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLON_IS_VARIANT_EXTRACT</span> <span class="k">else</span> <span class="n">this</span>
</span><span id="Parser-5399"><a href="#Parser-5399"><span class="linenos">5399</span></a>
</span><span id="Parser-5400"><a href="#Parser-5400"><span class="linenos">5400</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_primary</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5401"><a href="#Parser-5401"><span class="linenos">5401</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">):</span>
</span><span id="Parser-5402"><a href="#Parser-5402"><span class="linenos">5402</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="Parser-5403"><a href="#Parser-5403"><span class="linenos">5403</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-5404"><a href="#Parser-5404"><span class="linenos">5404</span></a>
</span><span id="Parser-5405"><a href="#Parser-5405"><span class="linenos">5405</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span>
</span><span id="Parser-5406"><a href="#Parser-5406"><span class="linenos">5406</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">primary</span><span class="p">]</span>
</span><span id="Parser-5407"><a href="#Parser-5407"><span class="linenos">5407</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">):</span>
</span><span id="Parser-5408"><a href="#Parser-5408"><span class="linenos">5408</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</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="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
</span><span id="Parser-5409"><a href="#Parser-5409"><span class="linenos">5409</span></a>
</span><span id="Parser-5410"><a href="#Parser-5410"><span class="linenos">5410</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Parser-5411"><a href="#Parser-5411"><span class="linenos">5411</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-5412"><a href="#Parser-5412"><span class="linenos">5412</span></a>
</span><span id="Parser-5413"><a href="#Parser-5413"><span class="linenos">5413</span></a> <span class="k">return</span> <span class="n">primary</span>
</span><span id="Parser-5414"><a href="#Parser-5414"><span class="linenos">5414</span></a>
</span><span id="Parser-5415"><a href="#Parser-5415"><span class="linenos">5415</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
</span><span id="Parser-5416"><a href="#Parser-5416"><span class="linenos">5416</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">number</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;0.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Parser-5417"><a href="#Parser-5417"><span class="linenos">5417</span></a>
</span><span id="Parser-5418"><a href="#Parser-5418"><span class="linenos">5418</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-5419"><a href="#Parser-5419"><span class="linenos">5419</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="Parser-5420"><a href="#Parser-5420"><span class="linenos">5420</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
</span><span id="Parser-5421"><a href="#Parser-5421"><span class="linenos">5421</span></a>
</span><span id="Parser-5422"><a href="#Parser-5422"><span class="linenos">5422</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
</span><span id="Parser-5423"><a href="#Parser-5423"><span class="linenos">5423</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">query</span><span class="p">]</span>
</span><span id="Parser-5424"><a href="#Parser-5424"><span class="linenos">5424</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5425"><a href="#Parser-5425"><span class="linenos">5425</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
</span><span id="Parser-5426"><a href="#Parser-5426"><span class="linenos">5426</span></a>
</span><span id="Parser-5427"><a href="#Parser-5427"><span class="linenos">5427</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
</span><span id="Parser-5428"><a href="#Parser-5428"><span class="linenos">5428</span></a>
</span><span id="Parser-5429"><a href="#Parser-5429"><span class="linenos">5429</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-5430"><a href="#Parser-5430"><span class="linenos">5430</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">)</span>
</span><span id="Parser-5431"><a href="#Parser-5431"><span class="linenos">5431</span></a> <span class="k">elif</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">UNWRAPPED_QUERIES</span><span class="p">):</span>
</span><span id="Parser-5432"><a href="#Parser-5432"><span class="linenos">5432</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</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">parse_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-5433"><a href="#Parser-5433"><span class="linenos">5433</span></a> <span class="k">elif</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">Subquery</span><span class="p">):</span>
</span><span id="Parser-5434"><a href="#Parser-5434"><span class="linenos">5434</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</span><span class="p">(</span>
</span><span id="Parser-5435"><a href="#Parser-5435"><span class="linenos">5435</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">),</span> <span class="n">parse_alias</span><span class="o">=</span><span class="kc">False</span>
</span><span id="Parser-5436"><a href="#Parser-5436"><span class="linenos">5436</span></a> <span class="p">)</span>
</span><span id="Parser-5437"><a href="#Parser-5437"><span class="linenos">5437</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">:</span>
</span><span id="Parser-5438"><a href="#Parser-5438"><span class="linenos">5438</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-5439"><a href="#Parser-5439"><span class="linenos">5439</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5440"><a href="#Parser-5440"><span class="linenos">5440</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Paren</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="Parser-5441"><a href="#Parser-5441"><span class="linenos">5441</span></a>
</span><span id="Parser-5442"><a href="#Parser-5442"><span class="linenos">5442</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
</span><span id="Parser-5443"><a href="#Parser-5443"><span class="linenos">5443</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
</span><span id="Parser-5444"><a href="#Parser-5444"><span class="linenos">5444</span></a>
</span><span id="Parser-5445"><a href="#Parser-5445"><span class="linenos">5445</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</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="Parser-5446"><a href="#Parser-5446"><span class="linenos">5446</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-5447"><a href="#Parser-5447"><span class="linenos">5447</span></a>
</span><span id="Parser-5448"><a href="#Parser-5448"><span class="linenos">5448</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5449"><a href="#Parser-5449"><span class="linenos">5449</span></a>
</span><span id="Parser-5450"><a href="#Parser-5450"><span class="linenos">5450</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_field</span><span class="p">(</span>
</span><span id="Parser-5451"><a href="#Parser-5451"><span class="linenos">5451</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-5452"><a href="#Parser-5452"><span class="linenos">5452</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-5453"><a href="#Parser-5453"><span class="linenos">5453</span></a> <span class="n">tokens</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">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-5454"><a href="#Parser-5454"><span class="linenos">5454</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-5455"><a href="#Parser-5455"><span class="linenos">5455</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="Parser-5456"><a href="#Parser-5456"><span class="linenos">5456</span></a> <span class="k">if</span> <span class="n">anonymous_func</span><span class="p">:</span>
</span><span id="Parser-5457"><a href="#Parser-5457"><span class="linenos">5457</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-5458"><a href="#Parser-5458"><span class="linenos">5458</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span><span class="p">)</span>
</span><span id="Parser-5459"><a href="#Parser-5459"><span class="linenos">5459</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="Parser-5460"><a href="#Parser-5460"><span class="linenos">5460</span></a> <span class="p">)</span>
</span><span id="Parser-5461"><a href="#Parser-5461"><span class="linenos">5461</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5462"><a href="#Parser-5462"><span class="linenos">5462</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span>
</span><span id="Parser-5463"><a href="#Parser-5463"><span class="linenos">5463</span></a> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span>
</span><span id="Parser-5464"><a href="#Parser-5464"><span class="linenos">5464</span></a> <span class="p">)</span>
</span><span id="Parser-5465"><a href="#Parser-5465"><span class="linenos">5465</span></a> <span class="k">return</span> <span class="n">field</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="n">tokens</span><span class="p">)</span>
</span><span id="Parser-5466"><a href="#Parser-5466"><span class="linenos">5466</span></a>
</span><span id="Parser-5467"><a href="#Parser-5467"><span class="linenos">5467</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_function</span><span class="p">(</span>
</span><span id="Parser-5468"><a href="#Parser-5468"><span class="linenos">5468</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-5469"><a href="#Parser-5469"><span class="linenos">5469</span></a> <span class="n">functions</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="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-5470"><a href="#Parser-5470"><span class="linenos">5470</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-5471"><a href="#Parser-5471"><span class="linenos">5471</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="Parser-5472"><a href="#Parser-5472"><span class="linenos">5472</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-5473"><a href="#Parser-5473"><span class="linenos">5473</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="Parser-5474"><a href="#Parser-5474"><span class="linenos">5474</span></a> <span class="c1"># This allows us to also parse {fn &lt;function&gt;} syntax (Snowflake, MySQL support this)</span>
</span><span id="Parser-5475"><a href="#Parser-5475"><span class="linenos">5475</span></a> <span class="c1"># See: https://community.snowflake.com/s/article/SQL-Escape-Sequences</span>
</span><span id="Parser-5476"><a href="#Parser-5476"><span class="linenos">5476</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-5477"><a href="#Parser-5477"><span class="linenos">5477</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Parser-5478"><a href="#Parser-5478"><span class="linenos">5478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-5479"><a href="#Parser-5479"><span class="linenos">5479</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
</span><span id="Parser-5480"><a href="#Parser-5480"><span class="linenos">5480</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;FN&quot;</span>
</span><span id="Parser-5481"><a href="#Parser-5481"><span class="linenos">5481</span></a> <span class="p">):</span>
</span><span id="Parser-5482"><a href="#Parser-5482"><span class="linenos">5482</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</span><span id="Parser-5483"><a href="#Parser-5483"><span class="linenos">5483</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-5484"><a href="#Parser-5484"><span class="linenos">5484</span></a>
</span><span id="Parser-5485"><a href="#Parser-5485"><span class="linenos">5485</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_call</span><span class="p">(</span>
</span><span id="Parser-5486"><a href="#Parser-5486"><span class="linenos">5486</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span>
</span><span id="Parser-5487"><a href="#Parser-5487"><span class="linenos">5487</span></a> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span>
</span><span id="Parser-5488"><a href="#Parser-5488"><span class="linenos">5488</span></a> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span><span class="p">,</span>
</span><span id="Parser-5489"><a href="#Parser-5489"><span class="linenos">5489</span></a> <span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span><span class="p">,</span>
</span><span id="Parser-5490"><a href="#Parser-5490"><span class="linenos">5490</span></a> <span class="p">)</span>
</span><span id="Parser-5491"><a href="#Parser-5491"><span class="linenos">5491</span></a>
</span><span id="Parser-5492"><a href="#Parser-5492"><span class="linenos">5492</span></a> <span class="k">if</span> <span class="n">fn_syntax</span><span class="p">:</span>
</span><span id="Parser-5493"><a href="#Parser-5493"><span class="linenos">5493</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span>
</span><span id="Parser-5494"><a href="#Parser-5494"><span class="linenos">5494</span></a>
</span><span id="Parser-5495"><a href="#Parser-5495"><span class="linenos">5495</span></a> <span class="k">return</span> <span class="n">func</span>
</span><span id="Parser-5496"><a href="#Parser-5496"><span class="linenos">5496</span></a>
</span><span id="Parser-5497"><a href="#Parser-5497"><span class="linenos">5497</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_function_call</span><span class="p">(</span>
</span><span id="Parser-5498"><a href="#Parser-5498"><span class="linenos">5498</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-5499"><a href="#Parser-5499"><span class="linenos">5499</span></a> <span class="n">functions</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="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-5500"><a href="#Parser-5500"><span class="linenos">5500</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-5501"><a href="#Parser-5501"><span class="linenos">5501</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="Parser-5502"><a href="#Parser-5502"><span class="linenos">5502</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-5503"><a href="#Parser-5503"><span class="linenos">5503</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="Parser-5504"><a href="#Parser-5504"><span class="linenos">5504</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-5505"><a href="#Parser-5505"><span class="linenos">5505</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5506"><a href="#Parser-5506"><span class="linenos">5506</span></a>
</span><span id="Parser-5507"><a href="#Parser-5507"><span class="linenos">5507</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">comments</span>
</span><span id="Parser-5508"><a href="#Parser-5508"><span class="linenos">5508</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="Parser-5509"><a href="#Parser-5509"><span class="linenos">5509</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-5510"><a href="#Parser-5510"><span class="linenos">5510</span></a> <span class="n">upper</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="Parser-5511"><a href="#Parser-5511"><span class="linenos">5511</span></a>
</span><span id="Parser-5512"><a href="#Parser-5512"><span class="linenos">5512</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
</span><span id="Parser-5513"><a href="#Parser-5513"><span class="linenos">5513</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVALID_FUNC_NAME_TOKENS</span><span class="p">:</span>
</span><span id="Parser-5514"><a href="#Parser-5514"><span class="linenos">5514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-5515"><a href="#Parser-5515"><span class="linenos">5515</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
</span><span id="Parser-5516"><a href="#Parser-5516"><span class="linenos">5516</span></a>
</span><span id="Parser-5517"><a href="#Parser-5517"><span class="linenos">5517</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
</span><span id="Parser-5518"><a href="#Parser-5518"><span class="linenos">5518</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
</span><span id="Parser-5519"><a href="#Parser-5519"><span class="linenos">5519</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-5520"><a href="#Parser-5520"><span class="linenos">5520</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">[</span><span class="n">token_type</span><span class="p">])</span>
</span><span id="Parser-5521"><a href="#Parser-5521"><span class="linenos">5521</span></a>
</span><span id="Parser-5522"><a href="#Parser-5522"><span class="linenos">5522</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5523"><a href="#Parser-5523"><span class="linenos">5523</span></a>
</span><span id="Parser-5524"><a href="#Parser-5524"><span class="linenos">5524</span></a> <span class="k">if</span> <span class="n">any_token</span><span class="p">:</span>
</span><span id="Parser-5525"><a href="#Parser-5525"><span class="linenos">5525</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_TOKENS</span><span class="p">:</span>
</span><span id="Parser-5526"><a href="#Parser-5526"><span class="linenos">5526</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5527"><a href="#Parser-5527"><span class="linenos">5527</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNC_TOKENS</span><span class="p">:</span>
</span><span id="Parser-5528"><a href="#Parser-5528"><span class="linenos">5528</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5529"><a href="#Parser-5529"><span class="linenos">5529</span></a>
</span><span id="Parser-5530"><a href="#Parser-5530"><span class="linenos">5530</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</span><span id="Parser-5531"><a href="#Parser-5531"><span class="linenos">5531</span></a>
</span><span id="Parser-5532"><a href="#Parser-5532"><span class="linenos">5532</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
</span><span id="Parser-5533"><a href="#Parser-5533"><span class="linenos">5533</span></a> <span class="k">if</span> <span class="n">parser</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
</span><span id="Parser-5534"><a href="#Parser-5534"><span class="linenos">5534</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</span><span id="Parser-5535"><a href="#Parser-5535"><span class="linenos">5535</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5536"><a href="#Parser-5536"><span class="linenos">5536</span></a> <span class="n">subquery_predicate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUBQUERY_PREDICATES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">)</span>
</span><span id="Parser-5537"><a href="#Parser-5537"><span class="linenos">5537</span></a>
</span><span id="Parser-5538"><a href="#Parser-5538"><span class="linenos">5538</span></a> <span class="k">if</span> <span class="n">subquery_predicate</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
</span><span id="Parser-5539"><a href="#Parser-5539"><span class="linenos">5539</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-5540"><a href="#Parser-5540"><span class="linenos">5540</span></a> <span class="n">subquery_predicate</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
</span><span id="Parser-5541"><a href="#Parser-5541"><span class="linenos">5541</span></a> <span class="p">)</span>
</span><span id="Parser-5542"><a href="#Parser-5542"><span class="linenos">5542</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-5543"><a href="#Parser-5543"><span class="linenos">5543</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-5544"><a href="#Parser-5544"><span class="linenos">5544</span></a>
</span><span id="Parser-5545"><a href="#Parser-5545"><span class="linenos">5545</span></a> <span class="k">if</span> <span class="n">functions</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-5546"><a href="#Parser-5546"><span class="linenos">5546</span></a> <span class="n">functions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS</span>
</span><span id="Parser-5547"><a href="#Parser-5547"><span class="linenos">5547</span></a>
</span><span id="Parser-5548"><a href="#Parser-5548"><span class="linenos">5548</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">functions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
</span><span id="Parser-5549"><a href="#Parser-5549"><span class="linenos">5549</span></a> <span class="n">known_function</span> <span class="o">=</span> <span class="n">function</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span>
</span><span id="Parser-5550"><a href="#Parser-5550"><span class="linenos">5550</span></a>
</span><span id="Parser-5551"><a href="#Parser-5551"><span class="linenos">5551</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">known_function</span> <span class="ow">or</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
</span><span id="Parser-5552"><a href="#Parser-5552"><span class="linenos">5552</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
</span><span id="Parser-5553"><a href="#Parser-5553"><span class="linenos">5553</span></a>
</span><span id="Parser-5554"><a href="#Parser-5554"><span class="linenos">5554</span></a> <span class="n">post_func_comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">comments</span>
</span><span id="Parser-5555"><a href="#Parser-5555"><span class="linenos">5555</span></a> <span class="k">if</span> <span class="n">known_function</span> <span class="ow">and</span> <span class="n">post_func_comments</span><span class="p">:</span>
</span><span id="Parser-5556"><a href="#Parser-5556"><span class="linenos">5556</span></a> <span class="c1"># If the user-inputted comment &quot;/* sqlglot.anonymous */&quot; is following the function</span>
</span><span id="Parser-5557"><a href="#Parser-5557"><span class="linenos">5557</span></a> <span class="c1"># call we&#39;ll construct it as exp.Anonymous, even if it&#39;s &quot;known&quot;</span>
</span><span id="Parser-5558"><a href="#Parser-5558"><span class="linenos">5558</span></a> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span>
</span><span id="Parser-5559"><a href="#Parser-5559"><span class="linenos">5559</span></a> <span class="n">comment</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SQLGLOT_ANONYMOUS</span><span class="p">)</span>
</span><span id="Parser-5560"><a href="#Parser-5560"><span class="linenos">5560</span></a> <span class="k">for</span> <span class="n">comment</span> <span class="ow">in</span> <span class="n">post_func_comments</span>
</span><span id="Parser-5561"><a href="#Parser-5561"><span class="linenos">5561</span></a> <span class="p">):</span>
</span><span id="Parser-5562"><a href="#Parser-5562"><span class="linenos">5562</span></a> <span class="n">known_function</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-5563"><a href="#Parser-5563"><span class="linenos">5563</span></a>
</span><span id="Parser-5564"><a href="#Parser-5564"><span class="linenos">5564</span></a> <span class="k">if</span> <span class="n">alias</span> <span class="ow">and</span> <span class="n">known_function</span><span class="p">:</span>
</span><span id="Parser-5565"><a href="#Parser-5565"><span class="linenos">5565</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_kv_to_prop_eq</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
</span><span id="Parser-5566"><a href="#Parser-5566"><span class="linenos">5566</span></a>
</span><span id="Parser-5567"><a href="#Parser-5567"><span class="linenos">5567</span></a> <span class="k">if</span> <span class="n">known_function</span><span class="p">:</span>
</span><span id="Parser-5568"><a href="#Parser-5568"><span class="linenos">5568</span></a> <span class="n">func_builder</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">function</span><span class="p">)</span>
</span><span id="Parser-5569"><a href="#Parser-5569"><span class="linenos">5569</span></a>
</span><span id="Parser-5570"><a href="#Parser-5570"><span class="linenos">5570</span></a> <span class="k">if</span> <span class="s2">&quot;dialect&quot;</span> <span class="ow">in</span> <span class="n">func_builder</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span><span class="p">:</span>
</span><span id="Parser-5571"><a href="#Parser-5571"><span class="linenos">5571</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">func_builder</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
</span><span id="Parser-5572"><a href="#Parser-5572"><span class="linenos">5572</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5573"><a href="#Parser-5573"><span class="linenos">5573</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">func_builder</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
</span><span id="Parser-5574"><a href="#Parser-5574"><span class="linenos">5574</span></a>
</span><span id="Parser-5575"><a href="#Parser-5575"><span class="linenos">5575</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
</span><span id="Parser-5576"><a href="#Parser-5576"><span class="linenos">5576</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">PRESERVE_ORIGINAL_NAMES</span><span class="p">:</span>
</span><span id="Parser-5577"><a href="#Parser-5577"><span class="linenos">5577</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
</span><span id="Parser-5578"><a href="#Parser-5578"><span class="linenos">5578</span></a>
</span><span id="Parser-5579"><a href="#Parser-5579"><span class="linenos">5579</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
</span><span id="Parser-5580"><a href="#Parser-5580"><span class="linenos">5580</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5581"><a href="#Parser-5581"><span class="linenos">5581</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">:</span>
</span><span id="Parser-5582"><a href="#Parser-5582"><span class="linenos">5582</span></a> <span class="n">this</span> <span class="o">=</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">this</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5583"><a href="#Parser-5583"><span class="linenos">5583</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</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">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="Parser-5584"><a href="#Parser-5584"><span class="linenos">5584</span></a>
</span><span id="Parser-5585"><a href="#Parser-5585"><span class="linenos">5585</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">Expression</span><span class="p">):</span>
</span><span id="Parser-5586"><a href="#Parser-5586"><span class="linenos">5586</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
</span><span id="Parser-5587"><a href="#Parser-5587"><span class="linenos">5587</span></a>
</span><span id="Parser-5588"><a href="#Parser-5588"><span class="linenos">5588</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-5589"><a href="#Parser-5589"><span class="linenos">5589</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-5590"><a href="#Parser-5590"><span class="linenos">5590</span></a>
</span><span id="Parser-5591"><a href="#Parser-5591"><span class="linenos">5591</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_to_prop_eq</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">index</span><span class="p">:</span> <span class="nb">int</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="Parser-5592"><a href="#Parser-5592"><span class="linenos">5592</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="Parser-5593"><a href="#Parser-5593"><span class="linenos">5593</span></a>
</span><span id="Parser-5594"><a href="#Parser-5594"><span class="linenos">5594</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_kv_to_prop_eq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expressions</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="o">-&gt;</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><span id="Parser-5595"><a href="#Parser-5595"><span class="linenos">5595</span></a> <span class="n">transformed</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-5596"><a href="#Parser-5596"><span class="linenos">5596</span></a>
</span><span id="Parser-5597"><a href="#Parser-5597"><span class="linenos">5597</span></a> <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
</span><span id="Parser-5598"><a href="#Parser-5598"><span class="linenos">5598</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">KEY_VALUE_DEFINITIONS</span><span class="p">):</span>
</span><span id="Parser-5599"><a href="#Parser-5599"><span class="linenos">5599</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">):</span>
</span><span id="Parser-5600"><a href="#Parser-5600"><span class="linenos">5600</span></a> <span class="n">e</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">e</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;alias&quot;</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-5601"><a href="#Parser-5601"><span class="linenos">5601</span></a>
</span><span id="Parser-5602"><a href="#Parser-5602"><span class="linenos">5602</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</span><span class="p">):</span>
</span><span id="Parser-5603"><a href="#Parser-5603"><span class="linenos">5603</span></a> <span class="n">e</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-5604"><a href="#Parser-5604"><span class="linenos">5604</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PropertyEQ</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">to_identifier</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">expression</span>
</span><span id="Parser-5605"><a href="#Parser-5605"><span class="linenos">5605</span></a> <span class="p">)</span>
</span><span id="Parser-5606"><a href="#Parser-5606"><span class="linenos">5606</span></a>
</span><span id="Parser-5607"><a href="#Parser-5607"><span class="linenos">5607</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</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">Column</span><span class="p">):</span>
</span><span id="Parser-5608"><a href="#Parser-5608"><span class="linenos">5608</span></a> <span class="n">e</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">e</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-5609"><a href="#Parser-5609"><span class="linenos">5609</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5610"><a href="#Parser-5610"><span class="linenos">5610</span></a> <span class="n">e</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_to_prop_eq</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span>
</span><span id="Parser-5611"><a href="#Parser-5611"><span class="linenos">5611</span></a>
</span><span id="Parser-5612"><a href="#Parser-5612"><span class="linenos">5612</span></a> <span class="n">transformed</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="Parser-5613"><a href="#Parser-5613"><span class="linenos">5613</span></a>
</span><span id="Parser-5614"><a href="#Parser-5614"><span class="linenos">5614</span></a> <span class="k">return</span> <span class="n">transformed</span>
</span><span id="Parser-5615"><a href="#Parser-5615"><span class="linenos">5615</span></a>
</span><span id="Parser-5616"><a href="#Parser-5616"><span class="linenos">5616</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_user_defined_function_expression</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5617"><a href="#Parser-5617"><span class="linenos">5617</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span>
</span><span id="Parser-5618"><a href="#Parser-5618"><span class="linenos">5618</span></a>
</span><span id="Parser-5619"><a href="#Parser-5619"><span class="linenos">5619</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_function_parameter</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5620"><a href="#Parser-5620"><span class="linenos">5620</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span> <span class="n">computed_column</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-5621"><a href="#Parser-5621"><span class="linenos">5621</span></a>
</span><span id="Parser-5622"><a href="#Parser-5622"><span class="linenos">5622</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_user_defined_function</span><span class="p">(</span>
</span><span id="Parser-5623"><a href="#Parser-5623"><span class="linenos">5623</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</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">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5624"><a href="#Parser-5624"><span class="linenos">5624</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="Parser-5625"><a href="#Parser-5625"><span class="linenos">5625</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5626"><a href="#Parser-5626"><span class="linenos">5626</span></a>
</span><span id="Parser-5627"><a href="#Parser-5627"><span class="linenos">5627</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-5628"><a href="#Parser-5628"><span class="linenos">5628</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-5629"><a href="#Parser-5629"><span class="linenos">5629</span></a>
</span><span id="Parser-5630"><a href="#Parser-5630"><span class="linenos">5630</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_parameter</span><span class="p">)</span>
</span><span id="Parser-5631"><a href="#Parser-5631"><span class="linenos">5631</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-5632"><a href="#Parser-5632"><span class="linenos">5632</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-5633"><a href="#Parser-5633"><span class="linenos">5633</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wrapped</span><span class="o">=</span><span class="kc">True</span>
</span><span id="Parser-5634"><a href="#Parser-5634"><span class="linenos">5634</span></a> <span class="p">)</span>
</span><span id="Parser-5635"><a href="#Parser-5635"><span class="linenos">5635</span></a>
</span><span id="Parser-5636"><a href="#Parser-5636"><span class="linenos">5636</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
</span><span id="Parser-5637"><a href="#Parser-5637"><span class="linenos">5637</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="Parser-5638"><a href="#Parser-5638"><span class="linenos">5638</span></a> <span class="k">if</span> <span class="n">literal</span><span class="p">:</span>
</span><span id="Parser-5639"><a href="#Parser-5639"><span class="linenos">5639</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">literal</span><span class="p">)</span>
</span><span id="Parser-5640"><a href="#Parser-5640"><span class="linenos">5640</span></a>
</span><span id="Parser-5641"><a href="#Parser-5641"><span class="linenos">5641</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="Parser-5642"><a href="#Parser-5642"><span class="linenos">5642</span></a>
</span><span id="Parser-5643"><a href="#Parser-5643"><span class="linenos">5643</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_session_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">:</span>
</span><span id="Parser-5644"><a href="#Parser-5644"><span class="linenos">5644</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5645"><a href="#Parser-5645"><span class="linenos">5645</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="Parser-5646"><a href="#Parser-5646"><span class="linenos">5646</span></a>
</span><span id="Parser-5647"><a href="#Parser-5647"><span class="linenos">5647</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
</span><span id="Parser-5648"><a href="#Parser-5648"><span class="linenos">5648</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
</span><span id="Parser-5649"><a href="#Parser-5649"><span class="linenos">5649</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="Parser-5650"><a href="#Parser-5650"><span class="linenos">5650</span></a>
</span><span id="Parser-5651"><a href="#Parser-5651"><span class="linenos">5651</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="Parser-5652"><a href="#Parser-5652"><span class="linenos">5652</span></a>
</span><span id="Parser-5653"><a href="#Parser-5653"><span class="linenos">5653</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_lambda_arg</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5654"><a href="#Parser-5654"><span class="linenos">5654</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-5655"><a href="#Parser-5655"><span class="linenos">5655</span></a>
</span><span id="Parser-5656"><a href="#Parser-5656"><span class="linenos">5656</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</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">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="Parser-5657"><a href="#Parser-5657"><span class="linenos">5657</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-5658"><a href="#Parser-5658"><span class="linenos">5658</span></a>
</span><span id="Parser-5659"><a href="#Parser-5659"><span class="linenos">5659</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-5660"><a href="#Parser-5660"><span class="linenos">5660</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
</span><span id="Parser-5661"><a href="#Parser-5661"><span class="linenos">5661</span></a> <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 class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda_arg</span><span class="p">)</span>
</span><span id="Parser-5662"><a href="#Parser-5662"><span class="linenos">5662</span></a> <span class="p">)</span>
</span><span id="Parser-5663"><a href="#Parser-5663"><span class="linenos">5663</span></a>
</span><span id="Parser-5664"><a href="#Parser-5664"><span class="linenos">5664</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
</span><span id="Parser-5665"><a href="#Parser-5665"><span class="linenos">5665</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-5666"><a href="#Parser-5666"><span class="linenos">5666</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5667"><a href="#Parser-5667"><span class="linenos">5667</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda_arg</span><span class="p">()]</span>
</span><span id="Parser-5668"><a href="#Parser-5668"><span class="linenos">5668</span></a>
</span><span id="Parser-5669"><a href="#Parser-5669"><span class="linenos">5669</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">):</span>
</span><span id="Parser-5670"><a href="#Parser-5670"><span class="linenos">5670</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-5671"><a href="#Parser-5671"><span class="linenos">5671</span></a>
</span><span id="Parser-5672"><a href="#Parser-5672"><span class="linenos">5672</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-5673"><a href="#Parser-5673"><span class="linenos">5673</span></a>
</span><span id="Parser-5674"><a href="#Parser-5674"><span class="linenos">5674</span></a> <span class="n">this</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="Parser-5675"><a href="#Parser-5675"><span class="linenos">5675</span></a>
</span><span id="Parser-5676"><a href="#Parser-5676"><span class="linenos">5676</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
</span><span id="Parser-5677"><a href="#Parser-5677"><span class="linenos">5677</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-5678"><a href="#Parser-5678"><span class="linenos">5678</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span>
</span><span id="Parser-5679"><a href="#Parser-5679"><span class="linenos">5679</span></a> <span class="p">)</span>
</span><span id="Parser-5680"><a href="#Parser-5680"><span class="linenos">5680</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5681"><a href="#Parser-5681"><span class="linenos">5681</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
</span><span id="Parser-5682"><a href="#Parser-5682"><span class="linenos">5682</span></a>
</span><span id="Parser-5683"><a href="#Parser-5683"><span class="linenos">5683</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span>
</span><span id="Parser-5684"><a href="#Parser-5684"><span class="linenos">5684</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_having_max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)))</span>
</span><span id="Parser-5685"><a href="#Parser-5685"><span class="linenos">5685</span></a> <span class="p">)</span>
</span><span id="Parser-5686"><a href="#Parser-5686"><span class="linenos">5686</span></a>
</span><span id="Parser-5687"><a href="#Parser-5687"><span class="linenos">5687</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">=</span> <span class="kc">None</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5688"><a href="#Parser-5688"><span class="linenos">5688</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-5689"><a href="#Parser-5689"><span class="linenos">5689</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-5690"><a href="#Parser-5690"><span class="linenos">5690</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-5691"><a href="#Parser-5691"><span class="linenos">5691</span></a>
</span><span id="Parser-5692"><a href="#Parser-5692"><span class="linenos">5692</span></a> <span class="c1"># Disambiguate between schema and subquery/CTE, e.g. in INSERT INTO table (&lt;expr&gt;),</span>
</span><span id="Parser-5693"><a href="#Parser-5693"><span class="linenos">5693</span></a> <span class="c1"># expr can be of both types</span>
</span><span id="Parser-5694"><a href="#Parser-5694"><span class="linenos">5694</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SELECT_START_TOKENS</span><span class="p">):</span>
</span><span id="Parser-5695"><a href="#Parser-5695"><span class="linenos">5695</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-5696"><a href="#Parser-5696"><span class="linenos">5696</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-5697"><a href="#Parser-5697"><span class="linenos">5697</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">())</span>
</span><span id="Parser-5698"><a href="#Parser-5698"><span class="linenos">5698</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-5699"><a href="#Parser-5699"><span class="linenos">5699</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</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">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="Parser-5700"><a href="#Parser-5700"><span class="linenos">5700</span></a>
</span><span id="Parser-5701"><a href="#Parser-5701"><span class="linenos">5701</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_field_def</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5702"><a href="#Parser-5702"><span class="linenos">5702</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="Parser-5703"><a href="#Parser-5703"><span class="linenos">5703</span></a>
</span><span id="Parser-5704"><a href="#Parser-5704"><span class="linenos">5704</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_column_def</span><span class="p">(</span>
</span><span id="Parser-5705"><a href="#Parser-5705"><span class="linenos">5705</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="n">computed_column</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-5706"><a href="#Parser-5706"><span class="linenos">5706</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="Parser-5707"><a href="#Parser-5707"><span class="linenos">5707</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
</span><span id="Parser-5708"><a href="#Parser-5708"><span class="linenos">5708</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">Column</span><span class="p">):</span>
</span><span id="Parser-5709"><a href="#Parser-5709"><span class="linenos">5709</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="Parser-5710"><a href="#Parser-5710"><span class="linenos">5710</span></a>
</span><span id="Parser-5711"><a href="#Parser-5711"><span class="linenos">5711</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">computed_column</span><span class="p">:</span>
</span><span id="Parser-5712"><a href="#Parser-5712"><span class="linenos">5712</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="Parser-5713"><a href="#Parser-5713"><span class="linenos">5713</span></a>
</span><span id="Parser-5714"><a href="#Parser-5714"><span class="linenos">5714</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5715"><a href="#Parser-5715"><span class="linenos">5715</span></a>
</span><span id="Parser-5716"><a href="#Parser-5716"><span class="linenos">5716</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">):</span>
</span><span id="Parser-5717"><a href="#Parser-5717"><span class="linenos">5717</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</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">ordinality</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5718"><a href="#Parser-5718"><span class="linenos">5718</span></a>
</span><span id="Parser-5719"><a href="#Parser-5719"><span class="linenos">5719</span></a> <span class="n">constraints</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="o">=</span> <span class="p">[]</span>
</span><span id="Parser-5720"><a href="#Parser-5720"><span class="linenos">5720</span></a>
</span><span id="Parser-5721"><a href="#Parser-5721"><span class="linenos">5721</span></a> <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">))</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
</span><span id="Parser-5722"><a href="#Parser-5722"><span class="linenos">5722</span></a> <span class="p">(</span><span class="s2">&quot;ALIAS&quot;</span><span class="p">,</span> <span class="s2">&quot;MATERIALIZED&quot;</span><span class="p">)</span>
</span><span id="Parser-5723"><a href="#Parser-5723"><span class="linenos">5723</span></a> <span class="p">):</span>
</span><span id="Parser-5724"><a href="#Parser-5724"><span class="linenos">5724</span></a> <span class="n">persisted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;MATERIALIZED&quot;</span>
</span><span id="Parser-5725"><a href="#Parser-5725"><span class="linenos">5725</span></a> <span class="n">constraint_kind</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">(</span>
</span><span id="Parser-5726"><a href="#Parser-5726"><span class="linenos">5726</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span>
</span><span id="Parser-5727"><a href="#Parser-5727"><span class="linenos">5727</span></a> <span class="n">persisted</span><span class="o">=</span><span class="n">persisted</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PERSISTED&quot;</span><span class="p">),</span>
</span><span id="Parser-5728"><a href="#Parser-5728"><span class="linenos">5728</span></a> <span class="n">not_null</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
</span><span id="Parser-5729"><a href="#Parser-5729"><span class="linenos">5729</span></a> <span class="p">)</span>
</span><span id="Parser-5730"><a href="#Parser-5730"><span class="linenos">5730</span></a> <span class="n">constraints</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">constraint_kind</span><span class="p">))</span>
</span><span id="Parser-5731"><a href="#Parser-5731"><span class="linenos">5731</span></a> <span class="k">elif</span> <span class="p">(</span>
</span><span id="Parser-5732"><a href="#Parser-5732"><span class="linenos">5732</span></a> <span class="n">kind</span>
</span><span id="Parser-5733"><a href="#Parser-5733"><span class="linenos">5733</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-5734"><a href="#Parser-5734"><span class="linenos">5734</span></a> <span class="ow">and</span> <span class="p">(</span>
</span><span id="Parser-5735"><a href="#Parser-5735"><span class="linenos">5735</span></a> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">WRAPPED_TRANSFORM_COLUMN_CONSTRAINT</span>
</span><span id="Parser-5736"><a href="#Parser-5736"><span class="linenos">5736</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="Parser-5737"><a href="#Parser-5737"><span class="linenos">5737</span></a> <span class="p">)</span>
</span><span id="Parser-5738"><a href="#Parser-5738"><span class="linenos">5738</span></a> <span class="p">):</span>
</span><span id="Parser-5739"><a href="#Parser-5739"><span class="linenos">5739</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-5740"><a href="#Parser-5740"><span class="linenos">5740</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="Parser-5741"><a href="#Parser-5741"><span class="linenos">5741</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-5742"><a href="#Parser-5742"><span class="linenos">5742</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
</span><span id="Parser-5743"><a href="#Parser-5743"><span class="linenos">5743</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TransformColumnConstraint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_disjunction</span><span class="p">()),</span>
</span><span id="Parser-5744"><a href="#Parser-5744"><span class="linenos">5744</span></a> <span class="p">)</span>
</span><span id="Parser-5745"><a href="#Parser-5745"><span class="linenos">5745</span></a> <span class="p">)</span>
</span><span id="Parser-5746"><a href="#Parser-5746"><span class="linenos">5746</span></a>
</span><span id="Parser-5747"><a href="#Parser-5747"><span class="linenos">5747</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-5748"><a href="#Parser-5748"><span class="linenos">5748</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_constraint</span><span class="p">()</span>
</span><span id="Parser-5749"><a href="#Parser-5749"><span class="linenos">5749</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
</span><span id="Parser-5750"><a href="#Parser-5750"><span class="linenos">5750</span></a> <span class="k">break</span>
</span><span id="Parser-5751"><a href="#Parser-5751"><span class="linenos">5751</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
</span><span id="Parser-5752"><a href="#Parser-5752"><span class="linenos">5752</span></a>
</span><span id="Parser-5753"><a href="#Parser-5753"><span class="linenos">5753</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">constraints</span><span class="p">:</span>
</span><span id="Parser-5754"><a href="#Parser-5754"><span class="linenos">5754</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-5755"><a href="#Parser-5755"><span class="linenos">5755</span></a>
</span><span id="Parser-5756"><a href="#Parser-5756"><span class="linenos">5756</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span><span class="p">)</span>
</span><span id="Parser-5757"><a href="#Parser-5757"><span class="linenos">5757</span></a>
</span><span id="Parser-5758"><a href="#Parser-5758"><span class="linenos">5758</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_auto_increment</span><span class="p">(</span>
</span><span id="Parser-5759"><a href="#Parser-5759"><span class="linenos">5759</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-5760"><a href="#Parser-5760"><span class="linenos">5760</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
</span><span id="Parser-5761"><a href="#Parser-5761"><span class="linenos">5761</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5762"><a href="#Parser-5762"><span class="linenos">5762</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5763"><a href="#Parser-5763"><span class="linenos">5763</span></a>
</span><span id="Parser-5764"><a href="#Parser-5764"><span class="linenos">5764</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-5765"><a href="#Parser-5765"><span class="linenos">5765</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="Parser-5766"><a href="#Parser-5766"><span class="linenos">5766</span></a> <span class="n">start</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="Parser-5767"><a href="#Parser-5767"><span class="linenos">5767</span></a> <span class="n">increment</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="Parser-5768"><a href="#Parser-5768"><span class="linenos">5768</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">):</span>
</span><span id="Parser-5769"><a href="#Parser-5769"><span class="linenos">5769</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-5770"><a href="#Parser-5770"><span class="linenos">5770</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">)</span>
</span><span id="Parser-5771"><a href="#Parser-5771"><span class="linenos">5771</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-5772"><a href="#Parser-5772"><span class="linenos">5772</span></a>
</span><span id="Parser-5773"><a href="#Parser-5773"><span class="linenos">5773</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">increment</span><span class="p">:</span>
</span><span id="Parser-5774"><a href="#Parser-5774"><span class="linenos">5774</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span>
</span><span id="Parser-5775"><a href="#Parser-5775"><span class="linenos">5775</span></a> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">increment</span><span class="o">=</span><span class="n">increment</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span>
</span><span id="Parser-5776"><a href="#Parser-5776"><span class="linenos">5776</span></a> <span class="p">)</span>
</span><span id="Parser-5777"><a href="#Parser-5777"><span class="linenos">5777</span></a>
</span><span id="Parser-5778"><a href="#Parser-5778"><span class="linenos">5778</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">()</span>
</span><span id="Parser-5779"><a href="#Parser-5779"><span class="linenos">5779</span></a>
</span><span id="Parser-5780"><a href="#Parser-5780"><span class="linenos">5780</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_auto_property</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">]:</span>
</span><span id="Parser-5781"><a href="#Parser-5781"><span class="linenos">5781</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;REFRESH&quot;</span><span class="p">):</span>
</span><span id="Parser-5782"><a href="#Parser-5782"><span class="linenos">5782</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-5783"><a href="#Parser-5783"><span class="linenos">5783</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5784"><a href="#Parser-5784"><span class="linenos">5784</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="Parser-5785"><a href="#Parser-5785"><span class="linenos">5785</span></a>
</span><span id="Parser-5786"><a href="#Parser-5786"><span class="linenos">5786</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_compress</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">:</span>
</span><span id="Parser-5787"><a href="#Parser-5787"><span class="linenos">5787</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-5788"><a href="#Parser-5788"><span class="linenos">5788</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-5789"><a href="#Parser-5789"><span class="linenos">5789</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="Parser-5790"><a href="#Parser-5790"><span class="linenos">5790</span></a> <span class="p">)</span>
</span><span id="Parser-5791"><a href="#Parser-5791"><span class="linenos">5791</span></a>
</span><span id="Parser-5792"><a href="#Parser-5792"><span class="linenos">5792</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-5793"><a href="#Parser-5793"><span class="linenos">5793</span></a>
</span><span id="Parser-5794"><a href="#Parser-5794"><span class="linenos">5794</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_generated_as_identity</span><span class="p">(</span>
</span><span id="Parser-5795"><a href="#Parser-5795"><span class="linenos">5795</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-5796"><a href="#Parser-5796"><span class="linenos">5796</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="p">(</span>
</span><span id="Parser-5797"><a href="#Parser-5797"><span class="linenos">5797</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
</span><span id="Parser-5798"><a href="#Parser-5798"><span class="linenos">5798</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span>
</span><span id="Parser-5799"><a href="#Parser-5799"><span class="linenos">5799</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span>
</span><span id="Parser-5800"><a href="#Parser-5800"><span class="linenos">5800</span></a> <span class="p">):</span>
</span><span id="Parser-5801"><a href="#Parser-5801"><span class="linenos">5801</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
</span><span id="Parser-5802"><a href="#Parser-5802"><span class="linenos">5802</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
</span><span id="Parser-5803"><a href="#Parser-5803"><span class="linenos">5803</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-5804"><a href="#Parser-5804"><span class="linenos">5804</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
</span><span id="Parser-5805"><a href="#Parser-5805"><span class="linenos">5805</span></a> <span class="p">)</span>
</span><span id="Parser-5806"><a href="#Parser-5806"><span class="linenos">5806</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5807"><a href="#Parser-5807"><span class="linenos">5807</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
</span><span id="Parser-5808"><a href="#Parser-5808"><span class="linenos">5808</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5809"><a href="#Parser-5809"><span class="linenos">5809</span></a>
</span><span id="Parser-5810"><a href="#Parser-5810"><span class="linenos">5810</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="Parser-5811"><a href="#Parser-5811"><span class="linenos">5811</span></a>
</span><span id="Parser-5812"><a href="#Parser-5812"><span class="linenos">5812</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
</span><span id="Parser-5813"><a href="#Parser-5813"><span class="linenos">5813</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">)</span>
</span><span id="Parser-5814"><a href="#Parser-5814"><span class="linenos">5814</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span>
</span><span id="Parser-5815"><a href="#Parser-5815"><span class="linenos">5815</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
</span><span id="Parser-5816"><a href="#Parser-5816"><span class="linenos">5816</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HIDDEN&quot;</span><span class="p">)</span>
</span><span id="Parser-5817"><a href="#Parser-5817"><span class="linenos">5817</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">hidden</span><span class="o">=</span><span class="n">hidden</span><span class="p">)</span>
</span><span id="Parser-5818"><a href="#Parser-5818"><span class="linenos">5818</span></a>
</span><span id="Parser-5819"><a href="#Parser-5819"><span class="linenos">5819</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
</span><span id="Parser-5820"><a href="#Parser-5820"><span class="linenos">5820</span></a>
</span><span id="Parser-5821"><a href="#Parser-5821"><span class="linenos">5821</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-5822"><a href="#Parser-5822"><span class="linenos">5822</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
</span><span id="Parser-5823"><a href="#Parser-5823"><span class="linenos">5823</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-5824"><a href="#Parser-5824"><span class="linenos">5824</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
</span><span id="Parser-5825"><a href="#Parser-5825"><span class="linenos">5825</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-5826"><a href="#Parser-5826"><span class="linenos">5826</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</span><span class="p">):</span>
</span><span id="Parser-5827"><a href="#Parser-5827"><span class="linenos">5827</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-5828"><a href="#Parser-5828"><span class="linenos">5828</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAXVALUE&quot;</span><span class="p">):</span>
</span><span id="Parser-5829"><a href="#Parser-5829"><span class="linenos">5829</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-5830"><a href="#Parser-5830"><span class="linenos">5830</span></a>
</span><span id="Parser-5831"><a href="#Parser-5831"><span class="linenos">5831</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
</span><span id="Parser-5832"><a href="#Parser-5832"><span class="linenos">5832</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5833"><a href="#Parser-5833"><span class="linenos">5833</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
</span><span id="Parser-5834"><a href="#Parser-5834"><span class="linenos">5834</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-5835"><a href="#Parser-5835"><span class="linenos">5835</span></a>
</span><span id="Parser-5836"><a href="#Parser-5836"><span class="linenos">5836</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identity</span><span class="p">:</span>
</span><span id="Parser-5837"><a href="#Parser-5837"><span class="linenos">5837</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_range</span><span class="p">())</span>
</span><span id="Parser-5838"><a href="#Parser-5838"><span class="linenos">5838</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</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;start&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-5839"><a href="#Parser-5839"><span class="linenos">5839</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="Parser-5840"><a href="#Parser-5840"><span class="linenos">5840</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</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="Parser-5841"><a href="#Parser-5841"><span class="linenos">5841</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</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="Parser-5842"><a href="#Parser-5842"><span class="linenos">5842</span></a>
</span><span id="Parser-5843"><a href="#Parser-5843"><span class="linenos">5843</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-5844"><a href="#Parser-5844"><span class="linenos">5844</span></a>
</span><span id="Parser-5845"><a href="#Parser-5845"><span class="linenos">5845</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-5846"><a href="#Parser-5846"><span class="linenos">5846</span></a>
</span><span id="Parser-5847"><a href="#Parser-5847"><span class="linenos">5847</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_inline</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">:</span>
</span><span id="Parser-5848"><a href="#Parser-5848"><span class="linenos">5848</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">)</span>
</span><span id="Parser-5849"><a href="#Parser-5849"><span class="linenos">5849</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-5850"><a href="#Parser-5850"><span class="linenos">5850</span></a>
</span><span id="Parser-5851"><a href="#Parser-5851"><span class="linenos">5851</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_not_constraint</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5852"><a href="#Parser-5852"><span class="linenos">5852</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
</span><span id="Parser-5853"><a href="#Parser-5853"><span class="linenos">5853</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">)</span>
</span><span id="Parser-5854"><a href="#Parser-5854"><span class="linenos">5854</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASESPECIFIC&quot;</span><span class="p">):</span>
</span><span id="Parser-5855"><a href="#Parser-5855"><span class="linenos">5855</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5856"><a href="#Parser-5856"><span class="linenos">5856</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLICATION&quot;</span><span class="p">):</span>
</span><span id="Parser-5857"><a href="#Parser-5857"><span class="linenos">5857</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotForReplicationColumnConstraint</span><span class="p">)</span>
</span><span id="Parser-5858"><a href="#Parser-5858"><span class="linenos">5858</span></a>
</span><span id="Parser-5859"><a href="#Parser-5859"><span class="linenos">5859</span></a> <span class="c1"># Unconsume the `NOT` token</span>
</span><span id="Parser-5860"><a href="#Parser-5860"><span class="linenos">5860</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-5861"><a href="#Parser-5861"><span class="linenos">5861</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5862"><a href="#Parser-5862"><span class="linenos">5862</span></a>
</span><span id="Parser-5863"><a href="#Parser-5863"><span class="linenos">5863</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_column_constraint</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5864"><a href="#Parser-5864"><span class="linenos">5864</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-5865"><a href="#Parser-5865"><span class="linenos">5865</span></a>
</span><span id="Parser-5866"><a href="#Parser-5866"><span class="linenos">5866</span></a> <span class="n">procedure_option_follows</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-5867"><a href="#Parser-5867"><span class="linenos">5867</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-5868"><a href="#Parser-5868"><span class="linenos">5868</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
</span><span id="Parser-5869"><a href="#Parser-5869"><span class="linenos">5869</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">PROCEDURE_OPTIONS</span>
</span><span id="Parser-5870"><a href="#Parser-5870"><span class="linenos">5870</span></a> <span class="p">)</span>
</span><span id="Parser-5871"><a href="#Parser-5871"><span class="linenos">5871</span></a>
</span><span id="Parser-5872"><a href="#Parser-5872"><span class="linenos">5872</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">procedure_option_follows</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">):</span>
</span><span id="Parser-5873"><a href="#Parser-5873"><span class="linenos">5873</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-5874"><a href="#Parser-5874"><span class="linenos">5874</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
</span><span id="Parser-5875"><a href="#Parser-5875"><span class="linenos">5875</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-5876"><a href="#Parser-5876"><span class="linenos">5876</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">),</span>
</span><span id="Parser-5877"><a href="#Parser-5877"><span class="linenos">5877</span></a> <span class="p">)</span>
</span><span id="Parser-5878"><a href="#Parser-5878"><span class="linenos">5878</span></a>
</span><span id="Parser-5879"><a href="#Parser-5879"><span class="linenos">5879</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-5880"><a href="#Parser-5880"><span class="linenos">5880</span></a>
</span><span id="Parser-5881"><a href="#Parser-5881"><span class="linenos">5881</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_constraint</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5882"><a href="#Parser-5882"><span class="linenos">5882</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
</span><span id="Parser-5883"><a href="#Parser-5883"><span class="linenos">5883</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">)</span>
</span><span id="Parser-5884"><a href="#Parser-5884"><span class="linenos">5884</span></a>
</span><span id="Parser-5885"><a href="#Parser-5885"><span class="linenos">5885</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-5886"><a href="#Parser-5886"><span class="linenos">5886</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Constraint</span><span class="p">,</span>
</span><span id="Parser-5887"><a href="#Parser-5887"><span class="linenos">5887</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span>
</span><span id="Parser-5888"><a href="#Parser-5888"><span class="linenos">5888</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraints</span><span class="p">(),</span>
</span><span id="Parser-5889"><a href="#Parser-5889"><span class="linenos">5889</span></a> <span class="p">)</span>
</span><span id="Parser-5890"><a href="#Parser-5890"><span class="linenos">5890</span></a>
</span><span id="Parser-5891"><a href="#Parser-5891"><span class="linenos">5891</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unnamed_constraints</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5892"><a href="#Parser-5892"><span class="linenos">5892</span></a> <span class="n">constraints</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-5893"><a href="#Parser-5893"><span class="linenos">5893</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-5894"><a href="#Parser-5894"><span class="linenos">5894</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
</span><span id="Parser-5895"><a href="#Parser-5895"><span class="linenos">5895</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
</span><span id="Parser-5896"><a href="#Parser-5896"><span class="linenos">5896</span></a> <span class="k">break</span>
</span><span id="Parser-5897"><a href="#Parser-5897"><span class="linenos">5897</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
</span><span id="Parser-5898"><a href="#Parser-5898"><span class="linenos">5898</span></a>
</span><span id="Parser-5899"><a href="#Parser-5899"><span class="linenos">5899</span></a> <span class="k">return</span> <span class="n">constraints</span>
</span><span id="Parser-5900"><a href="#Parser-5900"><span class="linenos">5900</span></a>
</span><span id="Parser-5901"><a href="#Parser-5901"><span class="linenos">5901</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
</span><span id="Parser-5902"><a href="#Parser-5902"><span class="linenos">5902</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">constraints</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">Collection</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="Parser-5903"><a href="#Parser-5903"><span class="linenos">5903</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="Parser-5904"><a href="#Parser-5904"><span class="linenos">5904</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
</span><span id="Parser-5905"><a href="#Parser-5905"><span class="linenos">5905</span></a> <span class="n">constraints</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span>
</span><span id="Parser-5906"><a href="#Parser-5906"><span class="linenos">5906</span></a> <span class="p">):</span>
</span><span id="Parser-5907"><a href="#Parser-5907"><span class="linenos">5907</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5908"><a href="#Parser-5908"><span class="linenos">5908</span></a>
</span><span id="Parser-5909"><a href="#Parser-5909"><span class="linenos">5909</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-5910"><a href="#Parser-5910"><span class="linenos">5910</span></a> <span class="k">if</span> <span class="n">constraint</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">:</span>
</span><span id="Parser-5911"><a href="#Parser-5911"><span class="linenos">5911</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser found for schema constraint </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
</span><span id="Parser-5912"><a href="#Parser-5912"><span class="linenos">5912</span></a>
</span><span id="Parser-5913"><a href="#Parser-5913"><span class="linenos">5913</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="n">constraint</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="Parser-5914"><a href="#Parser-5914"><span class="linenos">5914</span></a>
</span><span id="Parser-5915"><a href="#Parser-5915"><span class="linenos">5915</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unique_key</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-5916"><a href="#Parser-5916"><span class="linenos">5916</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-5917"><a href="#Parser-5917"><span class="linenos">5917</span></a>
</span><span id="Parser-5918"><a href="#Parser-5918"><span class="linenos">5918</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_unique</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">:</span>
</span><span id="Parser-5919"><a href="#Parser-5919"><span class="linenos">5919</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
</span><span id="Parser-5920"><a href="#Parser-5920"><span class="linenos">5920</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-5921"><a href="#Parser-5921"><span class="linenos">5921</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">,</span>
</span><span id="Parser-5922"><a href="#Parser-5922"><span class="linenos">5922</span></a> <span class="n">nulls</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;DISTINCT&quot;</span><span class="p">),</span>
</span><span id="Parser-5923"><a href="#Parser-5923"><span class="linenos">5923</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unique_key</span><span class="p">()),</span>
</span><span id="Parser-5924"><a href="#Parser-5924"><span class="linenos">5924</span></a> <span class="n">index_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
</span><span id="Parser-5925"><a href="#Parser-5925"><span class="linenos">5925</span></a> <span class="n">on_conflict</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_conflict</span><span class="p">(),</span>
</span><span id="Parser-5926"><a href="#Parser-5926"><span class="linenos">5926</span></a> <span class="p">)</span>
</span><span id="Parser-5927"><a href="#Parser-5927"><span class="linenos">5927</span></a>
</span><span id="Parser-5928"><a href="#Parser-5928"><span class="linenos">5928</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_key_constraint_options</span><span class="p">(</span><span class="bp">self</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="Parser-5929"><a href="#Parser-5929"><span class="linenos">5929</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-5930"><a href="#Parser-5930"><span class="linenos">5930</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-5931"><a href="#Parser-5931"><span class="linenos">5931</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-5932"><a href="#Parser-5932"><span class="linenos">5932</span></a> <span class="k">break</span>
</span><span id="Parser-5933"><a href="#Parser-5933"><span class="linenos">5933</span></a>
</span><span id="Parser-5934"><a href="#Parser-5934"><span class="linenos">5934</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
</span><span id="Parser-5935"><a href="#Parser-5935"><span class="linenos">5935</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5936"><a href="#Parser-5936"><span class="linenos">5936</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-5937"><a href="#Parser-5937"><span class="linenos">5937</span></a>
</span><span id="Parser-5938"><a href="#Parser-5938"><span class="linenos">5938</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
</span><span id="Parser-5939"><a href="#Parser-5939"><span class="linenos">5939</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
</span><span id="Parser-5940"><a href="#Parser-5940"><span class="linenos">5940</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">):</span>
</span><span id="Parser-5941"><a href="#Parser-5941"><span class="linenos">5941</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
</span><span id="Parser-5942"><a href="#Parser-5942"><span class="linenos">5942</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESTRICT&quot;</span><span class="p">):</span>
</span><span id="Parser-5943"><a href="#Parser-5943"><span class="linenos">5943</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;RESTRICT&quot;</span>
</span><span id="Parser-5944"><a href="#Parser-5944"><span class="linenos">5944</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">):</span>
</span><span id="Parser-5945"><a href="#Parser-5945"><span class="linenos">5945</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
</span><span id="Parser-5946"><a href="#Parser-5946"><span class="linenos">5946</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="Parser-5947"><a href="#Parser-5947"><span class="linenos">5947</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
</span><span id="Parser-5948"><a href="#Parser-5948"><span class="linenos">5948</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5949"><a href="#Parser-5949"><span class="linenos">5949</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Invalid key constraint&quot;</span><span class="p">)</span>
</span><span id="Parser-5950"><a href="#Parser-5950"><span class="linenos">5950</span></a>
</span><span id="Parser-5951"><a href="#Parser-5951"><span class="linenos">5951</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Parser-5952"><a href="#Parser-5952"><span class="linenos">5952</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5953"><a href="#Parser-5953"><span class="linenos">5953</span></a> <span class="n">var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span>
</span><span id="Parser-5954"><a href="#Parser-5954"><span class="linenos">5954</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">KEY_CONSTRAINT_OPTIONS</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="o">=</span><span class="kc">False</span>
</span><span id="Parser-5955"><a href="#Parser-5955"><span class="linenos">5955</span></a> <span class="p">)</span>
</span><span id="Parser-5956"><a href="#Parser-5956"><span class="linenos">5956</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">var</span><span class="p">:</span>
</span><span id="Parser-5957"><a href="#Parser-5957"><span class="linenos">5957</span></a> <span class="k">break</span>
</span><span id="Parser-5958"><a href="#Parser-5958"><span class="linenos">5958</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">var</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="Parser-5959"><a href="#Parser-5959"><span class="linenos">5959</span></a>
</span><span id="Parser-5960"><a href="#Parser-5960"><span class="linenos">5960</span></a> <span class="k">return</span> <span class="n">options</span>
</span><span id="Parser-5961"><a href="#Parser-5961"><span class="linenos">5961</span></a>
</span><span id="Parser-5962"><a href="#Parser-5962"><span class="linenos">5962</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</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">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">Reference</span><span class="p">]:</span>
</span><span id="Parser-5963"><a href="#Parser-5963"><span class="linenos">5963</span></a> <span class="k">if</span> <span class="n">match</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">):</span>
</span><span id="Parser-5964"><a href="#Parser-5964"><span class="linenos">5964</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5965"><a href="#Parser-5965"><span class="linenos">5965</span></a>
</span><span id="Parser-5966"><a href="#Parser-5966"><span class="linenos">5966</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5967"><a href="#Parser-5967"><span class="linenos">5967</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-5968"><a href="#Parser-5968"><span class="linenos">5968</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
</span><span id="Parser-5969"><a href="#Parser-5969"><span class="linenos">5969</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
</span><span id="Parser-5970"><a href="#Parser-5970"><span class="linenos">5970</span></a>
</span><span id="Parser-5971"><a href="#Parser-5971"><span class="linenos">5971</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_foreign_key</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">:</span>
</span><span id="Parser-5972"><a href="#Parser-5972"><span class="linenos">5972</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
</span><span id="Parser-5973"><a href="#Parser-5973"><span class="linenos">5973</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_references</span><span class="p">()</span>
</span><span id="Parser-5974"><a href="#Parser-5974"><span class="linenos">5974</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Parser-5975"><a href="#Parser-5975"><span class="linenos">5975</span></a>
</span><span id="Parser-5976"><a href="#Parser-5976"><span class="linenos">5976</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
</span><span id="Parser-5977"><a href="#Parser-5977"><span class="linenos">5977</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">)):</span>
</span><span id="Parser-5978"><a href="#Parser-5978"><span class="linenos">5978</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected DELETE or UPDATE&quot;</span><span class="p">)</span>
</span><span id="Parser-5979"><a href="#Parser-5979"><span class="linenos">5979</span></a>
</span><span id="Parser-5980"><a href="#Parser-5980"><span class="linenos">5980</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
</span><span id="Parser-5981"><a href="#Parser-5981"><span class="linenos">5981</span></a>
</span><span id="Parser-5982"><a href="#Parser-5982"><span class="linenos">5982</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
</span><span id="Parser-5983"><a href="#Parser-5983"><span class="linenos">5983</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
</span><span id="Parser-5984"><a href="#Parser-5984"><span class="linenos">5984</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">):</span>
</span><span id="Parser-5985"><a href="#Parser-5985"><span class="linenos">5985</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">))</span>
</span><span id="Parser-5986"><a href="#Parser-5986"><span class="linenos">5986</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-5987"><a href="#Parser-5987"><span class="linenos">5987</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-5988"><a href="#Parser-5988"><span class="linenos">5988</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-5989"><a href="#Parser-5989"><span class="linenos">5989</span></a> <span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-5990"><a href="#Parser-5990"><span class="linenos">5990</span></a>
</span><span id="Parser-5991"><a href="#Parser-5991"><span class="linenos">5991</span></a> <span class="n">options</span><span class="p">[</span><span class="n">kind</span><span class="p">]</span> <span class="o">=</span> <span class="n">action</span>
</span><span id="Parser-5992"><a href="#Parser-5992"><span class="linenos">5992</span></a>
</span><span id="Parser-5993"><a href="#Parser-5993"><span class="linenos">5993</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-5994"><a href="#Parser-5994"><span class="linenos">5994</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">,</span>
</span><span id="Parser-5995"><a href="#Parser-5995"><span class="linenos">5995</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-5996"><a href="#Parser-5996"><span class="linenos">5996</span></a> <span class="n">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span>
</span><span id="Parser-5997"><a href="#Parser-5997"><span class="linenos">5997</span></a> <span class="o">**</span><span class="n">options</span><span class="p">,</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-5998"><a href="#Parser-5998"><span class="linenos">5998</span></a> <span class="p">)</span>
</span><span id="Parser-5999"><a href="#Parser-5999"><span class="linenos">5999</span></a>
</span><span id="Parser-6000"><a href="#Parser-6000"><span class="linenos">6000</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_primary_key_part</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6001"><a href="#Parser-6001"><span class="linenos">6001</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
</span><span id="Parser-6002"><a href="#Parser-6002"><span class="linenos">6002</span></a>
</span><span id="Parser-6003"><a href="#Parser-6003"><span class="linenos">6003</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_period_for_system_time</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">]:</span>
</span><span id="Parser-6004"><a href="#Parser-6004"><span class="linenos">6004</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
</span><span id="Parser-6005"><a href="#Parser-6005"><span class="linenos">6005</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-6006"><a href="#Parser-6006"><span class="linenos">6006</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-6007"><a href="#Parser-6007"><span class="linenos">6007</span></a>
</span><span id="Parser-6008"><a href="#Parser-6008"><span class="linenos">6008</span></a> <span class="n">id_vars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
</span><span id="Parser-6009"><a href="#Parser-6009"><span class="linenos">6009</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6010"><a href="#Parser-6010"><span class="linenos">6010</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">,</span>
</span><span id="Parser-6011"><a href="#Parser-6011"><span class="linenos">6011</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="Parser-6012"><a href="#Parser-6012"><span class="linenos">6012</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Parser-6013"><a href="#Parser-6013"><span class="linenos">6013</span></a> <span class="p">)</span>
</span><span id="Parser-6014"><a href="#Parser-6014"><span class="linenos">6014</span></a>
</span><span id="Parser-6015"><a href="#Parser-6015"><span class="linenos">6015</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_primary_key</span><span class="p">(</span>
</span><span id="Parser-6016"><a href="#Parser-6016"><span class="linenos">6016</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</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="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-6017"><a href="#Parser-6017"><span class="linenos">6017</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
</span><span id="Parser-6018"><a href="#Parser-6018"><span class="linenos">6018</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-6019"><a href="#Parser-6019"><span class="linenos">6019</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">))</span>
</span><span id="Parser-6020"><a href="#Parser-6020"><span class="linenos">6020</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span>
</span><span id="Parser-6021"><a href="#Parser-6021"><span class="linenos">6021</span></a> <span class="p">)</span>
</span><span id="Parser-6022"><a href="#Parser-6022"><span class="linenos">6022</span></a>
</span><span id="Parser-6023"><a href="#Parser-6023"><span class="linenos">6023</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-6024"><a href="#Parser-6024"><span class="linenos">6024</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">)</span>
</span><span id="Parser-6025"><a href="#Parser-6025"><span class="linenos">6025</span></a>
</span><span id="Parser-6026"><a href="#Parser-6026"><span class="linenos">6026</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span>
</span><span id="Parser-6027"><a href="#Parser-6027"><span class="linenos">6027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key_part</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span>
</span><span id="Parser-6028"><a href="#Parser-6028"><span class="linenos">6028</span></a> <span class="p">)</span>
</span><span id="Parser-6029"><a href="#Parser-6029"><span class="linenos">6029</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
</span><span id="Parser-6030"><a href="#Parser-6030"><span class="linenos">6030</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
</span><span id="Parser-6031"><a href="#Parser-6031"><span class="linenos">6031</span></a>
</span><span id="Parser-6032"><a href="#Parser-6032"><span class="linenos">6032</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_bracket_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">is_map</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">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="Parser-6033"><a href="#Parser-6033"><span class="linenos">6033</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span> <span class="n">explicit</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="Parser-6034"><a href="#Parser-6034"><span class="linenos">6034</span></a>
</span><span id="Parser-6035"><a href="#Parser-6035"><span class="linenos">6035</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_odbc_datetime_literal</span><span class="p">(</span><span class="bp">self</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="Parser-6036"><a href="#Parser-6036"><span class="linenos">6036</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser-6037"><a href="#Parser-6037"><span class="linenos">6037</span></a><span class="sd"> Parses a datetime column in ODBC format. We parse the column into the corresponding</span>
</span><span id="Parser-6038"><a href="#Parser-6038"><span class="linenos">6038</span></a><span class="sd"> types, for example `{d&#39;yyyy-mm-dd&#39;}` will be parsed as a `Date` column, exactly the</span>
</span><span id="Parser-6039"><a href="#Parser-6039"><span class="linenos">6039</span></a><span class="sd"> same as we did for `DATE(&#39;yyyy-mm-dd&#39;)`.</span>
</span><span id="Parser-6040"><a href="#Parser-6040"><span class="linenos">6040</span></a>
</span><span id="Parser-6041"><a href="#Parser-6041"><span class="linenos">6041</span></a><span class="sd"> Reference:</span>
</span><span id="Parser-6042"><a href="#Parser-6042"><span class="linenos">6042</span></a><span class="sd"> https://learn.microsoft.com/en-us/sql/odbc/reference/develop-app/date-time-and-timestamp-literals</span>
</span><span id="Parser-6043"><a href="#Parser-6043"><span class="linenos">6043</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser-6044"><a href="#Parser-6044"><span class="linenos">6044</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
</span><span id="Parser-6045"><a href="#Parser-6045"><span class="linenos">6045</span></a> <span class="n">exp_class</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ODBC_DATETIME_LITERALS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span>
</span><span id="Parser-6046"><a href="#Parser-6046"><span class="linenos">6046</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp_class</span><span class="o">=</span><span class="n">exp_class</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
</span><span id="Parser-6047"><a href="#Parser-6047"><span class="linenos">6047</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">):</span>
</span><span id="Parser-6048"><a href="#Parser-6048"><span class="linenos">6048</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected }&quot;</span><span class="p">)</span>
</span><span id="Parser-6049"><a href="#Parser-6049"><span class="linenos">6049</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="Parser-6050"><a href="#Parser-6050"><span class="linenos">6050</span></a>
</span><span id="Parser-6051"><a href="#Parser-6051"><span class="linenos">6051</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_bracket</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="o">=</span> <span class="kc">None</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6052"><a href="#Parser-6052"><span class="linenos">6052</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)):</span>
</span><span id="Parser-6053"><a href="#Parser-6053"><span class="linenos">6053</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-6054"><a href="#Parser-6054"><span class="linenos">6054</span></a>
</span><span id="Parser-6055"><a href="#Parser-6055"><span class="linenos">6055</span></a> <span class="n">bracket_kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
</span><span id="Parser-6056"><a href="#Parser-6056"><span class="linenos">6056</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Parser-6057"><a href="#Parser-6057"><span class="linenos">6057</span></a> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span>
</span><span id="Parser-6058"><a href="#Parser-6058"><span class="linenos">6058</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Parser-6059"><a href="#Parser-6059"><span class="linenos">6059</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span>
</span><span id="Parser-6060"><a href="#Parser-6060"><span class="linenos">6060</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ODBC_DATETIME_LITERALS</span>
</span><span id="Parser-6061"><a href="#Parser-6061"><span class="linenos">6061</span></a> <span class="p">):</span>
</span><span id="Parser-6062"><a href="#Parser-6062"><span class="linenos">6062</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_odbc_datetime_literal</span><span class="p">()</span>
</span><span id="Parser-6063"><a href="#Parser-6063"><span class="linenos">6063</span></a>
</span><span id="Parser-6064"><a href="#Parser-6064"><span class="linenos">6064</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="Parser-6065"><a href="#Parser-6065"><span class="linenos">6065</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket_key_value</span><span class="p">(</span><span class="n">is_map</span><span class="o">=</span><span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
</span><span id="Parser-6066"><a href="#Parser-6066"><span class="linenos">6066</span></a> <span class="p">)</span>
</span><span id="Parser-6067"><a href="#Parser-6067"><span class="linenos">6067</span></a>
</span><span id="Parser-6068"><a href="#Parser-6068"><span class="linenos">6068</span></a> <span class="k">if</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">):</span>
</span><span id="Parser-6069"><a href="#Parser-6069"><span class="linenos">6069</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected ]&quot;</span><span class="p">)</span>
</span><span id="Parser-6070"><a href="#Parser-6070"><span class="linenos">6070</span></a> <span class="k">elif</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">):</span>
</span><span id="Parser-6071"><a href="#Parser-6071"><span class="linenos">6071</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected }&quot;</span><span class="p">)</span>
</span><span id="Parser-6072"><a href="#Parser-6072"><span class="linenos">6072</span></a>
</span><span id="Parser-6073"><a href="#Parser-6073"><span class="linenos">6073</span></a> <span class="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
</span><span id="Parser-6074"><a href="#Parser-6074"><span class="linenos">6074</span></a> <span class="k">if</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
</span><span id="Parser-6075"><a href="#Parser-6075"><span class="linenos">6075</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_kv_to_prop_eq</span><span class="p">(</span><span class="n">expressions</span><span class="p">))</span>
</span><span id="Parser-6076"><a href="#Parser-6076"><span class="linenos">6076</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="Parser-6077"><a href="#Parser-6077"><span class="linenos">6077</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">build_array_constructor</span><span class="p">(</span>
</span><span id="Parser-6078"><a href="#Parser-6078"><span class="linenos">6078</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">bracket_kind</span><span class="o">=</span><span class="n">bracket_kind</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span>
</span><span id="Parser-6079"><a href="#Parser-6079"><span class="linenos">6079</span></a> <span class="p">)</span>
</span><span id="Parser-6080"><a href="#Parser-6080"><span class="linenos">6080</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6081"><a href="#Parser-6081"><span class="linenos">6081</span></a> <span class="n">constructor_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ARRAY_CONSTRUCTORS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-6082"><a href="#Parser-6082"><span class="linenos">6082</span></a> <span class="k">if</span> <span class="n">constructor_type</span><span class="p">:</span>
</span><span id="Parser-6083"><a href="#Parser-6083"><span class="linenos">6083</span></a> <span class="k">return</span> <span class="n">build_array_constructor</span><span class="p">(</span>
</span><span id="Parser-6084"><a href="#Parser-6084"><span class="linenos">6084</span></a> <span class="n">constructor_type</span><span class="p">,</span>
</span><span id="Parser-6085"><a href="#Parser-6085"><span class="linenos">6085</span></a> <span class="n">args</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-6086"><a href="#Parser-6086"><span class="linenos">6086</span></a> <span class="n">bracket_kind</span><span class="o">=</span><span class="n">bracket_kind</span><span class="p">,</span>
</span><span id="Parser-6087"><a href="#Parser-6087"><span class="linenos">6087</span></a> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">,</span>
</span><span id="Parser-6088"><a href="#Parser-6088"><span class="linenos">6088</span></a> <span class="p">)</span>
</span><span id="Parser-6089"><a href="#Parser-6089"><span class="linenos">6089</span></a>
</span><span id="Parser-6090"><a href="#Parser-6090"><span class="linenos">6090</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</span><span class="p">)</span>
</span><span id="Parser-6091"><a href="#Parser-6091"><span class="linenos">6091</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Bracket</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-6092"><a href="#Parser-6092"><span class="linenos">6092</span></a>
</span><span id="Parser-6093"><a href="#Parser-6093"><span class="linenos">6093</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-6094"><a href="#Parser-6094"><span class="linenos">6094</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-6095"><a href="#Parser-6095"><span class="linenos">6095</span></a>
</span><span id="Parser-6096"><a href="#Parser-6096"><span class="linenos">6096</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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="Parser-6097"><a href="#Parser-6097"><span class="linenos">6097</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">):</span>
</span><span id="Parser-6098"><a href="#Parser-6098"><span class="linenos">6098</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Slice</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="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">())</span>
</span><span id="Parser-6099"><a href="#Parser-6099"><span class="linenos">6099</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-6100"><a href="#Parser-6100"><span class="linenos">6100</span></a>
</span><span id="Parser-6101"><a href="#Parser-6101"><span class="linenos">6101</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_case</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6102"><a href="#Parser-6102"><span class="linenos">6102</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-6103"><a href="#Parser-6103"><span class="linenos">6103</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6104"><a href="#Parser-6104"><span class="linenos">6104</span></a>
</span><span id="Parser-6105"><a href="#Parser-6105"><span class="linenos">6105</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="Parser-6106"><a href="#Parser-6106"><span class="linenos">6106</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-6107"><a href="#Parser-6107"><span class="linenos">6107</span></a>
</span><span id="Parser-6108"><a href="#Parser-6108"><span class="linenos">6108</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
</span><span id="Parser-6109"><a href="#Parser-6109"><span class="linenos">6109</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-6110"><a href="#Parser-6110"><span class="linenos">6110</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
</span><span id="Parser-6111"><a href="#Parser-6111"><span class="linenos">6111</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-6112"><a href="#Parser-6112"><span class="linenos">6112</span></a> <span class="n">ifs</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">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="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">then</span><span class="p">))</span>
</span><span id="Parser-6113"><a href="#Parser-6113"><span class="linenos">6113</span></a>
</span><span id="Parser-6114"><a href="#Parser-6114"><span class="linenos">6114</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">):</span>
</span><span id="Parser-6115"><a href="#Parser-6115"><span class="linenos">6115</span></a> <span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-6116"><a href="#Parser-6116"><span class="linenos">6116</span></a>
</span><span id="Parser-6117"><a href="#Parser-6117"><span class="linenos">6117</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">):</span>
</span><span id="Parser-6118"><a href="#Parser-6118"><span class="linenos">6118</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="ow">and</span> <span class="n">default</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;END&quot;</span><span class="p">:</span>
</span><span id="Parser-6119"><a href="#Parser-6119"><span class="linenos">6119</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;interval&quot;</span><span class="p">)</span>
</span><span id="Parser-6120"><a href="#Parser-6120"><span class="linenos">6120</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6121"><a href="#Parser-6121"><span class="linenos">6121</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected END after CASE&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-6122"><a href="#Parser-6122"><span class="linenos">6122</span></a>
</span><span id="Parser-6123"><a href="#Parser-6123"><span class="linenos">6123</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6124"><a href="#Parser-6124"><span class="linenos">6124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span>
</span><span id="Parser-6125"><a href="#Parser-6125"><span class="linenos">6125</span></a> <span class="p">)</span>
</span><span id="Parser-6126"><a href="#Parser-6126"><span class="linenos">6126</span></a>
</span><span id="Parser-6127"><a href="#Parser-6127"><span class="linenos">6127</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_if</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6128"><a href="#Parser-6128"><span class="linenos">6128</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-6129"><a href="#Parser-6129"><span class="linenos">6129</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span>
</span><span id="Parser-6130"><a href="#Parser-6130"><span class="linenos">6130</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
</span><span id="Parser-6131"><a href="#Parser-6131"><span class="linenos">6131</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-6132"><a href="#Parser-6132"><span class="linenos">6132</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6133"><a href="#Parser-6133"><span class="linenos">6133</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
</span><span id="Parser-6134"><a href="#Parser-6134"><span class="linenos">6134</span></a>
</span><span id="Parser-6135"><a href="#Parser-6135"><span class="linenos">6135</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_IF_COMMANDS</span> <span class="ow">and</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="Parser-6136"><a href="#Parser-6136"><span class="linenos">6136</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-6137"><a href="#Parser-6137"><span class="linenos">6137</span></a>
</span><span id="Parser-6138"><a href="#Parser-6138"><span class="linenos">6138</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-6139"><a href="#Parser-6139"><span class="linenos">6139</span></a>
</span><span id="Parser-6140"><a href="#Parser-6140"><span class="linenos">6140</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">condition</span><span class="p">:</span>
</span><span id="Parser-6141"><a href="#Parser-6141"><span class="linenos">6141</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-6142"><a href="#Parser-6142"><span class="linenos">6142</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-6143"><a href="#Parser-6143"><span class="linenos">6143</span></a>
</span><span id="Parser-6144"><a href="#Parser-6144"><span class="linenos">6144</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
</span><span id="Parser-6145"><a href="#Parser-6145"><span class="linenos">6145</span></a> <span class="n">true</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-6146"><a href="#Parser-6146"><span class="linenos">6146</span></a> <span class="n">false</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-6147"><a href="#Parser-6147"><span class="linenos">6147</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
</span><span id="Parser-6148"><a href="#Parser-6148"><span class="linenos">6148</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">true</span><span class="p">,</span> <span class="n">false</span><span class="o">=</span><span class="n">false</span><span class="p">)</span>
</span><span id="Parser-6149"><a href="#Parser-6149"><span class="linenos">6149</span></a>
</span><span id="Parser-6150"><a href="#Parser-6150"><span class="linenos">6150</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-6151"><a href="#Parser-6151"><span class="linenos">6151</span></a>
</span><span id="Parser-6152"><a href="#Parser-6152"><span class="linenos">6152</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_next_value_for</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6153"><a href="#Parser-6153"><span class="linenos">6153</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
</span><span id="Parser-6154"><a href="#Parser-6154"><span class="linenos">6154</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-6155"><a href="#Parser-6155"><span class="linenos">6155</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-6156"><a href="#Parser-6156"><span class="linenos">6156</span></a>
</span><span id="Parser-6157"><a href="#Parser-6157"><span class="linenos">6157</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6158"><a href="#Parser-6158"><span class="linenos">6158</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
</span><span id="Parser-6159"><a href="#Parser-6159"><span class="linenos">6159</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
</span><span id="Parser-6160"><a href="#Parser-6160"><span class="linenos">6160</span></a> <span class="n">order</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OVER</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">),</span>
</span><span id="Parser-6161"><a href="#Parser-6161"><span class="linenos">6161</span></a> <span class="p">)</span>
</span><span id="Parser-6162"><a href="#Parser-6162"><span class="linenos">6162</span></a>
</span><span id="Parser-6163"><a href="#Parser-6163"><span class="linenos">6163</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_extract</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">:</span>
</span><span id="Parser-6164"><a href="#Parser-6164"><span class="linenos">6164</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-6165"><a href="#Parser-6165"><span class="linenos">6165</span></a>
</span><span id="Parser-6166"><a href="#Parser-6166"><span class="linenos">6166</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
</span><span id="Parser-6167"><a href="#Parser-6167"><span class="linenos">6167</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Extract</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-6168"><a href="#Parser-6168"><span class="linenos">6168</span></a>
</span><span id="Parser-6169"><a href="#Parser-6169"><span class="linenos">6169</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="Parser-6170"><a href="#Parser-6170"><span class="linenos">6170</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected FROM or comma after EXTRACT&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-6171"><a href="#Parser-6171"><span class="linenos">6171</span></a>
</span><span id="Parser-6172"><a href="#Parser-6172"><span class="linenos">6172</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Extract</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="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-6173"><a href="#Parser-6173"><span class="linenos">6173</span></a>
</span><span id="Parser-6174"><a href="#Parser-6174"><span class="linenos">6174</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_gap_fill</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GapFill</span><span class="p">:</span>
</span><span id="Parser-6175"><a href="#Parser-6175"><span class="linenos">6175</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="Parser-6176"><a href="#Parser-6176"><span class="linenos">6176</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="Parser-6177"><a href="#Parser-6177"><span class="linenos">6177</span></a>
</span><span id="Parser-6178"><a href="#Parser-6178"><span class="linenos">6178</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="Parser-6179"><a href="#Parser-6179"><span class="linenos">6179</span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">this</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">)]</span>
</span><span id="Parser-6180"><a href="#Parser-6180"><span class="linenos">6180</span></a>
</span><span id="Parser-6181"><a href="#Parser-6181"><span class="linenos">6181</span></a> <span class="n">gap_fill</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">GapFill</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
</span><span id="Parser-6182"><a href="#Parser-6182"><span class="linenos">6182</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">gap_fill</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
</span><span id="Parser-6183"><a href="#Parser-6183"><span class="linenos">6183</span></a>
</span><span id="Parser-6184"><a href="#Parser-6184"><span class="linenos">6184</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">safe</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="p">]</span> <span class="o">=</span> <span class="kc">None</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="Parser-6185"><a href="#Parser-6185"><span class="linenos">6185</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-6186"><a href="#Parser-6186"><span class="linenos">6186</span></a>
</span><span id="Parser-6187"><a href="#Parser-6187"><span class="linenos">6187</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
</span><span id="Parser-6188"><a href="#Parser-6188"><span class="linenos">6188</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="Parser-6189"><a href="#Parser-6189"><span class="linenos">6189</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</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">to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
</span><span id="Parser-6190"><a href="#Parser-6190"><span class="linenos">6190</span></a>
</span><span id="Parser-6191"><a href="#Parser-6191"><span class="linenos">6191</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected AS after CAST&quot;</span><span class="p">)</span>
</span><span id="Parser-6192"><a href="#Parser-6192"><span class="linenos">6192</span></a>
</span><span id="Parser-6193"><a href="#Parser-6193"><span class="linenos">6193</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6194"><a href="#Parser-6194"><span class="linenos">6194</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="Parser-6195"><a href="#Parser-6195"><span class="linenos">6195</span></a>
</span><span id="Parser-6196"><a href="#Parser-6196"><span class="linenos">6196</span></a> <span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">)</span>
</span><span id="Parser-6197"><a href="#Parser-6197"><span class="linenos">6197</span></a> <span class="k">if</span> <span class="n">default</span><span class="p">:</span>
</span><span id="Parser-6198"><a href="#Parser-6198"><span class="linenos">6198</span></a> <span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-6199"><a href="#Parser-6199"><span class="linenos">6199</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;CONVERSION&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">)</span>
</span><span id="Parser-6200"><a href="#Parser-6200"><span class="linenos">6200</span></a>
</span><span id="Parser-6201"><a href="#Parser-6201"><span class="linenos">6201</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)):</span>
</span><span id="Parser-6202"><a href="#Parser-6202"><span class="linenos">6202</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-6203"><a href="#Parser-6203"><span class="linenos">6203</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
</span><span id="Parser-6204"><a href="#Parser-6204"><span class="linenos">6204</span></a>
</span><span id="Parser-6205"><a href="#Parser-6205"><span class="linenos">6205</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
</span><span id="Parser-6206"><a href="#Parser-6206"><span class="linenos">6206</span></a> <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">build</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
</span><span id="Parser-6207"><a href="#Parser-6207"><span class="linenos">6207</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
</span><span id="Parser-6208"><a href="#Parser-6208"><span class="linenos">6208</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6209"><a href="#Parser-6209"><span class="linenos">6209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</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">DATE</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
</span><span id="Parser-6210"><a href="#Parser-6210"><span class="linenos">6210</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-6211"><a href="#Parser-6211"><span class="linenos">6211</span></a> <span class="nb">format</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><span id="Parser-6212"><a href="#Parser-6212"><span class="linenos">6212</span></a> <span class="n">format_time</span><span class="p">(</span>
</span><span id="Parser-6213"><a href="#Parser-6213"><span class="linenos">6213</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
</span><span id="Parser-6214"><a href="#Parser-6214"><span class="linenos">6214</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
</span><span id="Parser-6215"><a href="#Parser-6215"><span class="linenos">6215</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">,</span>
</span><span id="Parser-6216"><a href="#Parser-6216"><span class="linenos">6216</span></a> <span class="p">)</span>
</span><span id="Parser-6217"><a href="#Parser-6217"><span class="linenos">6217</span></a> <span class="p">),</span>
</span><span id="Parser-6218"><a href="#Parser-6218"><span class="linenos">6218</span></a> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">,</span>
</span><span id="Parser-6219"><a href="#Parser-6219"><span class="linenos">6219</span></a> <span class="p">)</span>
</span><span id="Parser-6220"><a href="#Parser-6220"><span class="linenos">6220</span></a>
</span><span id="Parser-6221"><a href="#Parser-6221"><span class="linenos">6221</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</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">StrToTime</span><span class="p">):</span>
</span><span id="Parser-6222"><a href="#Parser-6222"><span class="linenos">6222</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
</span><span id="Parser-6223"><a href="#Parser-6223"><span class="linenos">6223</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-6224"><a href="#Parser-6224"><span class="linenos">6224</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
</span><span id="Parser-6225"><a href="#Parser-6225"><span class="linenos">6225</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected TYPE after CAST&quot;</span><span class="p">)</span>
</span><span id="Parser-6226"><a href="#Parser-6226"><span class="linenos">6226</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to</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="Parser-6227"><a href="#Parser-6227"><span class="linenos">6227</span></a> <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">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-6228"><a href="#Parser-6228"><span class="linenos">6228</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</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">CHAR</span><span class="p">:</span>
</span><span id="Parser-6229"><a href="#Parser-6229"><span class="linenos">6229</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CHARACTER_SET</span><span class="p">):</span>
</span><span id="Parser-6230"><a href="#Parser-6230"><span class="linenos">6230</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">())</span>
</span><span id="Parser-6231"><a href="#Parser-6231"><span class="linenos">6231</span></a>
</span><span id="Parser-6232"><a href="#Parser-6232"><span class="linenos">6232</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6233"><a href="#Parser-6233"><span class="linenos">6233</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span>
</span><span id="Parser-6234"><a href="#Parser-6234"><span class="linenos">6234</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-6235"><a href="#Parser-6235"><span class="linenos">6235</span></a> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span>
</span><span id="Parser-6236"><a href="#Parser-6236"><span class="linenos">6236</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">,</span>
</span><span id="Parser-6237"><a href="#Parser-6237"><span class="linenos">6237</span></a> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">,</span>
</span><span id="Parser-6238"><a href="#Parser-6238"><span class="linenos">6238</span></a> <span class="n">action</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CAST_ACTIONS</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
</span><span id="Parser-6239"><a href="#Parser-6239"><span class="linenos">6239</span></a> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">,</span>
</span><span id="Parser-6240"><a href="#Parser-6240"><span class="linenos">6240</span></a> <span class="p">)</span>
</span><span id="Parser-6241"><a href="#Parser-6241"><span class="linenos">6241</span></a>
</span><span id="Parser-6242"><a href="#Parser-6242"><span class="linenos">6242</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_string_agg</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">:</span>
</span><span id="Parser-6243"><a href="#Parser-6243"><span class="linenos">6243</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
</span><span id="Parser-6244"><a href="#Parser-6244"><span class="linenos">6244</span></a> <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="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 class="o">=</span> <span class="p">[</span>
</span><span id="Parser-6245"><a href="#Parser-6245"><span class="linenos">6245</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()])</span>
</span><span id="Parser-6246"><a href="#Parser-6246"><span class="linenos">6246</span></a> <span class="p">]</span>
</span><span id="Parser-6247"><a href="#Parser-6247"><span class="linenos">6247</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="Parser-6248"><a href="#Parser-6248"><span class="linenos">6248</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">))</span>
</span><span id="Parser-6249"><a href="#Parser-6249"><span class="linenos">6249</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6250"><a href="#Parser-6250"><span class="linenos">6250</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-6251"><a href="#Parser-6251"><span class="linenos">6251</span></a>
</span><span id="Parser-6252"><a href="#Parser-6252"><span class="linenos">6252</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="s2">&quot;OVERFLOW&quot;</span><span class="p">):</span>
</span><span id="Parser-6253"><a href="#Parser-6253"><span class="linenos">6253</span></a> <span class="c1"># trino: LISTAGG(expression [, separator] [ON OVERFLOW overflow_behavior])</span>
</span><span id="Parser-6254"><a href="#Parser-6254"><span class="linenos">6254</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">):</span>
</span><span id="Parser-6255"><a href="#Parser-6255"><span class="linenos">6255</span></a> <span class="n">on_overflow</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 class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">)</span>
</span><span id="Parser-6256"><a href="#Parser-6256"><span class="linenos">6256</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6257"><a href="#Parser-6257"><span class="linenos">6257</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRUNCATE&quot;</span><span class="p">)</span>
</span><span id="Parser-6258"><a href="#Parser-6258"><span class="linenos">6258</span></a> <span class="n">on_overflow</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6259"><a href="#Parser-6259"><span class="linenos">6259</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OverflowTruncateBehavior</span><span class="p">,</span>
</span><span id="Parser-6260"><a href="#Parser-6260"><span class="linenos">6260</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">(),</span>
</span><span id="Parser-6261"><a href="#Parser-6261"><span class="linenos">6261</span></a> <span class="n">with_count</span><span class="o">=</span><span class="p">(</span>
</span><span id="Parser-6262"><a href="#Parser-6262"><span class="linenos">6262</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;COUNT&quot;</span><span class="p">)</span>
</span><span id="Parser-6263"><a href="#Parser-6263"><span class="linenos">6263</span></a> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;COUNT&quot;</span><span class="p">)</span>
</span><span id="Parser-6264"><a href="#Parser-6264"><span class="linenos">6264</span></a> <span class="p">),</span>
</span><span id="Parser-6265"><a href="#Parser-6265"><span class="linenos">6265</span></a> <span class="p">)</span>
</span><span id="Parser-6266"><a href="#Parser-6266"><span class="linenos">6266</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6267"><a href="#Parser-6267"><span class="linenos">6267</span></a> <span class="n">on_overflow</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6268"><a href="#Parser-6268"><span class="linenos">6268</span></a>
</span><span id="Parser-6269"><a href="#Parser-6269"><span class="linenos">6269</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-6270"><a href="#Parser-6270"><span class="linenos">6270</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
</span><span id="Parser-6271"><a href="#Parser-6271"><span class="linenos">6271</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
</span><span id="Parser-6272"><a href="#Parser-6272"><span class="linenos">6272</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
</span><span id="Parser-6273"><a href="#Parser-6273"><span class="linenos">6273</span></a> <span class="c1"># The order is parsed through `this` as a canonicalization for WITHIN GROUPs</span>
</span><span id="Parser-6274"><a href="#Parser-6274"><span class="linenos">6274</span></a> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><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><span id="Parser-6275"><a href="#Parser-6275"><span class="linenos">6275</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span> <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">separator</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="Parser-6276"><a href="#Parser-6276"><span class="linenos">6276</span></a>
</span><span id="Parser-6277"><a href="#Parser-6277"><span class="linenos">6277</span></a> <span class="c1"># Checks if we can parse an order clause: WITHIN GROUP (ORDER BY &lt;order_by_expression_list&gt; [ASC | DESC]).</span>
</span><span id="Parser-6278"><a href="#Parser-6278"><span class="linenos">6278</span></a> <span class="c1"># This is done &quot;manually&quot;, instead of letting _parse_window parse it into an exp.WithinGroup node, so that</span>
</span><span id="Parser-6279"><a href="#Parser-6279"><span class="linenos">6279</span></a> <span class="c1"># the STRING_AGG call is parsed like in MySQL / SQLite and can thus be transpiled more easily to them.</span>
</span><span id="Parser-6280"><a href="#Parser-6280"><span class="linenos">6280</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
</span><span id="Parser-6281"><a href="#Parser-6281"><span class="linenos">6281</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-6282"><a href="#Parser-6282"><span class="linenos">6282</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
</span><span id="Parser-6283"><a href="#Parser-6283"><span class="linenos">6283</span></a>
</span><span id="Parser-6284"><a href="#Parser-6284"><span class="linenos">6284</span></a> <span class="c1"># The corresponding match_r_paren will be called in parse_function (caller)</span>
</span><span id="Parser-6285"><a href="#Parser-6285"><span class="linenos">6285</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="Parser-6286"><a href="#Parser-6286"><span class="linenos">6286</span></a>
</span><span id="Parser-6287"><a href="#Parser-6287"><span class="linenos">6287</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6288"><a href="#Parser-6288"><span class="linenos">6288</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span>
</span><span id="Parser-6289"><a href="#Parser-6289"><span class="linenos">6289</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</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><span id="Parser-6290"><a href="#Parser-6290"><span class="linenos">6290</span></a> <span class="n">separator</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="Parser-6291"><a href="#Parser-6291"><span class="linenos">6291</span></a> <span class="n">on_overflow</span><span class="o">=</span><span class="n">on_overflow</span><span class="p">,</span>
</span><span id="Parser-6292"><a href="#Parser-6292"><span class="linenos">6292</span></a> <span class="p">)</span>
</span><span id="Parser-6293"><a href="#Parser-6293"><span class="linenos">6293</span></a>
</span><span id="Parser-6294"><a href="#Parser-6294"><span class="linenos">6294</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_convert</span><span class="p">(</span>
</span><span id="Parser-6295"><a href="#Parser-6295"><span class="linenos">6295</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">safe</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="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6296"><a href="#Parser-6296"><span class="linenos">6296</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="Parser-6297"><a href="#Parser-6297"><span class="linenos">6297</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-6298"><a href="#Parser-6298"><span class="linenos">6298</span></a>
</span><span id="Parser-6299"><a href="#Parser-6299"><span class="linenos">6299</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
</span><span id="Parser-6300"><a href="#Parser-6300"><span class="linenos">6300</span></a> <span class="n">to</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 class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6301"><a href="#Parser-6301"><span class="linenos">6301</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
</span><span id="Parser-6302"><a href="#Parser-6302"><span class="linenos">6302</span></a> <span class="p">)</span>
</span><span id="Parser-6303"><a href="#Parser-6303"><span class="linenos">6303</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="Parser-6304"><a href="#Parser-6304"><span class="linenos">6304</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="Parser-6305"><a href="#Parser-6305"><span class="linenos">6305</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6306"><a href="#Parser-6306"><span class="linenos">6306</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6307"><a href="#Parser-6307"><span class="linenos">6307</span></a>
</span><span id="Parser-6308"><a href="#Parser-6308"><span class="linenos">6308</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</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">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
</span><span id="Parser-6309"><a href="#Parser-6309"><span class="linenos">6309</span></a>
</span><span id="Parser-6310"><a href="#Parser-6310"><span class="linenos">6310</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_xml_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">:</span>
</span><span id="Parser-6311"><a href="#Parser-6311"><span class="linenos">6311</span></a> <span class="n">namespaces</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6312"><a href="#Parser-6312"><span class="linenos">6312</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6313"><a href="#Parser-6313"><span class="linenos">6313</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6314"><a href="#Parser-6314"><span class="linenos">6314</span></a>
</span><span id="Parser-6315"><a href="#Parser-6315"><span class="linenos">6315</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;XMLNAMESPACES&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">):</span>
</span><span id="Parser-6316"><a href="#Parser-6316"><span class="linenos">6316</span></a> <span class="n">namespaces</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_xml_namespace</span><span class="p">()</span>
</span><span id="Parser-6317"><a href="#Parser-6317"><span class="linenos">6317</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="s2">&quot;,&quot;</span><span class="p">)</span>
</span><span id="Parser-6318"><a href="#Parser-6318"><span class="linenos">6318</span></a>
</span><span id="Parser-6319"><a href="#Parser-6319"><span class="linenos">6319</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-6320"><a href="#Parser-6320"><span class="linenos">6320</span></a>
</span><span id="Parser-6321"><a href="#Parser-6321"><span class="linenos">6321</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PASSING&quot;</span><span class="p">):</span>
</span><span id="Parser-6322"><a href="#Parser-6322"><span class="linenos">6322</span></a> <span class="c1"># The BY VALUE keywords are optional and are provided for semantic clarity</span>
</span><span id="Parser-6323"><a href="#Parser-6323"><span class="linenos">6323</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
</span><span id="Parser-6324"><a href="#Parser-6324"><span class="linenos">6324</span></a> <span class="n">passing</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="Parser-6325"><a href="#Parser-6325"><span class="linenos">6325</span></a>
</span><span id="Parser-6326"><a href="#Parser-6326"><span class="linenos">6326</span></a> <span class="n">by_ref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">,</span> <span class="s2">&quot;SEQUENCE&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;REF&quot;</span><span class="p">)</span>
</span><span id="Parser-6327"><a href="#Parser-6327"><span class="linenos">6327</span></a>
</span><span id="Parser-6328"><a href="#Parser-6328"><span class="linenos">6328</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">):</span>
</span><span id="Parser-6329"><a href="#Parser-6329"><span class="linenos">6329</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">)</span>
</span><span id="Parser-6330"><a href="#Parser-6330"><span class="linenos">6330</span></a>
</span><span id="Parser-6331"><a href="#Parser-6331"><span class="linenos">6331</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6332"><a href="#Parser-6332"><span class="linenos">6332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">XMLTable</span><span class="p">,</span>
</span><span id="Parser-6333"><a href="#Parser-6333"><span class="linenos">6333</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-6334"><a href="#Parser-6334"><span class="linenos">6334</span></a> <span class="n">namespaces</span><span class="o">=</span><span class="n">namespaces</span><span class="p">,</span>
</span><span id="Parser-6335"><a href="#Parser-6335"><span class="linenos">6335</span></a> <span class="n">passing</span><span class="o">=</span><span class="n">passing</span><span class="p">,</span>
</span><span id="Parser-6336"><a href="#Parser-6336"><span class="linenos">6336</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
</span><span id="Parser-6337"><a href="#Parser-6337"><span class="linenos">6337</span></a> <span class="n">by_ref</span><span class="o">=</span><span class="n">by_ref</span><span class="p">,</span>
</span><span id="Parser-6338"><a href="#Parser-6338"><span class="linenos">6338</span></a> <span class="p">)</span>
</span><span id="Parser-6339"><a href="#Parser-6339"><span class="linenos">6339</span></a>
</span><span id="Parser-6340"><a href="#Parser-6340"><span class="linenos">6340</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_xml_namespace</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">XMLNamespace</span><span class="p">]:</span>
</span><span id="Parser-6341"><a href="#Parser-6341"><span class="linenos">6341</span></a> <span class="n">namespaces</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-6342"><a href="#Parser-6342"><span class="linenos">6342</span></a>
</span><span id="Parser-6343"><a href="#Parser-6343"><span class="linenos">6343</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-6344"><a href="#Parser-6344"><span class="linenos">6344</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="Parser-6345"><a href="#Parser-6345"><span class="linenos">6345</span></a> <span class="n">uri</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-6346"><a href="#Parser-6346"><span class="linenos">6346</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6347"><a href="#Parser-6347"><span class="linenos">6347</span></a> <span class="n">uri</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
</span><span id="Parser-6348"><a href="#Parser-6348"><span class="linenos">6348</span></a> <span class="n">namespaces</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">XMLNamespace</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">uri</span><span class="p">))</span>
</span><span id="Parser-6349"><a href="#Parser-6349"><span class="linenos">6349</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="Parser-6350"><a href="#Parser-6350"><span class="linenos">6350</span></a> <span class="k">break</span>
</span><span id="Parser-6351"><a href="#Parser-6351"><span class="linenos">6351</span></a>
</span><span id="Parser-6352"><a href="#Parser-6352"><span class="linenos">6352</span></a> <span class="k">return</span> <span class="n">namespaces</span>
</span><span id="Parser-6353"><a href="#Parser-6353"><span class="linenos">6353</span></a>
</span><span id="Parser-6354"><a href="#Parser-6354"><span class="linenos">6354</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_decode</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
</span><span id="Parser-6355"><a href="#Parser-6355"><span class="linenos">6355</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser-6356"><a href="#Parser-6356"><span class="linenos">6356</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
</span><span id="Parser-6357"><a href="#Parser-6357"><span class="linenos">6357</span></a>
</span><span id="Parser-6358"><a href="#Parser-6358"><span class="linenos">6358</span></a><span class="sd"> - DECODE(bin, charset)</span>
</span><span id="Parser-6359"><a href="#Parser-6359"><span class="linenos">6359</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
</span><span id="Parser-6360"><a href="#Parser-6360"><span class="linenos">6360</span></a>
</span><span id="Parser-6361"><a href="#Parser-6361"><span class="linenos">6361</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
</span><span id="Parser-6362"><a href="#Parser-6362"><span class="linenos">6362</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
</span><span id="Parser-6363"><a href="#Parser-6363"><span class="linenos">6363</span></a><span class="sd"> instead of relying on pattern matching.</span>
</span><span id="Parser-6364"><a href="#Parser-6364"><span class="linenos">6364</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser-6365"><a href="#Parser-6365"><span class="linenos">6365</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">)</span>
</span><span id="Parser-6366"><a href="#Parser-6366"><span class="linenos">6366</span></a>
</span><span id="Parser-6367"><a href="#Parser-6367"><span class="linenos">6367</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">3</span><span class="p">:</span>
</span><span id="Parser-6368"><a href="#Parser-6368"><span class="linenos">6368</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</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">charset</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="Parser-6369"><a href="#Parser-6369"><span class="linenos">6369</span></a>
</span><span id="Parser-6370"><a href="#Parser-6370"><span class="linenos">6370</span></a> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">args</span>
</span><span id="Parser-6371"><a href="#Parser-6371"><span class="linenos">6371</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="Parser-6372"><a href="#Parser-6372"><span class="linenos">6372</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-6373"><a href="#Parser-6373"><span class="linenos">6373</span></a>
</span><span id="Parser-6374"><a href="#Parser-6374"><span class="linenos">6374</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-6375"><a href="#Parser-6375"><span class="linenos">6375</span></a> <span class="k">for</span> <span class="n">search</span><span class="p">,</span> <span class="n">result</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">expressions</span><span class="p">[::</span><span class="mi">2</span><span class="p">],</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">::</span><span class="mi">2</span><span class="p">]):</span>
</span><span id="Parser-6376"><a href="#Parser-6376"><span class="linenos">6376</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">search</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
</span><span id="Parser-6377"><a href="#Parser-6377"><span class="linenos">6377</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-6378"><a href="#Parser-6378"><span class="linenos">6378</span></a>
</span><span id="Parser-6379"><a href="#Parser-6379"><span class="linenos">6379</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
</span><span id="Parser-6380"><a href="#Parser-6380"><span class="linenos">6380</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="Parser-6381"><a href="#Parser-6381"><span class="linenos">6381</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</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">EQ</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">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
</span><span id="Parser-6382"><a href="#Parser-6382"><span class="linenos">6382</span></a> <span class="p">)</span>
</span><span id="Parser-6383"><a href="#Parser-6383"><span class="linenos">6383</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">):</span>
</span><span id="Parser-6384"><a href="#Parser-6384"><span class="linenos">6384</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="Parser-6385"><a href="#Parser-6385"><span class="linenos">6385</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</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">expression</span><span class="o">.</span><span class="n">copy</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 class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
</span><span id="Parser-6386"><a href="#Parser-6386"><span class="linenos">6386</span></a> <span class="p">)</span>
</span><span id="Parser-6387"><a href="#Parser-6387"><span class="linenos">6387</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6388"><a href="#Parser-6388"><span class="linenos">6388</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
</span><span id="Parser-6389"><a href="#Parser-6389"><span class="linenos">6389</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</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">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span>
</span><span id="Parser-6390"><a href="#Parser-6390"><span class="linenos">6390</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
</span><span id="Parser-6391"><a href="#Parser-6391"><span class="linenos">6391</span></a> <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">expression</span><span class="o">.</span><span class="n">copy</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="Parser-6392"><a href="#Parser-6392"><span class="linenos">6392</span></a> <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">search</span><span class="o">.</span><span class="n">copy</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="Parser-6393"><a href="#Parser-6393"><span class="linenos">6393</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-6394"><a href="#Parser-6394"><span class="linenos">6394</span></a> <span class="p">),</span>
</span><span id="Parser-6395"><a href="#Parser-6395"><span class="linenos">6395</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-6396"><a href="#Parser-6396"><span class="linenos">6396</span></a> <span class="p">)</span>
</span><span id="Parser-6397"><a href="#Parser-6397"><span class="linenos">6397</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</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="n">this</span><span class="o">=</span><span class="n">cond</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
</span><span id="Parser-6398"><a href="#Parser-6398"><span class="linenos">6398</span></a>
</span><span id="Parser-6399"><a href="#Parser-6399"><span class="linenos">6399</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
</span><span id="Parser-6400"><a href="#Parser-6400"><span class="linenos">6400</span></a>
</span><span id="Parser-6401"><a href="#Parser-6401"><span class="linenos">6401</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_key_value</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">]:</span>
</span><span id="Parser-6402"><a href="#Parser-6402"><span class="linenos">6402</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
</span><span id="Parser-6403"><a href="#Parser-6403"><span class="linenos">6403</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-6404"><a href="#Parser-6404"><span class="linenos">6404</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_SEPARATOR_TOKENS</span><span class="p">)</span>
</span><span id="Parser-6405"><a href="#Parser-6405"><span class="linenos">6405</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
</span><span id="Parser-6406"><a href="#Parser-6406"><span class="linenos">6406</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-6407"><a href="#Parser-6407"><span class="linenos">6407</span></a>
</span><span id="Parser-6408"><a href="#Parser-6408"><span class="linenos">6408</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
</span><span id="Parser-6409"><a href="#Parser-6409"><span class="linenos">6409</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-6410"><a href="#Parser-6410"><span class="linenos">6410</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
</span><span id="Parser-6411"><a href="#Parser-6411"><span class="linenos">6411</span></a>
</span><span id="Parser-6412"><a href="#Parser-6412"><span class="linenos">6412</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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="Parser-6413"><a href="#Parser-6413"><span class="linenos">6413</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">):</span>
</span><span id="Parser-6414"><a href="#Parser-6414"><span class="linenos">6414</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-6415"><a href="#Parser-6415"><span class="linenos">6415</span></a>
</span><span id="Parser-6416"><a href="#Parser-6416"><span class="linenos">6416</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FormatJson</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="Parser-6417"><a href="#Parser-6417"><span class="linenos">6417</span></a>
</span><span id="Parser-6418"><a href="#Parser-6418"><span class="linenos">6418</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_on_condition</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">OnCondition</span><span class="p">]:</span>
</span><span id="Parser-6419"><a href="#Parser-6419"><span class="linenos">6419</span></a> <span class="c1"># MySQL uses &quot;X ON EMPTY Y ON ERROR&quot; (e.g. JSON_VALUE) while Oracle uses the opposite (e.g. JSON_EXISTS)</span>
</span><span id="Parser-6420"><a href="#Parser-6420"><span class="linenos">6420</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ON_CONDITION_EMPTY_BEFORE_ERROR</span><span class="p">:</span>
</span><span id="Parser-6421"><a href="#Parser-6421"><span class="linenos">6421</span></a> <span class="n">empty</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ON_CONDITION_TOKENS</span><span class="p">)</span>
</span><span id="Parser-6422"><a href="#Parser-6422"><span class="linenos">6422</span></a> <span class="n">error</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ON_CONDITION_TOKENS</span><span class="p">)</span>
</span><span id="Parser-6423"><a href="#Parser-6423"><span class="linenos">6423</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6424"><a href="#Parser-6424"><span class="linenos">6424</span></a> <span class="n">error</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ON_CONDITION_TOKENS</span><span class="p">)</span>
</span><span id="Parser-6425"><a href="#Parser-6425"><span class="linenos">6425</span></a> <span class="n">empty</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ON_CONDITION_TOKENS</span><span class="p">)</span>
</span><span id="Parser-6426"><a href="#Parser-6426"><span class="linenos">6426</span></a>
</span><span id="Parser-6427"><a href="#Parser-6427"><span class="linenos">6427</span></a> <span class="n">null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">ON_CONDITION_TOKENS</span><span class="p">)</span>
</span><span id="Parser-6428"><a href="#Parser-6428"><span class="linenos">6428</span></a>
</span><span id="Parser-6429"><a href="#Parser-6429"><span class="linenos">6429</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">empty</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">error</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">null</span><span class="p">:</span>
</span><span id="Parser-6430"><a href="#Parser-6430"><span class="linenos">6430</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-6431"><a href="#Parser-6431"><span class="linenos">6431</span></a>
</span><span id="Parser-6432"><a href="#Parser-6432"><span class="linenos">6432</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6433"><a href="#Parser-6433"><span class="linenos">6433</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCondition</span><span class="p">,</span>
</span><span id="Parser-6434"><a href="#Parser-6434"><span class="linenos">6434</span></a> <span class="n">empty</span><span class="o">=</span><span class="n">empty</span><span class="p">,</span>
</span><span id="Parser-6435"><a href="#Parser-6435"><span class="linenos">6435</span></a> <span class="n">error</span><span class="o">=</span><span class="n">error</span><span class="p">,</span>
</span><span id="Parser-6436"><a href="#Parser-6436"><span class="linenos">6436</span></a> <span class="n">null</span><span class="o">=</span><span class="n">null</span><span class="p">,</span>
</span><span id="Parser-6437"><a href="#Parser-6437"><span class="linenos">6437</span></a> <span class="p">)</span>
</span><span id="Parser-6438"><a href="#Parser-6438"><span class="linenos">6438</span></a>
</span><span id="Parser-6439"><a href="#Parser-6439"><span class="linenos">6439</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_on_handling</span><span class="p">(</span>
</span><span id="Parser-6440"><a href="#Parser-6440"><span class="linenos">6440</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">on</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">values</span><span class="p">:</span> <span class="nb">str</span>
</span><span id="Parser-6441"><a href="#Parser-6441"><span class="linenos">6441</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="nb">str</span><span class="p">]</span> <span class="o">|</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="Parser-6442"><a href="#Parser-6442"><span class="linenos">6442</span></a> <span class="c1"># Parses the &quot;X ON Y&quot; or &quot;DEFAULT &lt;expr&gt; ON Y syntax, e.g. NULL ON NULL (Oracle, T-SQL, MySQL)</span>
</span><span id="Parser-6443"><a href="#Parser-6443"><span class="linenos">6443</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
</span><span id="Parser-6444"><a href="#Parser-6444"><span class="linenos">6444</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="n">on</span><span class="p">):</span>
</span><span id="Parser-6445"><a href="#Parser-6445"><span class="linenos">6445</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2"> ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Parser-6446"><a href="#Parser-6446"><span class="linenos">6446</span></a>
</span><span id="Parser-6447"><a href="#Parser-6447"><span class="linenos">6447</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-6448"><a href="#Parser-6448"><span class="linenos">6448</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="Parser-6449"><a href="#Parser-6449"><span class="linenos">6449</span></a> <span class="n">default_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-6450"><a href="#Parser-6450"><span class="linenos">6450</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="n">on</span><span class="p">):</span>
</span><span id="Parser-6451"><a href="#Parser-6451"><span class="linenos">6451</span></a> <span class="k">return</span> <span class="n">default_value</span>
</span><span id="Parser-6452"><a href="#Parser-6452"><span class="linenos">6452</span></a>
</span><span id="Parser-6453"><a href="#Parser-6453"><span class="linenos">6453</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-6454"><a href="#Parser-6454"><span class="linenos">6454</span></a>
</span><span id="Parser-6455"><a href="#Parser-6455"><span class="linenos">6455</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-6456"><a href="#Parser-6456"><span class="linenos">6456</span></a>
</span><span id="Parser-6457"><a href="#Parser-6457"><span class="linenos">6457</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
</span><span id="Parser-6458"><a href="#Parser-6458"><span class="linenos">6458</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">False</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">:</span> <span class="o">...</span>
</span><span id="Parser-6459"><a href="#Parser-6459"><span class="linenos">6459</span></a>
</span><span id="Parser-6460"><a href="#Parser-6460"><span class="linenos">6460</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
</span><span id="Parser-6461"><a href="#Parser-6461"><span class="linenos">6461</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">True</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">:</span> <span class="o">...</span>
</span><span id="Parser-6462"><a href="#Parser-6462"><span class="linenos">6462</span></a>
</span><span id="Parser-6463"><a href="#Parser-6463"><span class="linenos">6463</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-6464"><a href="#Parser-6464"><span class="linenos">6464</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
</span><span id="Parser-6465"><a href="#Parser-6465"><span class="linenos">6465</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-6466"><a href="#Parser-6466"><span class="linenos">6466</span></a> <span class="p">[</span><span class="n">star</span><span class="p">]</span>
</span><span id="Parser-6467"><a href="#Parser-6467"><span class="linenos">6467</span></a> <span class="k">if</span> <span class="n">star</span>
</span><span id="Parser-6468"><a href="#Parser-6468"><span class="linenos">6468</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</span><span class="p">()))</span>
</span><span id="Parser-6469"><a href="#Parser-6469"><span class="linenos">6469</span></a> <span class="p">)</span>
</span><span id="Parser-6470"><a href="#Parser-6470"><span class="linenos">6470</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;ABSENT&quot;</span><span class="p">)</span>
</span><span id="Parser-6471"><a href="#Parser-6471"><span class="linenos">6471</span></a>
</span><span id="Parser-6472"><a href="#Parser-6472"><span class="linenos">6472</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6473"><a href="#Parser-6473"><span class="linenos">6473</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
</span><span id="Parser-6474"><a href="#Parser-6474"><span class="linenos">6474</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-6475"><a href="#Parser-6475"><span class="linenos">6475</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
</span><span id="Parser-6476"><a href="#Parser-6476"><span class="linenos">6476</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-6477"><a href="#Parser-6477"><span class="linenos">6477</span></a>
</span><span id="Parser-6478"><a href="#Parser-6478"><span class="linenos">6478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEYS&quot;</span><span class="p">)</span>
</span><span id="Parser-6479"><a href="#Parser-6479"><span class="linenos">6479</span></a>
</span><span id="Parser-6480"><a href="#Parser-6480"><span class="linenos">6480</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span>
</span><span id="Parser-6481"><a href="#Parser-6481"><span class="linenos">6481</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="Parser-6482"><a href="#Parser-6482"><span class="linenos">6482</span></a> <span class="p">)</span>
</span><span id="Parser-6483"><a href="#Parser-6483"><span class="linenos">6483</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENCODING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
</span><span id="Parser-6484"><a href="#Parser-6484"><span class="linenos">6484</span></a>
</span><span id="Parser-6485"><a href="#Parser-6485"><span class="linenos">6485</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6486"><a href="#Parser-6486"><span class="linenos">6486</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span> <span class="k">if</span> <span class="n">agg</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
</span><span id="Parser-6487"><a href="#Parser-6487"><span class="linenos">6487</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-6488"><a href="#Parser-6488"><span class="linenos">6488</span></a> <span class="n">null_handling</span><span class="o">=</span><span class="n">null_handling</span><span class="p">,</span>
</span><span id="Parser-6489"><a href="#Parser-6489"><span class="linenos">6489</span></a> <span class="n">unique_keys</span><span class="o">=</span><span class="n">unique_keys</span><span class="p">,</span>
</span><span id="Parser-6490"><a href="#Parser-6490"><span class="linenos">6490</span></a> <span class="n">return_type</span><span class="o">=</span><span class="n">return_type</span><span class="p">,</span>
</span><span id="Parser-6491"><a href="#Parser-6491"><span class="linenos">6491</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
</span><span id="Parser-6492"><a href="#Parser-6492"><span class="linenos">6492</span></a> <span class="p">)</span>
</span><span id="Parser-6493"><a href="#Parser-6493"><span class="linenos">6493</span></a>
</span><span id="Parser-6494"><a href="#Parser-6494"><span class="linenos">6494</span></a> <span class="c1"># Note: this is currently incomplete; it only implements the &quot;JSON_value_column&quot; part</span>
</span><span id="Parser-6495"><a href="#Parser-6495"><span class="linenos">6495</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">:</span>
</span><span id="Parser-6496"><a href="#Parser-6496"><span class="linenos">6496</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NESTED&quot;</span><span class="p">):</span>
</span><span id="Parser-6497"><a href="#Parser-6497"><span class="linenos">6497</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-6498"><a href="#Parser-6498"><span class="linenos">6498</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-6499"><a href="#Parser-6499"><span class="linenos">6499</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6500"><a href="#Parser-6500"><span class="linenos">6500</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6501"><a href="#Parser-6501"><span class="linenos">6501</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6502"><a href="#Parser-6502"><span class="linenos">6502</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6503"><a href="#Parser-6503"><span class="linenos">6503</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-6504"><a href="#Parser-6504"><span class="linenos">6504</span></a>
</span><span id="Parser-6505"><a href="#Parser-6505"><span class="linenos">6505</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATH&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-6506"><a href="#Parser-6506"><span class="linenos">6506</span></a> <span class="n">nested_schema</span> <span class="o">=</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
</span><span id="Parser-6507"><a href="#Parser-6507"><span class="linenos">6507</span></a>
</span><span id="Parser-6508"><a href="#Parser-6508"><span class="linenos">6508</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6509"><a href="#Parser-6509"><span class="linenos">6509</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">,</span>
</span><span id="Parser-6510"><a href="#Parser-6510"><span class="linenos">6510</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-6511"><a href="#Parser-6511"><span class="linenos">6511</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="Parser-6512"><a href="#Parser-6512"><span class="linenos">6512</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
</span><span id="Parser-6513"><a href="#Parser-6513"><span class="linenos">6513</span></a> <span class="n">nested_schema</span><span class="o">=</span><span class="n">nested_schema</span><span class="p">,</span>
</span><span id="Parser-6514"><a href="#Parser-6514"><span class="linenos">6514</span></a> <span class="p">)</span>
</span><span id="Parser-6515"><a href="#Parser-6515"><span class="linenos">6515</span></a>
</span><span id="Parser-6516"><a href="#Parser-6516"><span class="linenos">6516</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">:</span>
</span><span id="Parser-6517"><a href="#Parser-6517"><span class="linenos">6517</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span>
</span><span id="Parser-6518"><a href="#Parser-6518"><span class="linenos">6518</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6519"><a href="#Parser-6519"><span class="linenos">6519</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">,</span>
</span><span id="Parser-6520"><a href="#Parser-6520"><span class="linenos">6520</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_column_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
</span><span id="Parser-6521"><a href="#Parser-6521"><span class="linenos">6521</span></a> <span class="p">)</span>
</span><span id="Parser-6522"><a href="#Parser-6522"><span class="linenos">6522</span></a>
</span><span id="Parser-6523"><a href="#Parser-6523"><span class="linenos">6523</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_json_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">:</span>
</span><span id="Parser-6524"><a href="#Parser-6524"><span class="linenos">6524</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-6525"><a href="#Parser-6525"><span class="linenos">6525</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-6526"><a href="#Parser-6526"><span class="linenos">6526</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
</span><span id="Parser-6527"><a href="#Parser-6527"><span class="linenos">6527</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
</span><span id="Parser-6528"><a href="#Parser-6528"><span class="linenos">6528</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
</span><span id="Parser-6529"><a href="#Parser-6529"><span class="linenos">6529</span></a>
</span><span id="Parser-6530"><a href="#Parser-6530"><span class="linenos">6530</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">(</span>
</span><span id="Parser-6531"><a href="#Parser-6531"><span class="linenos">6531</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-6532"><a href="#Parser-6532"><span class="linenos">6532</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
</span><span id="Parser-6533"><a href="#Parser-6533"><span class="linenos">6533</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
</span><span id="Parser-6534"><a href="#Parser-6534"><span class="linenos">6534</span></a> <span class="n">error_handling</span><span class="o">=</span><span class="n">error_handling</span><span class="p">,</span>
</span><span id="Parser-6535"><a href="#Parser-6535"><span class="linenos">6535</span></a> <span class="n">empty_handling</span><span class="o">=</span><span class="n">empty_handling</span><span class="p">,</span>
</span><span id="Parser-6536"><a href="#Parser-6536"><span class="linenos">6536</span></a> <span class="p">)</span>
</span><span id="Parser-6537"><a href="#Parser-6537"><span class="linenos">6537</span></a>
</span><span id="Parser-6538"><a href="#Parser-6538"><span class="linenos">6538</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_match_against</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">:</span>
</span><span id="Parser-6539"><a href="#Parser-6539"><span class="linenos">6539</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="Parser-6540"><a href="#Parser-6540"><span class="linenos">6540</span></a>
</span><span id="Parser-6541"><a href="#Parser-6541"><span class="linenos">6541</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="s2">&quot;AGAINST&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">)</span>
</span><span id="Parser-6542"><a href="#Parser-6542"><span class="linenos">6542</span></a>
</span><span id="Parser-6543"><a href="#Parser-6543"><span class="linenos">6543</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-6544"><a href="#Parser-6544"><span class="linenos">6544</span></a>
</span><span id="Parser-6545"><a href="#Parser-6545"><span class="linenos">6545</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;NATURAL&quot;</span><span class="p">,</span> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
</span><span id="Parser-6546"><a href="#Parser-6546"><span class="linenos">6546</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN NATURAL LANGUAGE MODE&quot;</span>
</span><span id="Parser-6547"><a href="#Parser-6547"><span class="linenos">6547</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
</span><span id="Parser-6548"><a href="#Parser-6548"><span class="linenos">6548</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2"> WITH QUERY EXPANSION&quot;</span>
</span><span id="Parser-6549"><a href="#Parser-6549"><span class="linenos">6549</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
</span><span id="Parser-6550"><a href="#Parser-6550"><span class="linenos">6550</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
</span><span id="Parser-6551"><a href="#Parser-6551"><span class="linenos">6551</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
</span><span id="Parser-6552"><a href="#Parser-6552"><span class="linenos">6552</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
</span><span id="Parser-6553"><a href="#Parser-6553"><span class="linenos">6553</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6554"><a href="#Parser-6554"><span class="linenos">6554</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6555"><a href="#Parser-6555"><span class="linenos">6555</span></a>
</span><span id="Parser-6556"><a href="#Parser-6556"><span class="linenos">6556</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6557"><a href="#Parser-6557"><span class="linenos">6557</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">modifier</span><span class="o">=</span><span class="n">modifier</span>
</span><span id="Parser-6558"><a href="#Parser-6558"><span class="linenos">6558</span></a> <span class="p">)</span>
</span><span id="Parser-6559"><a href="#Parser-6559"><span class="linenos">6559</span></a>
</span><span id="Parser-6560"><a href="#Parser-6560"><span class="linenos">6560</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
</span><span id="Parser-6561"><a href="#Parser-6561"><span class="linenos">6561</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_open_json</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">:</span>
</span><span id="Parser-6562"><a href="#Parser-6562"><span class="linenos">6562</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-6563"><a href="#Parser-6563"><span class="linenos">6563</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-6564"><a href="#Parser-6564"><span class="linenos">6564</span></a>
</span><span id="Parser-6565"><a href="#Parser-6565"><span class="linenos">6565</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
</span><span id="Parser-6566"><a href="#Parser-6566"><span class="linenos">6566</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-6567"><a href="#Parser-6567"><span class="linenos">6567</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
</span><span id="Parser-6568"><a href="#Parser-6568"><span class="linenos">6568</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
</span><span id="Parser-6569"><a href="#Parser-6569"><span class="linenos">6569</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
</span><span id="Parser-6570"><a href="#Parser-6570"><span class="linenos">6570</span></a>
</span><span id="Parser-6571"><a href="#Parser-6571"><span class="linenos">6571</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6572"><a href="#Parser-6572"><span class="linenos">6572</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
</span><span id="Parser-6573"><a href="#Parser-6573"><span class="linenos">6573</span></a> <span class="p">)</span>
</span><span id="Parser-6574"><a href="#Parser-6574"><span class="linenos">6574</span></a>
</span><span id="Parser-6575"><a href="#Parser-6575"><span class="linenos">6575</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6576"><a href="#Parser-6576"><span class="linenos">6576</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
</span><span id="Parser-6577"><a href="#Parser-6577"><span class="linenos">6577</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="Parser-6578"><a href="#Parser-6578"><span class="linenos">6578</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_open_json_column_def</span><span class="p">)</span>
</span><span id="Parser-6579"><a href="#Parser-6579"><span class="linenos">6579</span></a>
</span><span id="Parser-6580"><a href="#Parser-6580"><span class="linenos">6580</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</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">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-6581"><a href="#Parser-6581"><span class="linenos">6581</span></a>
</span><span id="Parser-6582"><a href="#Parser-6582"><span class="linenos">6582</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</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">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
</span><span id="Parser-6583"><a href="#Parser-6583"><span class="linenos">6583</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
</span><span id="Parser-6584"><a href="#Parser-6584"><span class="linenos">6584</span></a>
</span><span id="Parser-6585"><a href="#Parser-6585"><span class="linenos">6585</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
</span><span id="Parser-6586"><a href="#Parser-6586"><span class="linenos">6586</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6587"><a href="#Parser-6587"><span class="linenos">6587</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</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><span id="Parser-6588"><a href="#Parser-6588"><span class="linenos">6588</span></a> <span class="p">)</span>
</span><span id="Parser-6589"><a href="#Parser-6589"><span class="linenos">6589</span></a>
</span><span id="Parser-6590"><a href="#Parser-6590"><span class="linenos">6590</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
</span><span id="Parser-6591"><a href="#Parser-6591"><span class="linenos">6591</span></a> <span class="n">haystack</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="Parser-6592"><a href="#Parser-6592"><span class="linenos">6592</span></a> <span class="n">needle</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="Parser-6593"><a href="#Parser-6593"><span class="linenos">6593</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6594"><a href="#Parser-6594"><span class="linenos">6594</span></a> <span class="n">haystack</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="Parser-6595"><a href="#Parser-6595"><span class="linenos">6595</span></a> <span class="n">needle</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="Parser-6596"><a href="#Parser-6596"><span class="linenos">6596</span></a>
</span><span id="Parser-6597"><a href="#Parser-6597"><span class="linenos">6597</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6598"><a href="#Parser-6598"><span class="linenos">6598</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</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="Parser-6599"><a href="#Parser-6599"><span class="linenos">6599</span></a> <span class="p">)</span>
</span><span id="Parser-6600"><a href="#Parser-6600"><span class="linenos">6600</span></a>
</span><span id="Parser-6601"><a href="#Parser-6601"><span class="linenos">6601</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_predict</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">:</span>
</span><span id="Parser-6602"><a href="#Parser-6602"><span class="linenos">6602</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MODEL&quot;</span><span class="p">)</span>
</span><span id="Parser-6603"><a href="#Parser-6603"><span class="linenos">6603</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="Parser-6604"><a href="#Parser-6604"><span class="linenos">6604</span></a>
</span><span id="Parser-6605"><a href="#Parser-6605"><span class="linenos">6605</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="Parser-6606"><a href="#Parser-6606"><span class="linenos">6606</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">)</span>
</span><span id="Parser-6607"><a href="#Parser-6607"><span class="linenos">6607</span></a>
</span><span id="Parser-6608"><a href="#Parser-6608"><span class="linenos">6608</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6609"><a href="#Parser-6609"><span class="linenos">6609</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">,</span>
</span><span id="Parser-6610"><a href="#Parser-6610"><span class="linenos">6610</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-6611"><a href="#Parser-6611"><span class="linenos">6611</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
</span><span id="Parser-6612"><a href="#Parser-6612"><span class="linenos">6612</span></a> <span class="n">params_struct</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="Parser-6613"><a href="#Parser-6613"><span class="linenos">6613</span></a> <span class="p">)</span>
</span><span id="Parser-6614"><a href="#Parser-6614"><span class="linenos">6614</span></a>
</span><span id="Parser-6615"><a href="#Parser-6615"><span class="linenos">6615</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
</span><span id="Parser-6616"><a href="#Parser-6616"><span class="linenos">6616</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">)</span>
</span><span id="Parser-6617"><a href="#Parser-6617"><span class="linenos">6617</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">func_name</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="Parser-6618"><a href="#Parser-6618"><span class="linenos">6618</span></a>
</span><span id="Parser-6619"><a href="#Parser-6619"><span class="linenos">6619</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_substring</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span>
</span><span id="Parser-6620"><a href="#Parser-6620"><span class="linenos">6620</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
</span><span id="Parser-6621"><a href="#Parser-6621"><span class="linenos">6621</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
</span><span id="Parser-6622"><a href="#Parser-6622"><span class="linenos">6622</span></a>
</span><span id="Parser-6623"><a href="#Parser-6623"><span class="linenos">6623</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">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 class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">))</span>
</span><span id="Parser-6624"><a href="#Parser-6624"><span class="linenos">6624</span></a>
</span><span id="Parser-6625"><a href="#Parser-6625"><span class="linenos">6625</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
</span><span id="Parser-6626"><a href="#Parser-6626"><span class="linenos">6626</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">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-6627"><a href="#Parser-6627"><span class="linenos">6627</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
</span><span id="Parser-6628"><a href="#Parser-6628"><span class="linenos">6628</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">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Parser-6629"><a href="#Parser-6629"><span class="linenos">6629</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
</span><span id="Parser-6630"><a href="#Parser-6630"><span class="linenos">6630</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">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-6631"><a href="#Parser-6631"><span class="linenos">6631</span></a>
</span><span id="Parser-6632"><a href="#Parser-6632"><span class="linenos">6632</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
</span><span id="Parser-6633"><a href="#Parser-6633"><span class="linenos">6633</span></a>
</span><span id="Parser-6634"><a href="#Parser-6634"><span class="linenos">6634</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_trim</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span>
</span><span id="Parser-6635"><a href="#Parser-6635"><span class="linenos">6635</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
</span><span id="Parser-6636"><a href="#Parser-6636"><span class="linenos">6636</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
</span><span id="Parser-6637"><a href="#Parser-6637"><span class="linenos">6637</span></a>
</span><span id="Parser-6638"><a href="#Parser-6638"><span class="linenos">6638</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6639"><a href="#Parser-6639"><span class="linenos">6639</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6640"><a href="#Parser-6640"><span class="linenos">6640</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6641"><a href="#Parser-6641"><span class="linenos">6641</span></a>
</span><span id="Parser-6642"><a href="#Parser-6642"><span class="linenos">6642</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
</span><span id="Parser-6643"><a href="#Parser-6643"><span class="linenos">6643</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-6644"><a href="#Parser-6644"><span class="linenos">6644</span></a>
</span><span id="Parser-6645"><a href="#Parser-6645"><span class="linenos">6645</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-6646"><a href="#Parser-6646"><span class="linenos">6646</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)):</span>
</span><span id="Parser-6647"><a href="#Parser-6647"><span class="linenos">6647</span></a> <span class="n">invert_order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRIM_PATTERN_FIRST</span>
</span><span id="Parser-6648"><a href="#Parser-6648"><span class="linenos">6648</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-6649"><a href="#Parser-6649"><span class="linenos">6649</span></a>
</span><span id="Parser-6650"><a href="#Parser-6650"><span class="linenos">6650</span></a> <span class="k">if</span> <span class="n">invert_order</span><span class="p">:</span>
</span><span id="Parser-6651"><a href="#Parser-6651"><span class="linenos">6651</span></a> <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">this</span>
</span><span id="Parser-6652"><a href="#Parser-6652"><span class="linenos">6652</span></a>
</span><span id="Parser-6653"><a href="#Parser-6653"><span class="linenos">6653</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">):</span>
</span><span id="Parser-6654"><a href="#Parser-6654"><span class="linenos">6654</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-6655"><a href="#Parser-6655"><span class="linenos">6655</span></a>
</span><span id="Parser-6656"><a href="#Parser-6656"><span class="linenos">6656</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6657"><a href="#Parser-6657"><span class="linenos">6657</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</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">position</span><span class="o">=</span><span class="n">position</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">collation</span><span class="o">=</span><span class="n">collation</span>
</span><span id="Parser-6658"><a href="#Parser-6658"><span class="linenos">6658</span></a> <span class="p">)</span>
</span><span id="Parser-6659"><a href="#Parser-6659"><span class="linenos">6659</span></a>
</span><span id="Parser-6660"><a href="#Parser-6660"><span class="linenos">6660</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_window_clause</span><span class="p">(</span><span class="bp">self</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">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><span id="Parser-6661"><a href="#Parser-6661"><span class="linenos">6661</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_named_window</span><span class="p">)</span>
</span><span id="Parser-6662"><a href="#Parser-6662"><span class="linenos">6662</span></a>
</span><span id="Parser-6663"><a href="#Parser-6663"><span class="linenos">6663</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_named_window</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6664"><a href="#Parser-6664"><span class="linenos">6664</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span> <span class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-6665"><a href="#Parser-6665"><span class="linenos">6665</span></a>
</span><span id="Parser-6666"><a href="#Parser-6666"><span class="linenos">6666</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
</span><span id="Parser-6667"><a href="#Parser-6667"><span class="linenos">6667</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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="Parser-6668"><a href="#Parser-6668"><span class="linenos">6668</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="Parser-6669"><a href="#Parser-6669"><span class="linenos">6669</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
</span><span id="Parser-6670"><a href="#Parser-6670"><span class="linenos">6670</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">IgnoreNulls</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="Parser-6671"><a href="#Parser-6671"><span class="linenos">6671</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
</span><span id="Parser-6672"><a href="#Parser-6672"><span class="linenos">6672</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</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="Parser-6673"><a href="#Parser-6673"><span class="linenos">6673</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-6674"><a href="#Parser-6674"><span class="linenos">6674</span></a>
</span><span id="Parser-6675"><a href="#Parser-6675"><span class="linenos">6675</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_having_max</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</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 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="Parser-6676"><a href="#Parser-6676"><span class="linenos">6676</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">):</span>
</span><span id="Parser-6677"><a href="#Parser-6677"><span class="linenos">6677</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
</span><span id="Parser-6678"><a href="#Parser-6678"><span class="linenos">6678</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">!=</span> <span class="s2">&quot;MIN&quot;</span>
</span><span id="Parser-6679"><a href="#Parser-6679"><span class="linenos">6679</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6680"><a href="#Parser-6680"><span class="linenos">6680</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">HavingMax</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="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span>
</span><span id="Parser-6681"><a href="#Parser-6681"><span class="linenos">6681</span></a> <span class="p">)</span>
</span><span id="Parser-6682"><a href="#Parser-6682"><span class="linenos">6682</span></a>
</span><span id="Parser-6683"><a href="#Parser-6683"><span class="linenos">6683</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-6684"><a href="#Parser-6684"><span class="linenos">6684</span></a>
</span><span id="Parser-6685"><a href="#Parser-6685"><span class="linenos">6685</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_window</span><span class="p">(</span>
</span><span id="Parser-6686"><a href="#Parser-6686"><span class="linenos">6686</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-6687"><a href="#Parser-6687"><span class="linenos">6687</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="Parser-6688"><a href="#Parser-6688"><span class="linenos">6688</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">this</span>
</span><span id="Parser-6689"><a href="#Parser-6689"><span class="linenos">6689</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="n">func</span><span class="o">.</span><span class="n">comments</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</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="k">else</span> <span class="kc">None</span>
</span><span id="Parser-6690"><a href="#Parser-6690"><span class="linenos">6690</span></a>
</span><span id="Parser-6691"><a href="#Parser-6691"><span class="linenos">6691</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
</span><span id="Parser-6692"><a href="#Parser-6692"><span class="linenos">6692</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/percentile-disc-transact-sql?view=sql-server-ver16</span>
</span><span id="Parser-6693"><a href="#Parser-6693"><span class="linenos">6693</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
</span><span id="Parser-6694"><a href="#Parser-6694"><span class="linenos">6694</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">)</span>
</span><span id="Parser-6695"><a href="#Parser-6695"><span class="linenos">6695</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</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">order</span><span class="p">)</span>
</span><span id="Parser-6696"><a href="#Parser-6696"><span class="linenos">6696</span></a>
</span><span id="Parser-6697"><a href="#Parser-6697"><span class="linenos">6697</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-6698"><a href="#Parser-6698"><span class="linenos">6698</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span>
</span><span id="Parser-6699"><a href="#Parser-6699"><span class="linenos">6699</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6700"><a href="#Parser-6700"><span class="linenos">6700</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</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="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-6701"><a href="#Parser-6701"><span class="linenos">6701</span></a> <span class="p">)</span>
</span><span id="Parser-6702"><a href="#Parser-6702"><span class="linenos">6702</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-6703"><a href="#Parser-6703"><span class="linenos">6703</span></a>
</span><span id="Parser-6704"><a href="#Parser-6704"><span class="linenos">6704</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
</span><span id="Parser-6705"><a href="#Parser-6705"><span class="linenos">6705</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
</span><span id="Parser-6706"><a href="#Parser-6706"><span class="linenos">6706</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
</span><span id="Parser-6707"><a href="#Parser-6707"><span class="linenos">6707</span></a>
</span><span id="Parser-6708"><a href="#Parser-6708"><span class="linenos">6708</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
</span><span id="Parser-6709"><a href="#Parser-6709"><span class="linenos">6709</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
</span><span id="Parser-6710"><a href="#Parser-6710"><span class="linenos">6710</span></a>
</span><span id="Parser-6711"><a href="#Parser-6711"><span class="linenos">6711</span></a> <span class="c1"># The below changes handle</span>
</span><span id="Parser-6712"><a href="#Parser-6712"><span class="linenos">6712</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
</span><span id="Parser-6713"><a href="#Parser-6713"><span class="linenos">6713</span></a>
</span><span id="Parser-6714"><a href="#Parser-6714"><span class="linenos">6714</span></a> <span class="c1"># Oracle allows both formats</span>
</span><span id="Parser-6715"><a href="#Parser-6715"><span class="linenos">6715</span></a> <span class="c1"># (https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/img_text/first_value.html)</span>
</span><span id="Parser-6716"><a href="#Parser-6716"><span class="linenos">6716</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
</span><span id="Parser-6717"><a href="#Parser-6717"><span class="linenos">6717</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
</span><span id="Parser-6718"><a href="#Parser-6718"><span class="linenos">6718</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">AggFunc</span><span class="p">):</span>
</span><span id="Parser-6719"><a href="#Parser-6719"><span class="linenos">6719</span></a> <span class="n">ignore_respect</span> <span class="o">=</span> <span class="n">this</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">IgnoreNulls</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">)</span>
</span><span id="Parser-6720"><a href="#Parser-6720"><span class="linenos">6720</span></a>
</span><span id="Parser-6721"><a href="#Parser-6721"><span class="linenos">6721</span></a> <span class="k">if</span> <span class="n">ignore_respect</span> <span class="ow">and</span> <span class="n">ignore_respect</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
</span><span id="Parser-6722"><a href="#Parser-6722"><span class="linenos">6722</span></a> <span class="n">ignore_respect</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-6723"><a href="#Parser-6723"><span class="linenos">6723</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="vm">__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><span id="Parser-6724"><a href="#Parser-6724"><span class="linenos">6724</span></a>
</span><span id="Parser-6725"><a href="#Parser-6725"><span class="linenos">6725</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-6726"><a href="#Parser-6726"><span class="linenos">6726</span></a>
</span><span id="Parser-6727"><a href="#Parser-6727"><span class="linenos">6727</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
</span><span id="Parser-6728"><a href="#Parser-6728"><span class="linenos">6728</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
</span><span id="Parser-6729"><a href="#Parser-6729"><span class="linenos">6729</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6730"><a href="#Parser-6730"><span class="linenos">6730</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="Parser-6731"><a href="#Parser-6731"><span class="linenos">6731</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">):</span>
</span><span id="Parser-6732"><a href="#Parser-6732"><span class="linenos">6732</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-6733"><a href="#Parser-6733"><span class="linenos">6733</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6734"><a href="#Parser-6734"><span class="linenos">6734</span></a> <span class="n">over</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-6735"><a href="#Parser-6735"><span class="linenos">6735</span></a>
</span><span id="Parser-6736"><a href="#Parser-6736"><span class="linenos">6736</span></a> <span class="k">if</span> <span class="n">comments</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">func</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="Parser-6737"><a href="#Parser-6737"><span class="linenos">6737</span></a> <span class="n">func</span><span class="o">.</span><span class="n">pop_comments</span><span class="p">()</span>
</span><span id="Parser-6738"><a href="#Parser-6738"><span class="linenos">6738</span></a>
</span><span id="Parser-6739"><a href="#Parser-6739"><span class="linenos">6739</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-6740"><a href="#Parser-6740"><span class="linenos">6740</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6741"><a href="#Parser-6741"><span class="linenos">6741</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
</span><span id="Parser-6742"><a href="#Parser-6742"><span class="linenos">6742</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="Parser-6743"><a href="#Parser-6743"><span class="linenos">6743</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-6744"><a href="#Parser-6744"><span class="linenos">6744</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span>
</span><span id="Parser-6745"><a href="#Parser-6745"><span class="linenos">6745</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
</span><span id="Parser-6746"><a href="#Parser-6746"><span class="linenos">6746</span></a> <span class="p">)</span>
</span><span id="Parser-6747"><a href="#Parser-6747"><span class="linenos">6747</span></a>
</span><span id="Parser-6748"><a href="#Parser-6748"><span class="linenos">6748</span></a> <span class="n">window_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="Parser-6749"><a href="#Parser-6749"><span class="linenos">6749</span></a>
</span><span id="Parser-6750"><a href="#Parser-6750"><span class="linenos">6750</span></a> <span class="n">first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">)</span>
</span><span id="Parser-6751"><a href="#Parser-6751"><span class="linenos">6751</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
</span><span id="Parser-6752"><a href="#Parser-6752"><span class="linenos">6752</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-6753"><a href="#Parser-6753"><span class="linenos">6753</span></a>
</span><span id="Parser-6754"><a href="#Parser-6754"><span class="linenos">6754</span></a> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_and_order</span><span class="p">()</span>
</span><span id="Parser-6755"><a href="#Parser-6755"><span class="linenos">6755</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">))</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-6756"><a href="#Parser-6756"><span class="linenos">6756</span></a>
</span><span id="Parser-6757"><a href="#Parser-6757"><span class="linenos">6757</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
</span><span id="Parser-6758"><a href="#Parser-6758"><span class="linenos">6758</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)</span>
</span><span id="Parser-6759"><a href="#Parser-6759"><span class="linenos">6759</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
</span><span id="Parser-6760"><a href="#Parser-6760"><span class="linenos">6760</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span>
</span><span id="Parser-6761"><a href="#Parser-6761"><span class="linenos">6761</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
</span><span id="Parser-6762"><a href="#Parser-6762"><span class="linenos">6762</span></a>
</span><span id="Parser-6763"><a href="#Parser-6763"><span class="linenos">6763</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6764"><a href="#Parser-6764"><span class="linenos">6764</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
</span><span id="Parser-6765"><a href="#Parser-6765"><span class="linenos">6765</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="Parser-6766"><a href="#Parser-6766"><span class="linenos">6766</span></a> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
</span><span id="Parser-6767"><a href="#Parser-6767"><span class="linenos">6767</span></a> <span class="n">start_side</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
</span><span id="Parser-6768"><a href="#Parser-6768"><span class="linenos">6768</span></a> <span class="n">end</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
</span><span id="Parser-6769"><a href="#Parser-6769"><span class="linenos">6769</span></a> <span class="n">end_side</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
</span><span id="Parser-6770"><a href="#Parser-6770"><span class="linenos">6770</span></a> <span class="p">)</span>
</span><span id="Parser-6771"><a href="#Parser-6771"><span class="linenos">6771</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-6772"><a href="#Parser-6772"><span class="linenos">6772</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-6773"><a href="#Parser-6773"><span class="linenos">6773</span></a>
</span><span id="Parser-6774"><a href="#Parser-6774"><span class="linenos">6774</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-6775"><a href="#Parser-6775"><span class="linenos">6775</span></a>
</span><span id="Parser-6776"><a href="#Parser-6776"><span class="linenos">6776</span></a> <span class="n">window</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6777"><a href="#Parser-6777"><span class="linenos">6777</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
</span><span id="Parser-6778"><a href="#Parser-6778"><span class="linenos">6778</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="Parser-6779"><a href="#Parser-6779"><span class="linenos">6779</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-6780"><a href="#Parser-6780"><span class="linenos">6780</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
</span><span id="Parser-6781"><a href="#Parser-6781"><span class="linenos">6781</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
</span><span id="Parser-6782"><a href="#Parser-6782"><span class="linenos">6782</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
</span><span id="Parser-6783"><a href="#Parser-6783"><span class="linenos">6783</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">window_alias</span><span class="p">,</span>
</span><span id="Parser-6784"><a href="#Parser-6784"><span class="linenos">6784</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
</span><span id="Parser-6785"><a href="#Parser-6785"><span class="linenos">6785</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
</span><span id="Parser-6786"><a href="#Parser-6786"><span class="linenos">6786</span></a> <span class="p">)</span>
</span><span id="Parser-6787"><a href="#Parser-6787"><span class="linenos">6787</span></a>
</span><span id="Parser-6788"><a href="#Parser-6788"><span class="linenos">6788</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
</span><span id="Parser-6789"><a href="#Parser-6789"><span class="linenos">6789</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-6790"><a href="#Parser-6790"><span class="linenos">6790</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
</span><span id="Parser-6791"><a href="#Parser-6791"><span class="linenos">6791</span></a>
</span><span id="Parser-6792"><a href="#Parser-6792"><span class="linenos">6792</span></a> <span class="k">return</span> <span class="n">window</span>
</span><span id="Parser-6793"><a href="#Parser-6793"><span class="linenos">6793</span></a>
</span><span id="Parser-6794"><a href="#Parser-6794"><span class="linenos">6794</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_partition_and_order</span><span class="p">(</span>
</span><span id="Parser-6795"><a href="#Parser-6795"><span class="linenos">6795</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-6796"><a href="#Parser-6796"><span class="linenos">6796</span></a> <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">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">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="Parser-6797"><a href="#Parser-6797"><span class="linenos">6797</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
</span><span id="Parser-6798"><a href="#Parser-6798"><span class="linenos">6798</span></a>
</span><span id="Parser-6799"><a href="#Parser-6799"><span class="linenos">6799</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_window_spec</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</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">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="Parser-6800"><a href="#Parser-6800"><span class="linenos">6800</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)</span>
</span><span id="Parser-6801"><a href="#Parser-6801"><span class="linenos">6801</span></a>
</span><span id="Parser-6802"><a href="#Parser-6802"><span class="linenos">6802</span></a> <span class="k">return</span> <span class="p">{</span>
</span><span id="Parser-6803"><a href="#Parser-6803"><span class="linenos">6803</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
</span><span id="Parser-6804"><a href="#Parser-6804"><span class="linenos">6804</span></a> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
</span><span id="Parser-6805"><a href="#Parser-6805"><span class="linenos">6805</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
</span><span id="Parser-6806"><a href="#Parser-6806"><span class="linenos">6806</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-6807"><a href="#Parser-6807"><span class="linenos">6807</span></a> <span class="p">),</span>
</span><span id="Parser-6808"><a href="#Parser-6808"><span class="linenos">6808</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
</span><span id="Parser-6809"><a href="#Parser-6809"><span class="linenos">6809</span></a> <span class="p">}</span>
</span><span id="Parser-6810"><a href="#Parser-6810"><span class="linenos">6810</span></a>
</span><span id="Parser-6811"><a href="#Parser-6811"><span class="linenos">6811</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alias</span><span class="p">(</span>
</span><span id="Parser-6812"><a href="#Parser-6812"><span class="linenos">6812</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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 class="n">explicit</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-6813"><a href="#Parser-6813"><span class="linenos">6813</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="Parser-6814"><a href="#Parser-6814"><span class="linenos">6814</span></a> <span class="c1"># In some dialects, LIMIT and OFFSET can act as both identifiers and keywords (clauses)</span>
</span><span id="Parser-6815"><a href="#Parser-6815"><span class="linenos">6815</span></a> <span class="c1"># so this section tries to parse the clause version and if it fails, it treats the token</span>
</span><span id="Parser-6816"><a href="#Parser-6816"><span class="linenos">6816</span></a> <span class="c1"># as an identifier (alias)</span>
</span><span id="Parser-6817"><a href="#Parser-6817"><span class="linenos">6817</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_can_parse_limit_or_offset</span><span class="p">():</span>
</span><span id="Parser-6818"><a href="#Parser-6818"><span class="linenos">6818</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-6819"><a href="#Parser-6819"><span class="linenos">6819</span></a>
</span><span id="Parser-6820"><a href="#Parser-6820"><span class="linenos">6820</span></a> <span class="n">any_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="Parser-6821"><a href="#Parser-6821"><span class="linenos">6821</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="ow">or</span> <span class="p">[]</span>
</span><span id="Parser-6822"><a href="#Parser-6822"><span class="linenos">6822</span></a>
</span><span id="Parser-6823"><a href="#Parser-6823"><span class="linenos">6823</span></a> <span class="k">if</span> <span class="n">explicit</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">any_token</span><span class="p">:</span>
</span><span id="Parser-6824"><a href="#Parser-6824"><span class="linenos">6824</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-6825"><a href="#Parser-6825"><span class="linenos">6825</span></a>
</span><span id="Parser-6826"><a href="#Parser-6826"><span class="linenos">6826</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-6827"><a href="#Parser-6827"><span class="linenos">6827</span></a> <span class="n">aliases</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6828"><a href="#Parser-6828"><span class="linenos">6828</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
</span><span id="Parser-6829"><a href="#Parser-6829"><span class="linenos">6829</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
</span><span id="Parser-6830"><a href="#Parser-6830"><span class="linenos">6830</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-6831"><a href="#Parser-6831"><span class="linenos">6831</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="p">)),</span>
</span><span id="Parser-6832"><a href="#Parser-6832"><span class="linenos">6832</span></a> <span class="p">)</span>
</span><span id="Parser-6833"><a href="#Parser-6833"><span class="linenos">6833</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
</span><span id="Parser-6834"><a href="#Parser-6834"><span class="linenos">6834</span></a> <span class="k">return</span> <span class="n">aliases</span>
</span><span id="Parser-6835"><a href="#Parser-6835"><span class="linenos">6835</span></a>
</span><span id="Parser-6836"><a href="#Parser-6836"><span class="linenos">6836</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">ALIAS_TOKENS</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
</span><span id="Parser-6837"><a href="#Parser-6837"><span class="linenos">6837</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ALIASES</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
</span><span id="Parser-6838"><a href="#Parser-6838"><span class="linenos">6838</span></a> <span class="p">)</span>
</span><span id="Parser-6839"><a href="#Parser-6839"><span class="linenos">6839</span></a>
</span><span id="Parser-6840"><a href="#Parser-6840"><span class="linenos">6840</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
</span><span id="Parser-6841"><a href="#Parser-6841"><span class="linenos">6841</span></a> <span class="n">comments</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">pop_comments</span><span class="p">())</span>
</span><span id="Parser-6842"><a href="#Parser-6842"><span class="linenos">6842</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</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">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
</span><span id="Parser-6843"><a href="#Parser-6843"><span class="linenos">6843</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
</span><span id="Parser-6844"><a href="#Parser-6844"><span class="linenos">6844</span></a>
</span><span id="Parser-6845"><a href="#Parser-6845"><span class="linenos">6845</span></a> <span class="c1"># Moves the comment next to the alias in `expr /* comment */ AS alias`</span>
</span><span id="Parser-6846"><a href="#Parser-6846"><span class="linenos">6846</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">column</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
</span><span id="Parser-6847"><a href="#Parser-6847"><span class="linenos">6847</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">pop_comments</span><span class="p">()</span>
</span><span id="Parser-6848"><a href="#Parser-6848"><span class="linenos">6848</span></a>
</span><span id="Parser-6849"><a href="#Parser-6849"><span class="linenos">6849</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-6850"><a href="#Parser-6850"><span class="linenos">6850</span></a>
</span><span id="Parser-6851"><a href="#Parser-6851"><span class="linenos">6851</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_id_var</span><span class="p">(</span>
</span><span id="Parser-6852"><a href="#Parser-6852"><span class="linenos">6852</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-6853"><a href="#Parser-6853"><span class="linenos">6853</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
</span><span id="Parser-6854"><a href="#Parser-6854"><span class="linenos">6854</span></a> <span class="n">tokens</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">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-6855"><a href="#Parser-6855"><span class="linenos">6855</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="Parser-6856"><a href="#Parser-6856"><span class="linenos">6856</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span>
</span><span id="Parser-6857"><a href="#Parser-6857"><span class="linenos">6857</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span> <span class="ow">and</span> <span class="p">(</span>
</span><span id="Parser-6858"><a href="#Parser-6858"><span class="linenos">6858</span></a> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">)</span>
</span><span id="Parser-6859"><a href="#Parser-6859"><span class="linenos">6859</span></a> <span class="p">):</span>
</span><span id="Parser-6860"><a href="#Parser-6860"><span class="linenos">6860</span></a> <span class="n">quoted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
</span><span id="Parser-6861"><a href="#Parser-6861"><span class="linenos">6861</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
</span><span id="Parser-6862"><a href="#Parser-6862"><span class="linenos">6862</span></a>
</span><span id="Parser-6863"><a href="#Parser-6863"><span class="linenos">6863</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="Parser-6864"><a href="#Parser-6864"><span class="linenos">6864</span></a>
</span><span id="Parser-6865"><a href="#Parser-6865"><span class="linenos">6865</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_string</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6866"><a href="#Parser-6866"><span class="linenos">6866</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">STRING_PARSERS</span><span class="p">):</span>
</span><span id="Parser-6867"><a href="#Parser-6867"><span class="linenos">6867</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-6868"><a href="#Parser-6868"><span class="linenos">6868</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="Parser-6869"><a href="#Parser-6869"><span class="linenos">6869</span></a>
</span><span id="Parser-6870"><a href="#Parser-6870"><span class="linenos">6870</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_string_as_identifier</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]:</span>
</span><span id="Parser-6871"><a href="#Parser-6871"><span class="linenos">6871</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-6872"><a href="#Parser-6872"><span class="linenos">6872</span></a>
</span><span id="Parser-6873"><a href="#Parser-6873"><span class="linenos">6873</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_number</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6874"><a href="#Parser-6874"><span class="linenos">6874</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NUMERIC_PARSERS</span><span class="p">):</span>
</span><span id="Parser-6875"><a href="#Parser-6875"><span class="linenos">6875</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">NUMERIC_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-6876"><a href="#Parser-6876"><span class="linenos">6876</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="Parser-6877"><a href="#Parser-6877"><span class="linenos">6877</span></a>
</span><span id="Parser-6878"><a href="#Parser-6878"><span class="linenos">6878</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_identifier</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6879"><a href="#Parser-6879"><span class="linenos">6879</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">):</span>
</span><span id="Parser-6880"><a href="#Parser-6880"><span class="linenos">6880</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-6881"><a href="#Parser-6881"><span class="linenos">6881</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="Parser-6882"><a href="#Parser-6882"><span class="linenos">6882</span></a>
</span><span id="Parser-6883"><a href="#Parser-6883"><span class="linenos">6883</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_var</span><span class="p">(</span>
</span><span id="Parser-6884"><a href="#Parser-6884"><span class="linenos">6884</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser-6885"><a href="#Parser-6885"><span class="linenos">6885</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-6886"><a href="#Parser-6886"><span class="linenos">6886</span></a> <span class="n">tokens</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">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-6887"><a href="#Parser-6887"><span class="linenos">6887</span></a> <span class="n">upper</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-6888"><a href="#Parser-6888"><span class="linenos">6888</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="Parser-6889"><a href="#Parser-6889"><span class="linenos">6889</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Parser-6890"><a href="#Parser-6890"><span class="linenos">6890</span></a> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span>
</span><span id="Parser-6891"><a href="#Parser-6891"><span class="linenos">6891</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
</span><span id="Parser-6892"><a href="#Parser-6892"><span class="linenos">6892</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="k">if</span> <span class="n">tokens</span> <span class="k">else</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-6893"><a href="#Parser-6893"><span class="linenos">6893</span></a> <span class="p">):</span>
</span><span id="Parser-6894"><a href="#Parser-6894"><span class="linenos">6894</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6895"><a href="#Parser-6895"><span class="linenos">6895</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">upper</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-6896"><a href="#Parser-6896"><span class="linenos">6896</span></a> <span class="p">)</span>
</span><span id="Parser-6897"><a href="#Parser-6897"><span class="linenos">6897</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="Parser-6898"><a href="#Parser-6898"><span class="linenos">6898</span></a>
</span><span id="Parser-6899"><a href="#Parser-6899"><span class="linenos">6899</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_advance_any</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignore_reserved</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">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
</span><span id="Parser-6900"><a href="#Parser-6900"><span class="linenos">6900</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="p">(</span><span class="n">ignore_reserved</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_TOKENS</span><span class="p">):</span>
</span><span id="Parser-6901"><a href="#Parser-6901"><span class="linenos">6901</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-6902"><a href="#Parser-6902"><span class="linenos">6902</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-6903"><a href="#Parser-6903"><span class="linenos">6903</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-6904"><a href="#Parser-6904"><span class="linenos">6904</span></a>
</span><span id="Parser-6905"><a href="#Parser-6905"><span class="linenos">6905</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_var_or_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">upper</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">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="Parser-6906"><a href="#Parser-6906"><span class="linenos">6906</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="n">upper</span><span class="p">)</span>
</span><span id="Parser-6907"><a href="#Parser-6907"><span class="linenos">6907</span></a>
</span><span id="Parser-6908"><a href="#Parser-6908"><span class="linenos">6908</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_primary_or_var</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6909"><a href="#Parser-6909"><span class="linenos">6909</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-6910"><a href="#Parser-6910"><span class="linenos">6910</span></a>
</span><span id="Parser-6911"><a href="#Parser-6911"><span class="linenos">6911</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_null</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6912"><a href="#Parser-6912"><span class="linenos">6912</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NULL_TOKENS</span><span class="p">):</span>
</span><span id="Parser-6913"><a href="#Parser-6913"><span class="linenos">6913</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-6914"><a href="#Parser-6914"><span class="linenos">6914</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="Parser-6915"><a href="#Parser-6915"><span class="linenos">6915</span></a>
</span><span id="Parser-6916"><a href="#Parser-6916"><span class="linenos">6916</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_boolean</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6917"><a href="#Parser-6917"><span class="linenos">6917</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">):</span>
</span><span id="Parser-6918"><a href="#Parser-6918"><span class="linenos">6918</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-6919"><a href="#Parser-6919"><span class="linenos">6919</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">):</span>
</span><span id="Parser-6920"><a href="#Parser-6920"><span class="linenos">6920</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-6921"><a href="#Parser-6921"><span class="linenos">6921</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="Parser-6922"><a href="#Parser-6922"><span class="linenos">6922</span></a>
</span><span id="Parser-6923"><a href="#Parser-6923"><span class="linenos">6923</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_star</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6924"><a href="#Parser-6924"><span class="linenos">6924</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">):</span>
</span><span id="Parser-6925"><a href="#Parser-6925"><span class="linenos">6925</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-6926"><a href="#Parser-6926"><span class="linenos">6926</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="Parser-6927"><a href="#Parser-6927"><span class="linenos">6927</span></a>
</span><span id="Parser-6928"><a href="#Parser-6928"><span class="linenos">6928</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">:</span>
</span><span id="Parser-6929"><a href="#Parser-6929"><span class="linenos">6929</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_or_var</span><span class="p">()</span>
</span><span id="Parser-6930"><a href="#Parser-6930"><span class="linenos">6930</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Parameter</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="Parser-6931"><a href="#Parser-6931"><span class="linenos">6931</span></a>
</span><span id="Parser-6932"><a href="#Parser-6932"><span class="linenos">6932</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_placeholder</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6933"><a href="#Parser-6933"><span class="linenos">6933</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">):</span>
</span><span id="Parser-6934"><a href="#Parser-6934"><span class="linenos">6934</span></a> <span class="n">placeholder</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="Parser-6935"><a href="#Parser-6935"><span class="linenos">6935</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
</span><span id="Parser-6936"><a href="#Parser-6936"><span class="linenos">6936</span></a> <span class="k">return</span> <span class="n">placeholder</span>
</span><span id="Parser-6937"><a href="#Parser-6937"><span class="linenos">6937</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-6938"><a href="#Parser-6938"><span class="linenos">6938</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-6939"><a href="#Parser-6939"><span class="linenos">6939</span></a>
</span><span id="Parser-6940"><a href="#Parser-6940"><span class="linenos">6940</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_star_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">keywords</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">Optional</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><span id="Parser-6941"><a href="#Parser-6941"><span class="linenos">6941</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="n">keywords</span><span class="p">):</span>
</span><span id="Parser-6942"><a href="#Parser-6942"><span class="linenos">6942</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-6943"><a href="#Parser-6943"><span class="linenos">6943</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-6944"><a href="#Parser-6944"><span class="linenos">6944</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
</span><span id="Parser-6945"><a href="#Parser-6945"><span class="linenos">6945</span></a>
</span><span id="Parser-6946"><a href="#Parser-6946"><span class="linenos">6946</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
</span><span id="Parser-6947"><a href="#Parser-6947"><span class="linenos">6947</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-6948"><a href="#Parser-6948"><span class="linenos">6948</span></a>
</span><span id="Parser-6949"><a href="#Parser-6949"><span class="linenos">6949</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_csv</span><span class="p">(</span>
</span><span id="Parser-6950"><a href="#Parser-6950"><span class="linenos">6950</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span>
</span><span id="Parser-6951"><a href="#Parser-6951"><span class="linenos">6951</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6952"><a href="#Parser-6952"><span class="linenos">6952</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="Parser-6953"><a href="#Parser-6953"><span class="linenos">6953</span></a> <span class="n">items</span> <span class="o">=</span> <span class="p">[</span><span class="n">parse_result</span><span class="p">]</span> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
</span><span id="Parser-6954"><a href="#Parser-6954"><span class="linenos">6954</span></a>
</span><span id="Parser-6955"><a href="#Parser-6955"><span class="linenos">6955</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">sep</span><span class="p">):</span>
</span><span id="Parser-6956"><a href="#Parser-6956"><span class="linenos">6956</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
</span><span id="Parser-6957"><a href="#Parser-6957"><span class="linenos">6957</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="Parser-6958"><a href="#Parser-6958"><span class="linenos">6958</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-6959"><a href="#Parser-6959"><span class="linenos">6959</span></a> <span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
</span><span id="Parser-6960"><a href="#Parser-6960"><span class="linenos">6960</span></a>
</span><span id="Parser-6961"><a href="#Parser-6961"><span class="linenos">6961</span></a> <span class="k">return</span> <span class="n">items</span>
</span><span id="Parser-6962"><a href="#Parser-6962"><span class="linenos">6962</span></a>
</span><span id="Parser-6963"><a href="#Parser-6963"><span class="linenos">6963</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_tokens</span><span class="p">(</span>
</span><span id="Parser-6964"><a href="#Parser-6964"><span class="linenos">6964</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
</span><span id="Parser-6965"><a href="#Parser-6965"><span class="linenos">6965</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="Parser-6966"><a href="#Parser-6966"><span class="linenos">6966</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="Parser-6967"><a href="#Parser-6967"><span class="linenos">6967</span></a>
</span><span id="Parser-6968"><a href="#Parser-6968"><span class="linenos">6968</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
</span><span id="Parser-6969"><a href="#Parser-6969"><span class="linenos">6969</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-6970"><a href="#Parser-6970"><span class="linenos">6970</span></a> <span class="n">expressions</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
</span><span id="Parser-6971"><a href="#Parser-6971"><span class="linenos">6971</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-6972"><a href="#Parser-6972"><span class="linenos">6972</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
</span><span id="Parser-6973"><a href="#Parser-6973"><span class="linenos">6973</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
</span><span id="Parser-6974"><a href="#Parser-6974"><span class="linenos">6974</span></a> <span class="p">)</span>
</span><span id="Parser-6975"><a href="#Parser-6975"><span class="linenos">6975</span></a>
</span><span id="Parser-6976"><a href="#Parser-6976"><span class="linenos">6976</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-6977"><a href="#Parser-6977"><span class="linenos">6977</span></a>
</span><span id="Parser-6978"><a href="#Parser-6978"><span class="linenos">6978</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</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">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><span id="Parser-6979"><a href="#Parser-6979"><span class="linenos">6979</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
</span><span id="Parser-6980"><a href="#Parser-6980"><span class="linenos">6980</span></a>
</span><span id="Parser-6981"><a href="#Parser-6981"><span class="linenos">6981</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
</span><span id="Parser-6982"><a href="#Parser-6982"><span class="linenos">6982</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-6983"><a href="#Parser-6983"><span class="linenos">6983</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6984"><a href="#Parser-6984"><span class="linenos">6984</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
</span><span id="Parser-6985"><a href="#Parser-6985"><span class="linenos">6985</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
</span><span id="Parser-6986"><a href="#Parser-6986"><span class="linenos">6986</span></a> <span class="p">)</span>
</span><span id="Parser-6987"><a href="#Parser-6987"><span class="linenos">6987</span></a>
</span><span id="Parser-6988"><a href="#Parser-6988"><span class="linenos">6988</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</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">Any</span><span class="p">:</span>
</span><span id="Parser-6989"><a href="#Parser-6989"><span class="linenos">6989</span></a> <span class="n">wrapped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="Parser-6990"><a href="#Parser-6990"><span class="linenos">6990</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
</span><span id="Parser-6991"><a href="#Parser-6991"><span class="linenos">6991</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
</span><span id="Parser-6992"><a href="#Parser-6992"><span class="linenos">6992</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="Parser-6993"><a href="#Parser-6993"><span class="linenos">6993</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
</span><span id="Parser-6994"><a href="#Parser-6994"><span class="linenos">6994</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-6995"><a href="#Parser-6995"><span class="linenos">6995</span></a> <span class="k">return</span> <span class="n">parse_result</span>
</span><span id="Parser-6996"><a href="#Parser-6996"><span class="linenos">6996</span></a>
</span><span id="Parser-6997"><a href="#Parser-6997"><span class="linenos">6997</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_expressions</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-6998"><a href="#Parser-6998"><span class="linenos">6998</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
</span><span id="Parser-6999"><a href="#Parser-6999"><span class="linenos">6999</span></a>
</span><span id="Parser-7000"><a href="#Parser-7000"><span class="linenos">7000</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</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">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="Parser-7001"><a href="#Parser-7001"><span class="linenos">7001</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
</span><span id="Parser-7002"><a href="#Parser-7002"><span class="linenos">7002</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span> <span class="n">explicit</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-7003"><a href="#Parser-7003"><span class="linenos">7003</span></a> <span class="k">if</span> <span class="n">alias</span>
</span><span id="Parser-7004"><a href="#Parser-7004"><span class="linenos">7004</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-7005"><a href="#Parser-7005"><span class="linenos">7005</span></a> <span class="p">)</span>
</span><span id="Parser-7006"><a href="#Parser-7006"><span class="linenos">7006</span></a>
</span><span id="Parser-7007"><a href="#Parser-7007"><span class="linenos">7007</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_ddl_select</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-7008"><a href="#Parser-7008"><span class="linenos">7008</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
</span><span id="Parser-7009"><a href="#Parser-7009"><span class="linenos">7009</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
</span><span id="Parser-7010"><a href="#Parser-7010"><span class="linenos">7010</span></a> <span class="p">)</span>
</span><span id="Parser-7011"><a href="#Parser-7011"><span class="linenos">7011</span></a>
</span><span id="Parser-7012"><a href="#Parser-7012"><span class="linenos">7012</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="Parser-7013"><a href="#Parser-7013"><span class="linenos">7013</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7014"><a href="#Parser-7014"><span class="linenos">7014</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_KIND</span><span class="p">):</span>
</span><span id="Parser-7015"><a href="#Parser-7015"><span class="linenos">7015</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-7016"><a href="#Parser-7016"><span class="linenos">7016</span></a>
</span><span id="Parser-7017"><a href="#Parser-7017"><span class="linenos">7017</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
</span><span id="Parser-7018"><a href="#Parser-7018"><span class="linenos">7018</span></a>
</span><span id="Parser-7019"><a href="#Parser-7019"><span class="linenos">7019</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-7020"><a href="#Parser-7020"><span class="linenos">7020</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-7021"><a href="#Parser-7021"><span class="linenos">7021</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-7022"><a href="#Parser-7022"><span class="linenos">7022</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">):</span>
</span><span id="Parser-7023"><a href="#Parser-7023"><span class="linenos">7023</span></a> <span class="n">mode</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="Parser-7024"><a href="#Parser-7024"><span class="linenos">7024</span></a>
</span><span id="Parser-7025"><a href="#Parser-7025"><span class="linenos">7025</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
</span><span id="Parser-7026"><a href="#Parser-7026"><span class="linenos">7026</span></a> <span class="n">modes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mode</span><span class="p">))</span>
</span><span id="Parser-7027"><a href="#Parser-7027"><span class="linenos">7027</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
</span><span id="Parser-7028"><a href="#Parser-7028"><span class="linenos">7028</span></a> <span class="k">break</span>
</span><span id="Parser-7029"><a href="#Parser-7029"><span class="linenos">7029</span></a>
</span><span id="Parser-7030"><a href="#Parser-7030"><span class="linenos">7030</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Transaction</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">modes</span><span class="o">=</span><span class="n">modes</span><span class="p">)</span>
</span><span id="Parser-7031"><a href="#Parser-7031"><span class="linenos">7031</span></a>
</span><span id="Parser-7032"><a href="#Parser-7032"><span class="linenos">7032</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
</span><span id="Parser-7033"><a href="#Parser-7033"><span class="linenos">7033</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7034"><a href="#Parser-7034"><span class="linenos">7034</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7035"><a href="#Parser-7035"><span class="linenos">7035</span></a> <span class="n">is_rollback</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span>
</span><span id="Parser-7036"><a href="#Parser-7036"><span class="linenos">7036</span></a>
</span><span id="Parser-7037"><a href="#Parser-7037"><span class="linenos">7037</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
</span><span id="Parser-7038"><a href="#Parser-7038"><span class="linenos">7038</span></a>
</span><span id="Parser-7039"><a href="#Parser-7039"><span class="linenos">7039</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
</span><span id="Parser-7040"><a href="#Parser-7040"><span class="linenos">7040</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SAVEPOINT&quot;</span><span class="p">)</span>
</span><span id="Parser-7041"><a href="#Parser-7041"><span class="linenos">7041</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-7042"><a href="#Parser-7042"><span class="linenos">7042</span></a>
</span><span id="Parser-7043"><a href="#Parser-7043"><span class="linenos">7043</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">):</span>
</span><span id="Parser-7044"><a href="#Parser-7044"><span class="linenos">7044</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">)</span>
</span><span id="Parser-7045"><a href="#Parser-7045"><span class="linenos">7045</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHAIN&quot;</span><span class="p">)</span>
</span><span id="Parser-7046"><a href="#Parser-7046"><span class="linenos">7046</span></a>
</span><span id="Parser-7047"><a href="#Parser-7047"><span class="linenos">7047</span></a> <span class="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
</span><span id="Parser-7048"><a href="#Parser-7048"><span class="linenos">7048</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">,</span> <span class="n">savepoint</span><span class="o">=</span><span class="n">savepoint</span><span class="p">)</span>
</span><span id="Parser-7049"><a href="#Parser-7049"><span class="linenos">7049</span></a>
</span><span id="Parser-7050"><a href="#Parser-7050"><span class="linenos">7050</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Commit</span><span class="p">,</span> <span class="n">chain</span><span class="o">=</span><span class="n">chain</span><span class="p">)</span>
</span><span id="Parser-7051"><a href="#Parser-7051"><span class="linenos">7051</span></a>
</span><span id="Parser-7052"><a href="#Parser-7052"><span class="linenos">7052</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Refresh</span><span class="p">:</span>
</span><span id="Parser-7053"><a href="#Parser-7053"><span class="linenos">7053</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="Parser-7054"><a href="#Parser-7054"><span class="linenos">7054</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Refresh</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
</span><span id="Parser-7055"><a href="#Parser-7055"><span class="linenos">7055</span></a>
</span><span id="Parser-7056"><a href="#Parser-7056"><span class="linenos">7056</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-7057"><a href="#Parser-7057"><span class="linenos">7057</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
</span><span id="Parser-7058"><a href="#Parser-7058"><span class="linenos">7058</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7059"><a href="#Parser-7059"><span class="linenos">7059</span></a>
</span><span id="Parser-7060"><a href="#Parser-7060"><span class="linenos">7060</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">)</span>
</span><span id="Parser-7061"><a href="#Parser-7061"><span class="linenos">7061</span></a> <span class="n">exists_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-7062"><a href="#Parser-7062"><span class="linenos">7062</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
</span><span id="Parser-7063"><a href="#Parser-7063"><span class="linenos">7063</span></a>
</span><span id="Parser-7064"><a href="#Parser-7064"><span class="linenos">7064</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
</span><span id="Parser-7065"><a href="#Parser-7065"><span class="linenos">7065</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="n">exists_column</span><span class="p">)</span>
</span><span id="Parser-7066"><a href="#Parser-7066"><span class="linenos">7066</span></a>
</span><span id="Parser-7067"><a href="#Parser-7067"><span class="linenos">7067</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
</span><span id="Parser-7068"><a href="#Parser-7068"><span class="linenos">7068</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="s2">&quot;AFTER&quot;</span><span class="p">)):</span>
</span><span id="Parser-7069"><a href="#Parser-7069"><span class="linenos">7069</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-7070"><a href="#Parser-7070"><span class="linenos">7070</span></a> <span class="n">column_position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7071"><a href="#Parser-7071"><span class="linenos">7071</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span>
</span><span id="Parser-7072"><a href="#Parser-7072"><span class="linenos">7072</span></a> <span class="p">)</span>
</span><span id="Parser-7073"><a href="#Parser-7073"><span class="linenos">7073</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="n">column_position</span><span class="p">)</span>
</span><span id="Parser-7074"><a href="#Parser-7074"><span class="linenos">7074</span></a>
</span><span id="Parser-7075"><a href="#Parser-7075"><span class="linenos">7075</span></a> <span class="k">return</span> <span class="n">expression</span>
</span><span id="Parser-7076"><a href="#Parser-7076"><span class="linenos">7076</span></a>
</span><span id="Parser-7077"><a href="#Parser-7077"><span class="linenos">7077</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
</span><span id="Parser-7078"><a href="#Parser-7078"><span class="linenos">7078</span></a> <span class="n">drop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">()</span>
</span><span id="Parser-7079"><a href="#Parser-7079"><span class="linenos">7079</span></a> <span class="k">if</span> <span class="n">drop</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">drop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">):</span>
</span><span id="Parser-7080"><a href="#Parser-7080"><span class="linenos">7080</span></a> <span class="n">drop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="n">drop</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="s2">&quot;COLUMN&quot;</span><span class="p">))</span>
</span><span id="Parser-7081"><a href="#Parser-7081"><span class="linenos">7081</span></a> <span class="k">return</span> <span class="n">drop</span>
</span><span id="Parser-7082"><a href="#Parser-7082"><span class="linenos">7082</span></a>
</span><span id="Parser-7083"><a href="#Parser-7083"><span class="linenos">7083</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
</span><span id="Parser-7084"><a href="#Parser-7084"><span class="linenos">7084</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
</span><span id="Parser-7085"><a href="#Parser-7085"><span class="linenos">7085</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7086"><a href="#Parser-7086"><span class="linenos">7086</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">),</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span>
</span><span id="Parser-7087"><a href="#Parser-7087"><span class="linenos">7087</span></a> <span class="p">)</span>
</span><span id="Parser-7088"><a href="#Parser-7088"><span class="linenos">7088</span></a>
</span><span id="Parser-7089"><a href="#Parser-7089"><span class="linenos">7089</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_table_add</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-7090"><a href="#Parser-7090"><span class="linenos">7090</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
</span><span id="Parser-7091"><a href="#Parser-7091"><span class="linenos">7091</span></a>
</span><span id="Parser-7092"><a href="#Parser-7092"><span class="linenos">7092</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ADD_CONSTRAINT_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-7093"><a href="#Parser-7093"><span class="linenos">7093</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="Parser-7094"><a href="#Parser-7094"><span class="linenos">7094</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7095"><a href="#Parser-7095"><span class="linenos">7095</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">)</span>
</span><span id="Parser-7096"><a href="#Parser-7096"><span class="linenos">7096</span></a> <span class="p">)</span>
</span><span id="Parser-7097"><a href="#Parser-7097"><span class="linenos">7097</span></a> <span class="p">)</span>
</span><span id="Parser-7098"><a href="#Parser-7098"><span class="linenos">7098</span></a>
</span><span id="Parser-7099"><a href="#Parser-7099"><span class="linenos">7099</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-7100"><a href="#Parser-7100"><span class="linenos">7100</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
</span><span id="Parser-7101"><a href="#Parser-7101"><span class="linenos">7101</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-7102"><a href="#Parser-7102"><span class="linenos">7102</span></a>
</span><span id="Parser-7103"><a href="#Parser-7103"><span class="linenos">7103</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">):</span>
</span><span id="Parser-7104"><a href="#Parser-7104"><span class="linenos">7104</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
</span><span id="Parser-7105"><a href="#Parser-7105"><span class="linenos">7105</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
</span><span id="Parser-7106"><a href="#Parser-7106"><span class="linenos">7106</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">schema</span><span class="p">]</span>
</span><span id="Parser-7107"><a href="#Parser-7107"><span class="linenos">7107</span></a> <span class="k">return</span> <span class="p">[]</span>
</span><span id="Parser-7108"><a href="#Parser-7108"><span class="linenos">7108</span></a>
</span><span id="Parser-7109"><a href="#Parser-7109"><span class="linenos">7109</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_add_column</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-7110"><a href="#Parser-7110"><span class="linenos">7110</span></a>
</span><span id="Parser-7111"><a href="#Parser-7111"><span class="linenos">7111</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_table_alter</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-7112"><a href="#Parser-7112"><span class="linenos">7112</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ALTER_ALTER_PARSERS</span><span class="p">):</span>
</span><span id="Parser-7113"><a href="#Parser-7113"><span class="linenos">7113</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_ALTER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="Parser-7114"><a href="#Parser-7114"><span class="linenos">7114</span></a>
</span><span id="Parser-7115"><a href="#Parser-7115"><span class="linenos">7115</span></a> <span class="c1"># Many dialects support the ALTER [COLUMN] syntax, so if there is no</span>
</span><span id="Parser-7116"><a href="#Parser-7116"><span class="linenos">7116</span></a> <span class="c1"># keyword after ALTER we default to parsing this statement</span>
</span><span id="Parser-7117"><a href="#Parser-7117"><span class="linenos">7117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">)</span>
</span><span id="Parser-7118"><a href="#Parser-7118"><span class="linenos">7118</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-7119"><a href="#Parser-7119"><span class="linenos">7119</span></a>
</span><span id="Parser-7120"><a href="#Parser-7120"><span class="linenos">7120</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="Parser-7121"><a href="#Parser-7121"><span class="linenos">7121</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-7122"><a href="#Parser-7122"><span class="linenos">7122</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
</span><span id="Parser-7123"><a href="#Parser-7123"><span class="linenos">7123</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">())</span>
</span><span id="Parser-7124"><a href="#Parser-7124"><span class="linenos">7124</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">):</span>
</span><span id="Parser-7125"><a href="#Parser-7125"><span class="linenos">7125</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
</span><span id="Parser-7126"><a href="#Parser-7126"><span class="linenos">7126</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
</span><span id="Parser-7127"><a href="#Parser-7127"><span class="linenos">7127</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7128"><a href="#Parser-7128"><span class="linenos">7128</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
</span><span id="Parser-7129"><a href="#Parser-7129"><span class="linenos">7129</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
</span><span id="Parser-7130"><a href="#Parser-7130"><span class="linenos">7130</span></a> <span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="Parser-7131"><a href="#Parser-7131"><span class="linenos">7131</span></a> <span class="n">allow_null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span><span id="Parser-7132"><a href="#Parser-7132"><span class="linenos">7132</span></a> <span class="p">)</span>
</span><span id="Parser-7133"><a href="#Parser-7133"><span class="linenos">7133</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
</span><span id="Parser-7134"><a href="#Parser-7134"><span class="linenos">7134</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7135"><a href="#Parser-7135"><span class="linenos">7135</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
</span><span id="Parser-7136"><a href="#Parser-7136"><span class="linenos">7136</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
</span><span id="Parser-7137"><a href="#Parser-7137"><span class="linenos">7137</span></a> <span class="n">allow_null</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="Parser-7138"><a href="#Parser-7138"><span class="linenos">7138</span></a> <span class="p">)</span>
</span><span id="Parser-7139"><a href="#Parser-7139"><span class="linenos">7139</span></a>
</span><span id="Parser-7140"><a href="#Parser-7140"><span class="linenos">7140</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;VISIBLE&quot;</span><span class="p">):</span>
</span><span id="Parser-7141"><a href="#Parser-7141"><span class="linenos">7141</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">visible</span><span class="o">=</span><span class="s2">&quot;VISIBLE&quot;</span><span class="p">)</span>
</span><span id="Parser-7142"><a href="#Parser-7142"><span class="linenos">7142</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;INVISIBLE&quot;</span><span class="p">):</span>
</span><span id="Parser-7143"><a href="#Parser-7143"><span class="linenos">7143</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">visible</span><span class="o">=</span><span class="s2">&quot;INVISIBLE&quot;</span><span class="p">)</span>
</span><span id="Parser-7144"><a href="#Parser-7144"><span class="linenos">7144</span></a>
</span><span id="Parser-7145"><a href="#Parser-7145"><span class="linenos">7145</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">)</span>
</span><span id="Parser-7146"><a href="#Parser-7146"><span class="linenos">7146</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TYPE&quot;</span><span class="p">)</span>
</span><span id="Parser-7147"><a href="#Parser-7147"><span class="linenos">7147</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7148"><a href="#Parser-7148"><span class="linenos">7148</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
</span><span id="Parser-7149"><a href="#Parser-7149"><span class="linenos">7149</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
</span><span id="Parser-7150"><a href="#Parser-7150"><span class="linenos">7150</span></a> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(),</span>
</span><span id="Parser-7151"><a href="#Parser-7151"><span class="linenos">7151</span></a> <span class="n">collate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
</span><span id="Parser-7152"><a href="#Parser-7152"><span class="linenos">7152</span></a> <span class="n">using</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">(),</span>
</span><span id="Parser-7153"><a href="#Parser-7153"><span class="linenos">7153</span></a> <span class="p">)</span>
</span><span id="Parser-7154"><a href="#Parser-7154"><span class="linenos">7154</span></a>
</span><span id="Parser-7155"><a href="#Parser-7155"><span class="linenos">7155</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_diststyle</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterDistStyle</span><span class="p">:</span>
</span><span id="Parser-7156"><a href="#Parser-7156"><span class="linenos">7156</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;EVEN&quot;</span><span class="p">,</span> <span class="s2">&quot;AUTO&quot;</span><span class="p">)):</span>
</span><span id="Parser-7157"><a href="#Parser-7157"><span class="linenos">7157</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterDistStyle</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">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()))</span>
</span><span id="Parser-7158"><a href="#Parser-7158"><span class="linenos">7158</span></a>
</span><span id="Parser-7159"><a href="#Parser-7159"><span class="linenos">7159</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">,</span> <span class="s2">&quot;DISTKEY&quot;</span><span class="p">)</span>
</span><span id="Parser-7160"><a href="#Parser-7160"><span class="linenos">7160</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterDistStyle</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">())</span>
</span><span id="Parser-7161"><a href="#Parser-7161"><span class="linenos">7161</span></a>
</span><span id="Parser-7162"><a href="#Parser-7162"><span class="linenos">7162</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_sortkey</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">compound</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="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterSortKey</span><span class="p">:</span>
</span><span id="Parser-7163"><a href="#Parser-7163"><span class="linenos">7163</span></a> <span class="k">if</span> <span class="n">compound</span><span class="p">:</span>
</span><span id="Parser-7164"><a href="#Parser-7164"><span class="linenos">7164</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SORTKEY&quot;</span><span class="p">)</span>
</span><span id="Parser-7165"><a href="#Parser-7165"><span class="linenos">7165</span></a>
</span><span id="Parser-7166"><a href="#Parser-7166"><span class="linenos">7166</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-7167"><a href="#Parser-7167"><span class="linenos">7167</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7168"><a href="#Parser-7168"><span class="linenos">7168</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterSortKey</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">(),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</span>
</span><span id="Parser-7169"><a href="#Parser-7169"><span class="linenos">7169</span></a> <span class="p">)</span>
</span><span id="Parser-7170"><a href="#Parser-7170"><span class="linenos">7170</span></a>
</span><span id="Parser-7171"><a href="#Parser-7171"><span class="linenos">7171</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;AUTO&quot;</span><span class="p">,</span> <span class="s2">&quot;NONE&quot;</span><span class="p">))</span>
</span><span id="Parser-7172"><a href="#Parser-7172"><span class="linenos">7172</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7173"><a href="#Parser-7173"><span class="linenos">7173</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterSortKey</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">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()),</span> <span class="n">compound</span><span class="o">=</span><span class="n">compound</span>
</span><span id="Parser-7174"><a href="#Parser-7174"><span class="linenos">7174</span></a> <span class="p">)</span>
</span><span id="Parser-7175"><a href="#Parser-7175"><span class="linenos">7175</span></a>
</span><span id="Parser-7176"><a href="#Parser-7176"><span class="linenos">7176</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_table_drop</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-7177"><a href="#Parser-7177"><span class="linenos">7177</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
</span><span id="Parser-7178"><a href="#Parser-7178"><span class="linenos">7178</span></a>
</span><span id="Parser-7179"><a href="#Parser-7179"><span class="linenos">7179</span></a> <span class="n">partition_exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
</span><span id="Parser-7180"><a href="#Parser-7180"><span class="linenos">7180</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-7181"><a href="#Parser-7181"><span class="linenos">7181</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_partition</span><span class="p">(</span><span class="n">exists</span><span class="o">=</span><span class="n">partition_exists</span><span class="p">))</span>
</span><span id="Parser-7182"><a href="#Parser-7182"><span class="linenos">7182</span></a>
</span><span id="Parser-7183"><a href="#Parser-7183"><span class="linenos">7183</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-7184"><a href="#Parser-7184"><span class="linenos">7184</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_column</span><span class="p">)</span>
</span><span id="Parser-7185"><a href="#Parser-7185"><span class="linenos">7185</span></a>
</span><span id="Parser-7186"><a href="#Parser-7186"><span class="linenos">7186</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_table_rename</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">AlterRename</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">]:</span>
</span><span id="Parser-7187"><a href="#Parser-7187"><span class="linenos">7187</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">):</span>
</span><span id="Parser-7188"><a href="#Parser-7188"><span class="linenos">7188</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
</span><span id="Parser-7189"><a href="#Parser-7189"><span class="linenos">7189</span></a> <span class="n">old_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-7190"><a href="#Parser-7190"><span class="linenos">7190</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
</span><span id="Parser-7191"><a href="#Parser-7191"><span class="linenos">7191</span></a> <span class="n">new_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-7192"><a href="#Parser-7192"><span class="linenos">7192</span></a>
</span><span id="Parser-7193"><a href="#Parser-7193"><span class="linenos">7193</span></a> <span class="k">if</span> <span class="n">old_column</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">to</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">new_column</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-7194"><a href="#Parser-7194"><span class="linenos">7194</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7195"><a href="#Parser-7195"><span class="linenos">7195</span></a>
</span><span id="Parser-7196"><a href="#Parser-7196"><span class="linenos">7196</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">old_column</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">new_column</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">)</span>
</span><span id="Parser-7197"><a href="#Parser-7197"><span class="linenos">7197</span></a>
</span><span id="Parser-7198"><a href="#Parser-7198"><span class="linenos">7198</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
</span><span id="Parser-7199"><a href="#Parser-7199"><span class="linenos">7199</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterRename</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="Parser-7200"><a href="#Parser-7200"><span class="linenos">7200</span></a>
</span><span id="Parser-7201"><a href="#Parser-7201"><span class="linenos">7201</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter_table_set</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterSet</span><span class="p">:</span>
</span><span id="Parser-7202"><a href="#Parser-7202"><span class="linenos">7202</span></a> <span class="n">alter_set</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterSet</span><span class="p">)</span>
</span><span id="Parser-7203"><a href="#Parser-7203"><span class="linenos">7203</span></a>
</span><span id="Parser-7204"><a href="#Parser-7204"><span class="linenos">7204</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
</span><span id="Parser-7205"><a href="#Parser-7205"><span class="linenos">7205</span></a> <span class="s2">&quot;TABLE&quot;</span><span class="p">,</span> <span class="s2">&quot;PROPERTIES&quot;</span>
</span><span id="Parser-7206"><a href="#Parser-7206"><span class="linenos">7206</span></a> <span class="p">):</span>
</span><span id="Parser-7207"><a href="#Parser-7207"><span class="linenos">7207</span></a> <span class="n">alter_set</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="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">))</span>
</span><span id="Parser-7208"><a href="#Parser-7208"><span class="linenos">7208</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FILESTREAM_ON&quot;</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-7209"><a href="#Parser-7209"><span class="linenos">7209</span></a> <span class="n">alter_set</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="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()])</span>
</span><span id="Parser-7210"><a href="#Parser-7210"><span class="linenos">7210</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;LOGGED&quot;</span><span class="p">,</span> <span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)):</span>
</span><span id="Parser-7211"><a href="#Parser-7211"><span class="linenos">7211</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;option&quot;</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="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()))</span>
</span><span id="Parser-7212"><a href="#Parser-7212"><span class="linenos">7212</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;CLUSTER&quot;</span><span class="p">,</span> <span class="s2">&quot;OIDS&quot;</span><span class="p">)):</span>
</span><span id="Parser-7213"><a href="#Parser-7213"><span class="linenos">7213</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;option&quot;</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="sa">f</span><span class="s2">&quot;WITHOUT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">))</span>
</span><span id="Parser-7214"><a href="#Parser-7214"><span class="linenos">7214</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LOCATION&quot;</span><span class="p">):</span>
</span><span id="Parser-7215"><a href="#Parser-7215"><span class="linenos">7215</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;location&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="Parser-7216"><a href="#Parser-7216"><span class="linenos">7216</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ACCESS&quot;</span><span class="p">,</span> <span class="s2">&quot;METHOD&quot;</span><span class="p">):</span>
</span><span id="Parser-7217"><a href="#Parser-7217"><span class="linenos">7217</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;access_method&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="Parser-7218"><a href="#Parser-7218"><span class="linenos">7218</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLESPACE&quot;</span><span class="p">):</span>
</span><span id="Parser-7219"><a href="#Parser-7219"><span class="linenos">7219</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;tablespace&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="Parser-7220"><a href="#Parser-7220"><span class="linenos">7220</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FILE&quot;</span><span class="p">,</span> <span class="s2">&quot;FORMAT&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FILEFORMAT&quot;</span><span class="p">):</span>
</span><span id="Parser-7221"><a href="#Parser-7221"><span class="linenos">7221</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;file_format&quot;</span><span class="p">,</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()])</span>
</span><span id="Parser-7222"><a href="#Parser-7222"><span class="linenos">7222</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STAGE_FILE_FORMAT&quot;</span><span class="p">):</span>
</span><span id="Parser-7223"><a href="#Parser-7223"><span class="linenos">7223</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;file_format&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_options</span><span class="p">())</span>
</span><span id="Parser-7224"><a href="#Parser-7224"><span class="linenos">7224</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STAGE_COPY_OPTIONS&quot;</span><span class="p">):</span>
</span><span id="Parser-7225"><a href="#Parser-7225"><span class="linenos">7225</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;copy_options&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_options</span><span class="p">())</span>
</span><span id="Parser-7226"><a href="#Parser-7226"><span class="linenos">7226</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TAG&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TAGS&quot;</span><span class="p">):</span>
</span><span id="Parser-7227"><a href="#Parser-7227"><span class="linenos">7227</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;tag&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">))</span>
</span><span id="Parser-7228"><a href="#Parser-7228"><span class="linenos">7228</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7229"><a href="#Parser-7229"><span class="linenos">7229</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SERDE&quot;</span><span class="p">):</span>
</span><span id="Parser-7230"><a href="#Parser-7230"><span class="linenos">7230</span></a> <span class="n">alter_set</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;serde&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="Parser-7231"><a href="#Parser-7231"><span class="linenos">7231</span></a>
</span><span id="Parser-7232"><a href="#Parser-7232"><span class="linenos">7232</span></a> <span class="n">alter_set</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="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()])</span>
</span><span id="Parser-7233"><a href="#Parser-7233"><span class="linenos">7233</span></a>
</span><span id="Parser-7234"><a href="#Parser-7234"><span class="linenos">7234</span></a> <span class="k">return</span> <span class="n">alter_set</span>
</span><span id="Parser-7235"><a href="#Parser-7235"><span class="linenos">7235</span></a>
</span><span id="Parser-7236"><a href="#Parser-7236"><span class="linenos">7236</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alter</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="Parser-7237"><a href="#Parser-7237"><span class="linenos">7237</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-7238"><a href="#Parser-7238"><span class="linenos">7238</span></a>
</span><span id="Parser-7239"><a href="#Parser-7239"><span class="linenos">7239</span></a> <span class="n">alter_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ALTERABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-7240"><a href="#Parser-7240"><span class="linenos">7240</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">alter_token</span><span class="p">:</span>
</span><span id="Parser-7241"><a href="#Parser-7241"><span class="linenos">7241</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="Parser-7242"><a href="#Parser-7242"><span class="linenos">7242</span></a>
</span><span id="Parser-7243"><a href="#Parser-7243"><span class="linenos">7243</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
</span><span id="Parser-7244"><a href="#Parser-7244"><span class="linenos">7244</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
</span><span id="Parser-7245"><a href="#Parser-7245"><span class="linenos">7245</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-7246"><a href="#Parser-7246"><span class="linenos">7246</span></a> <span class="n">cluster</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_property</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-7247"><a href="#Parser-7247"><span class="linenos">7247</span></a>
</span><span id="Parser-7248"><a href="#Parser-7248"><span class="linenos">7248</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
</span><span id="Parser-7249"><a href="#Parser-7249"><span class="linenos">7249</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-7250"><a href="#Parser-7250"><span class="linenos">7250</span></a>
</span><span id="Parser-7251"><a href="#Parser-7251"><span class="linenos">7251</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-7252"><a href="#Parser-7252"><span class="linenos">7252</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
</span><span id="Parser-7253"><a href="#Parser-7253"><span class="linenos">7253</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
</span><span id="Parser-7254"><a href="#Parser-7254"><span class="linenos">7254</span></a> <span class="n">not_valid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;VALID&quot;</span><span class="p">)</span>
</span><span id="Parser-7255"><a href="#Parser-7255"><span class="linenos">7255</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_property</span><span class="p">)</span>
</span><span id="Parser-7256"><a href="#Parser-7256"><span class="linenos">7256</span></a>
</span><span id="Parser-7257"><a href="#Parser-7257"><span class="linenos">7257</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">actions</span><span class="p">:</span>
</span><span id="Parser-7258"><a href="#Parser-7258"><span class="linenos">7258</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7259"><a href="#Parser-7259"><span class="linenos">7259</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alter</span><span class="p">,</span>
</span><span id="Parser-7260"><a href="#Parser-7260"><span class="linenos">7260</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-7261"><a href="#Parser-7261"><span class="linenos">7261</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">alter_token</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span>
</span><span id="Parser-7262"><a href="#Parser-7262"><span class="linenos">7262</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
</span><span id="Parser-7263"><a href="#Parser-7263"><span class="linenos">7263</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
</span><span id="Parser-7264"><a href="#Parser-7264"><span class="linenos">7264</span></a> <span class="n">only</span><span class="o">=</span><span class="n">only</span><span class="p">,</span>
</span><span id="Parser-7265"><a href="#Parser-7265"><span class="linenos">7265</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
</span><span id="Parser-7266"><a href="#Parser-7266"><span class="linenos">7266</span></a> <span class="n">cluster</span><span class="o">=</span><span class="n">cluster</span><span class="p">,</span>
</span><span id="Parser-7267"><a href="#Parser-7267"><span class="linenos">7267</span></a> <span class="n">not_valid</span><span class="o">=</span><span class="n">not_valid</span><span class="p">,</span>
</span><span id="Parser-7268"><a href="#Parser-7268"><span class="linenos">7268</span></a> <span class="p">)</span>
</span><span id="Parser-7269"><a href="#Parser-7269"><span class="linenos">7269</span></a>
</span><span id="Parser-7270"><a href="#Parser-7270"><span class="linenos">7270</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="Parser-7271"><a href="#Parser-7271"><span class="linenos">7271</span></a>
</span><span id="Parser-7272"><a href="#Parser-7272"><span class="linenos">7272</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Analyze</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="Parser-7273"><a href="#Parser-7273"><span class="linenos">7273</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-7274"><a href="#Parser-7274"><span class="linenos">7274</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/analyze</span>
</span><span id="Parser-7275"><a href="#Parser-7275"><span class="linenos">7275</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-7276"><a href="#Parser-7276"><span class="linenos">7276</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Analyze</span><span class="p">)</span>
</span><span id="Parser-7277"><a href="#Parser-7277"><span class="linenos">7277</span></a>
</span><span id="Parser-7278"><a href="#Parser-7278"><span class="linenos">7278</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-7279"><a href="#Parser-7279"><span class="linenos">7279</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ANALYZE_STYLES</span><span class="p">):</span>
</span><span id="Parser-7280"><a href="#Parser-7280"><span class="linenos">7280</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;BUFFER_USAGE_LIMIT&quot;</span><span class="p">:</span>
</span><span id="Parser-7281"><a href="#Parser-7281"><span class="linenos">7281</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;BUFFER_USAGE_LIMIT </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Parser-7282"><a href="#Parser-7282"><span class="linenos">7282</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7283"><a href="#Parser-7283"><span class="linenos">7283</span></a> <span class="n">options</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-7284"><a href="#Parser-7284"><span class="linenos">7284</span></a>
</span><span id="Parser-7285"><a href="#Parser-7285"><span class="linenos">7285</span></a> <span class="n">this</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 class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7286"><a href="#Parser-7286"><span class="linenos">7286</span></a> <span class="n">inner_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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7287"><a href="#Parser-7287"><span class="linenos">7287</span></a>
</span><span id="Parser-7288"><a href="#Parser-7288"><span class="linenos">7288</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-7289"><a href="#Parser-7289"><span class="linenos">7289</span></a>
</span><span id="Parser-7290"><a href="#Parser-7290"><span class="linenos">7290</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">):</span>
</span><span id="Parser-7291"><a href="#Parser-7291"><span class="linenos">7291</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
</span><span id="Parser-7292"><a href="#Parser-7292"><span class="linenos">7292</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLES&quot;</span><span class="p">):</span>
</span><span id="Parser-7293"><a href="#Parser-7293"><span class="linenos">7293</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)):</span>
</span><span id="Parser-7294"><a href="#Parser-7294"><span class="linenos">7294</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">kind</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Parser-7295"><a href="#Parser-7295"><span class="linenos">7295</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-7296"><a href="#Parser-7296"><span class="linenos">7296</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DATABASE&quot;</span><span class="p">):</span>
</span><span id="Parser-7297"><a href="#Parser-7297"><span class="linenos">7297</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-7298"><a href="#Parser-7298"><span class="linenos">7298</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CLUSTER&quot;</span><span class="p">):</span>
</span><span id="Parser-7299"><a href="#Parser-7299"><span class="linenos">7299</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="Parser-7300"><a href="#Parser-7300"><span class="linenos">7300</span></a> <span class="c1"># Try matching inner expr keywords before fallback to parse table.</span>
</span><span id="Parser-7301"><a href="#Parser-7301"><span class="linenos">7301</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ANALYZE_EXPRESSION_PARSERS</span><span class="p">):</span>
</span><span id="Parser-7302"><a href="#Parser-7302"><span class="linenos">7302</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7303"><a href="#Parser-7303"><span class="linenos">7303</span></a> <span class="n">inner_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANALYZE_EXPRESSION_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="Parser-7304"><a href="#Parser-7304"><span class="linenos">7304</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7305"><a href="#Parser-7305"><span class="linenos">7305</span></a> <span class="c1"># Empty kind https://prestodb.io/docs/current/sql/analyze.html</span>
</span><span id="Parser-7306"><a href="#Parser-7306"><span class="linenos">7306</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7307"><a href="#Parser-7307"><span class="linenos">7307</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
</span><span id="Parser-7308"><a href="#Parser-7308"><span class="linenos">7308</span></a>
</span><span id="Parser-7309"><a href="#Parser-7309"><span class="linenos">7309</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_try_parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">)</span>
</span><span id="Parser-7310"><a href="#Parser-7310"><span class="linenos">7310</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">partition</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PARTITION_KEYWORDS</span><span class="p">):</span>
</span><span id="Parser-7311"><a href="#Parser-7311"><span class="linenos">7311</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="Parser-7312"><a href="#Parser-7312"><span class="linenos">7312</span></a>
</span><span id="Parser-7313"><a href="#Parser-7313"><span class="linenos">7313</span></a> <span class="c1"># https://docs.starrocks.io/docs/sql-reference/sql-statements/cbo_stats/ANALYZE_TABLE/</span>
</span><span id="Parser-7314"><a href="#Parser-7314"><span class="linenos">7314</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;SYNC&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
</span><span id="Parser-7315"><a href="#Parser-7315"><span class="linenos">7315</span></a> <span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;ASYNC&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
</span><span id="Parser-7316"><a href="#Parser-7316"><span class="linenos">7316</span></a> <span class="p">):</span>
</span><span id="Parser-7317"><a href="#Parser-7317"><span class="linenos">7317</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;WITH </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2"> MODE&quot;</span>
</span><span id="Parser-7318"><a href="#Parser-7318"><span class="linenos">7318</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7319"><a href="#Parser-7319"><span class="linenos">7319</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7320"><a href="#Parser-7320"><span class="linenos">7320</span></a>
</span><span id="Parser-7321"><a href="#Parser-7321"><span class="linenos">7321</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ANALYZE_EXPRESSION_PARSERS</span><span class="p">):</span>
</span><span id="Parser-7322"><a href="#Parser-7322"><span class="linenos">7322</span></a> <span class="n">inner_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ANALYZE_EXPRESSION_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">)</span>
</span><span id="Parser-7323"><a href="#Parser-7323"><span class="linenos">7323</span></a>
</span><span id="Parser-7324"><a href="#Parser-7324"><span class="linenos">7324</span></a> <span class="n">properties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_properties</span><span class="p">()</span>
</span><span id="Parser-7325"><a href="#Parser-7325"><span class="linenos">7325</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7326"><a href="#Parser-7326"><span class="linenos">7326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Analyze</span><span class="p">,</span>
</span><span id="Parser-7327"><a href="#Parser-7327"><span class="linenos">7327</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="Parser-7328"><a href="#Parser-7328"><span class="linenos">7328</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-7329"><a href="#Parser-7329"><span class="linenos">7329</span></a> <span class="n">mode</span><span class="o">=</span><span class="n">mode</span><span class="p">,</span>
</span><span id="Parser-7330"><a href="#Parser-7330"><span class="linenos">7330</span></a> <span class="n">partition</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
</span><span id="Parser-7331"><a href="#Parser-7331"><span class="linenos">7331</span></a> <span class="n">properties</span><span class="o">=</span><span class="n">properties</span><span class="p">,</span>
</span><span id="Parser-7332"><a href="#Parser-7332"><span class="linenos">7332</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">inner_expression</span><span class="p">,</span>
</span><span id="Parser-7333"><a href="#Parser-7333"><span class="linenos">7333</span></a> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">,</span>
</span><span id="Parser-7334"><a href="#Parser-7334"><span class="linenos">7334</span></a> <span class="p">)</span>
</span><span id="Parser-7335"><a href="#Parser-7335"><span class="linenos">7335</span></a>
</span><span id="Parser-7336"><a href="#Parser-7336"><span class="linenos">7336</span></a> <span class="c1"># https://spark.apache.org/docs/3.5.1/sql-ref-syntax-aux-analyze-table.html</span>
</span><span id="Parser-7337"><a href="#Parser-7337"><span class="linenos">7337</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze_statistics</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeStatistics</span><span class="p">:</span>
</span><span id="Parser-7338"><a href="#Parser-7338"><span class="linenos">7338</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7339"><a href="#Parser-7339"><span class="linenos">7339</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-7340"><a href="#Parser-7340"><span class="linenos">7340</span></a> <span class="n">option</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DELTA&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-7341"><a href="#Parser-7341"><span class="linenos">7341</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-7342"><a href="#Parser-7342"><span class="linenos">7342</span></a>
</span><span id="Parser-7343"><a href="#Parser-7343"><span class="linenos">7343</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
</span><span id="Parser-7344"><a href="#Parser-7344"><span class="linenos">7344</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting token STATISTICS&quot;</span><span class="p">)</span>
</span><span id="Parser-7345"><a href="#Parser-7345"><span class="linenos">7345</span></a>
</span><span id="Parser-7346"><a href="#Parser-7346"><span class="linenos">7346</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOSCAN&quot;</span><span class="p">):</span>
</span><span id="Parser-7347"><a href="#Parser-7347"><span class="linenos">7347</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;NOSCAN&quot;</span>
</span><span id="Parser-7348"><a href="#Parser-7348"><span class="linenos">7348</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
</span><span id="Parser-7349"><a href="#Parser-7349"><span class="linenos">7349</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">):</span>
</span><span id="Parser-7350"><a href="#Parser-7350"><span class="linenos">7350</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;FOR ALL COLUMNS&quot;</span>
</span><span id="Parser-7351"><a href="#Parser-7351"><span class="linenos">7351</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">):</span>
</span><span id="Parser-7352"><a href="#Parser-7352"><span class="linenos">7352</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;FOR COLUMNS&quot;</span>
</span><span id="Parser-7353"><a href="#Parser-7353"><span class="linenos">7353</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">)</span>
</span><span id="Parser-7354"><a href="#Parser-7354"><span class="linenos">7354</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SAMPLE&quot;</span><span class="p">):</span>
</span><span id="Parser-7355"><a href="#Parser-7355"><span class="linenos">7355</span></a> <span class="n">sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="Parser-7356"><a href="#Parser-7356"><span class="linenos">7356</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="Parser-7357"><a href="#Parser-7357"><span class="linenos">7357</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7358"><a href="#Parser-7358"><span class="linenos">7358</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeSample</span><span class="p">,</span>
</span><span id="Parser-7359"><a href="#Parser-7359"><span class="linenos">7359</span></a> <span class="n">sample</span><span class="o">=</span><span class="n">sample</span><span class="p">,</span>
</span><span id="Parser-7360"><a href="#Parser-7360"><span class="linenos">7360</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-7361"><a href="#Parser-7361"><span class="linenos">7361</span></a> <span class="p">)</span>
</span><span id="Parser-7362"><a href="#Parser-7362"><span class="linenos">7362</span></a> <span class="p">]</span>
</span><span id="Parser-7363"><a href="#Parser-7363"><span class="linenos">7363</span></a>
</span><span id="Parser-7364"><a href="#Parser-7364"><span class="linenos">7364</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7365"><a href="#Parser-7365"><span class="linenos">7365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeStatistics</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">option</span><span class="o">=</span><span class="n">option</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">expressions</span><span class="o">=</span><span class="n">expressions</span>
</span><span id="Parser-7366"><a href="#Parser-7366"><span class="linenos">7366</span></a> <span class="p">)</span>
</span><span id="Parser-7367"><a href="#Parser-7367"><span class="linenos">7367</span></a>
</span><span id="Parser-7368"><a href="#Parser-7368"><span class="linenos">7368</span></a> <span class="c1"># https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ANALYZE.html</span>
</span><span id="Parser-7369"><a href="#Parser-7369"><span class="linenos">7369</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze_validate</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeValidate</span><span class="p">:</span>
</span><span id="Parser-7370"><a href="#Parser-7370"><span class="linenos">7370</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7371"><a href="#Parser-7371"><span class="linenos">7371</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7372"><a href="#Parser-7372"><span class="linenos">7372</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7373"><a href="#Parser-7373"><span class="linenos">7373</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;REF&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">):</span>
</span><span id="Parser-7374"><a href="#Parser-7374"><span class="linenos">7374</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;REF&quot;</span>
</span><span id="Parser-7375"><a href="#Parser-7375"><span class="linenos">7375</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;UPDATE&quot;</span>
</span><span id="Parser-7376"><a href="#Parser-7376"><span class="linenos">7376</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;DANGLING&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
</span><span id="Parser-7377"><a href="#Parser-7377"><span class="linenos">7377</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;UPDATE SET DANGLING TO NULL&quot;</span>
</span><span id="Parser-7378"><a href="#Parser-7378"><span class="linenos">7378</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STRUCTURE&quot;</span><span class="p">):</span>
</span><span id="Parser-7379"><a href="#Parser-7379"><span class="linenos">7379</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;STRUCTURE&quot;</span>
</span><span id="Parser-7380"><a href="#Parser-7380"><span class="linenos">7380</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">,</span> <span class="s2">&quot;FAST&quot;</span><span class="p">):</span>
</span><span id="Parser-7381"><a href="#Parser-7381"><span class="linenos">7381</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;CASCADE FAST&quot;</span>
</span><span id="Parser-7382"><a href="#Parser-7382"><span class="linenos">7382</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">,</span> <span class="s2">&quot;COMPLETE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
</span><span id="Parser-7383"><a href="#Parser-7383"><span class="linenos">7383</span></a> <span class="p">(</span><span class="s2">&quot;ONLINE&quot;</span><span class="p">,</span> <span class="s2">&quot;OFFLINE&quot;</span><span class="p">)</span>
</span><span id="Parser-7384"><a href="#Parser-7384"><span class="linenos">7384</span></a> <span class="p">):</span>
</span><span id="Parser-7385"><a href="#Parser-7385"><span class="linenos">7385</span></a> <span class="n">this</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;CASCADE COMPLETE </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Parser-7386"><a href="#Parser-7386"><span class="linenos">7386</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_into</span><span class="p">()</span>
</span><span id="Parser-7387"><a href="#Parser-7387"><span class="linenos">7387</span></a>
</span><span id="Parser-7388"><a href="#Parser-7388"><span class="linenos">7388</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeValidate</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</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">expression</span><span class="p">)</span>
</span><span id="Parser-7389"><a href="#Parser-7389"><span class="linenos">7389</span></a>
</span><span id="Parser-7390"><a href="#Parser-7390"><span class="linenos">7390</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze_columns</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">AnalyzeColumns</span><span class="p">]:</span>
</span><span id="Parser-7391"><a href="#Parser-7391"><span class="linenos">7391</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-7392"><a href="#Parser-7392"><span class="linenos">7392</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">):</span>
</span><span id="Parser-7393"><a href="#Parser-7393"><span class="linenos">7393</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeColumns</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Parser-7394"><a href="#Parser-7394"><span class="linenos">7394</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7395"><a href="#Parser-7395"><span class="linenos">7395</span></a>
</span><span id="Parser-7396"><a href="#Parser-7396"><span class="linenos">7396</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze_delete</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">AnalyzeDelete</span><span class="p">]:</span>
</span><span id="Parser-7397"><a href="#Parser-7397"><span class="linenos">7397</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SYSTEM&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-7398"><a href="#Parser-7398"><span class="linenos">7398</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STATISTICS&quot;</span><span class="p">):</span>
</span><span id="Parser-7399"><a href="#Parser-7399"><span class="linenos">7399</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeDelete</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="Parser-7400"><a href="#Parser-7400"><span class="linenos">7400</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7401"><a href="#Parser-7401"><span class="linenos">7401</span></a>
</span><span id="Parser-7402"><a href="#Parser-7402"><span class="linenos">7402</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze_list</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">AnalyzeListChainedRows</span><span class="p">]:</span>
</span><span id="Parser-7403"><a href="#Parser-7403"><span class="linenos">7403</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
</span><span id="Parser-7404"><a href="#Parser-7404"><span class="linenos">7404</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeListChainedRows</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_into</span><span class="p">())</span>
</span><span id="Parser-7405"><a href="#Parser-7405"><span class="linenos">7405</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7406"><a href="#Parser-7406"><span class="linenos">7406</span></a>
</span><span id="Parser-7407"><a href="#Parser-7407"><span class="linenos">7407</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.4/en/analyze-table.html</span>
</span><span id="Parser-7408"><a href="#Parser-7408"><span class="linenos">7408</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_analyze_histogram</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeHistogram</span><span class="p">:</span>
</span><span id="Parser-7409"><a href="#Parser-7409"><span class="linenos">7409</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-7410"><a href="#Parser-7410"><span class="linenos">7410</span></a> <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="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7411"><a href="#Parser-7411"><span class="linenos">7411</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-7412"><a href="#Parser-7412"><span class="linenos">7412</span></a> <span class="n">update_options</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7413"><a href="#Parser-7413"><span class="linenos">7413</span></a>
</span><span id="Parser-7414"><a href="#Parser-7414"><span class="linenos">7414</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HISTOGRAM&quot;</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">):</span>
</span><span id="Parser-7415"><a href="#Parser-7415"><span class="linenos">7415</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">)</span>
</span><span id="Parser-7416"><a href="#Parser-7416"><span class="linenos">7416</span></a> <span class="n">with_expressions</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-7417"><a href="#Parser-7417"><span class="linenos">7417</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
</span><span id="Parser-7418"><a href="#Parser-7418"><span class="linenos">7418</span></a> <span class="c1"># https://docs.starrocks.io/docs/sql-reference/sql-statements/cbo_stats/ANALYZE_TABLE/</span>
</span><span id="Parser-7419"><a href="#Parser-7419"><span class="linenos">7419</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;SYNC&quot;</span><span class="p">,</span> <span class="s2">&quot;ASYNC&quot;</span><span class="p">)):</span>
</span><span id="Parser-7420"><a href="#Parser-7420"><span class="linenos">7420</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MODE&quot;</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-7421"><a href="#Parser-7421"><span class="linenos">7421</span></a> <span class="n">with_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2"> MODE&quot;</span><span class="p">)</span>
</span><span id="Parser-7422"><a href="#Parser-7422"><span class="linenos">7422</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-7423"><a href="#Parser-7423"><span class="linenos">7423</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7424"><a href="#Parser-7424"><span class="linenos">7424</span></a> <span class="n">buckets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
</span><span id="Parser-7425"><a href="#Parser-7425"><span class="linenos">7425</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKETS&quot;</span><span class="p">):</span>
</span><span id="Parser-7426"><a href="#Parser-7426"><span class="linenos">7426</span></a> <span class="n">with_expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">buckets</span><span class="si">}</span><span class="s2"> BUCKETS&quot;</span><span class="p">)</span>
</span><span id="Parser-7427"><a href="#Parser-7427"><span class="linenos">7427</span></a> <span class="k">if</span> <span class="n">with_expressions</span><span class="p">:</span>
</span><span id="Parser-7428"><a href="#Parser-7428"><span class="linenos">7428</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeWith</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">with_expressions</span><span class="p">)</span>
</span><span id="Parser-7429"><a href="#Parser-7429"><span class="linenos">7429</span></a>
</span><span id="Parser-7430"><a href="#Parser-7430"><span class="linenos">7430</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MANUAL&quot;</span><span class="p">,</span> <span class="s2">&quot;AUTO&quot;</span><span class="p">))</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span>
</span><span id="Parser-7431"><a href="#Parser-7431"><span class="linenos">7431</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span>
</span><span id="Parser-7432"><a href="#Parser-7432"><span class="linenos">7432</span></a> <span class="p">):</span>
</span><span id="Parser-7433"><a href="#Parser-7433"><span class="linenos">7433</span></a> <span class="n">update_options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-7434"><a href="#Parser-7434"><span class="linenos">7434</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-7435"><a href="#Parser-7435"><span class="linenos">7435</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">):</span>
</span><span id="Parser-7436"><a href="#Parser-7436"><span class="linenos">7436</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">UsingData</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
</span><span id="Parser-7437"><a href="#Parser-7437"><span class="linenos">7437</span></a>
</span><span id="Parser-7438"><a href="#Parser-7438"><span class="linenos">7438</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7439"><a href="#Parser-7439"><span class="linenos">7439</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AnalyzeHistogram</span><span class="p">,</span>
</span><span id="Parser-7440"><a href="#Parser-7440"><span class="linenos">7440</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-7441"><a href="#Parser-7441"><span class="linenos">7441</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-7442"><a href="#Parser-7442"><span class="linenos">7442</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="Parser-7443"><a href="#Parser-7443"><span class="linenos">7443</span></a> <span class="n">update_options</span><span class="o">=</span><span class="n">update_options</span><span class="p">,</span>
</span><span id="Parser-7444"><a href="#Parser-7444"><span class="linenos">7444</span></a> <span class="p">)</span>
</span><span id="Parser-7445"><a href="#Parser-7445"><span class="linenos">7445</span></a>
</span><span id="Parser-7446"><a href="#Parser-7446"><span class="linenos">7446</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_merge</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span>
</span><span id="Parser-7447"><a href="#Parser-7447"><span class="linenos">7447</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span>
</span><span id="Parser-7448"><a href="#Parser-7448"><span class="linenos">7448</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="Parser-7449"><a href="#Parser-7449"><span class="linenos">7449</span></a>
</span><span id="Parser-7450"><a href="#Parser-7450"><span class="linenos">7450</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-7451"><a href="#Parser-7451"><span class="linenos">7451</span></a> <span class="n">target</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
</span><span id="Parser-7452"><a href="#Parser-7452"><span class="linenos">7452</span></a>
</span><span id="Parser-7453"><a href="#Parser-7453"><span class="linenos">7453</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span>
</span><span id="Parser-7454"><a href="#Parser-7454"><span class="linenos">7454</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
</span><span id="Parser-7455"><a href="#Parser-7455"><span class="linenos">7455</span></a>
</span><span id="Parser-7456"><a href="#Parser-7456"><span class="linenos">7456</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
</span><span id="Parser-7457"><a href="#Parser-7457"><span class="linenos">7457</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span>
</span><span id="Parser-7458"><a href="#Parser-7458"><span class="linenos">7458</span></a>
</span><span id="Parser-7459"><a href="#Parser-7459"><span class="linenos">7459</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7460"><a href="#Parser-7460"><span class="linenos">7460</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
</span><span id="Parser-7461"><a href="#Parser-7461"><span class="linenos">7461</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
</span><span id="Parser-7462"><a href="#Parser-7462"><span class="linenos">7462</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
</span><span id="Parser-7463"><a href="#Parser-7463"><span class="linenos">7463</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
</span><span id="Parser-7464"><a href="#Parser-7464"><span class="linenos">7464</span></a> <span class="n">whens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_when_matched</span><span class="p">(),</span>
</span><span id="Parser-7465"><a href="#Parser-7465"><span class="linenos">7465</span></a> <span class="n">returning</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_returning</span><span class="p">(),</span>
</span><span id="Parser-7466"><a href="#Parser-7466"><span class="linenos">7466</span></a> <span class="p">)</span>
</span><span id="Parser-7467"><a href="#Parser-7467"><span class="linenos">7467</span></a>
</span><span id="Parser-7468"><a href="#Parser-7468"><span class="linenos">7468</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_when_matched</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Whens</span><span class="p">:</span>
</span><span id="Parser-7469"><a href="#Parser-7469"><span class="linenos">7469</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-7470"><a href="#Parser-7470"><span class="linenos">7470</span></a>
</span><span id="Parser-7471"><a href="#Parser-7471"><span class="linenos">7471</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
</span><span id="Parser-7472"><a href="#Parser-7472"><span class="linenos">7472</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
</span><span id="Parser-7473"><a href="#Parser-7473"><span class="linenos">7473</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCHED&quot;</span><span class="p">)</span>
</span><span id="Parser-7474"><a href="#Parser-7474"><span class="linenos">7474</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-7475"><a href="#Parser-7475"><span class="linenos">7475</span></a> <span class="kc">False</span>
</span><span id="Parser-7476"><a href="#Parser-7476"><span class="linenos">7476</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;TARGET&quot;</span><span class="p">)</span>
</span><span id="Parser-7477"><a href="#Parser-7477"><span class="linenos">7477</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE&quot;</span><span class="p">)</span>
</span><span id="Parser-7478"><a href="#Parser-7478"><span class="linenos">7478</span></a> <span class="p">)</span>
</span><span id="Parser-7479"><a href="#Parser-7479"><span class="linenos">7479</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-7480"><a href="#Parser-7480"><span class="linenos">7480</span></a>
</span><span id="Parser-7481"><a href="#Parser-7481"><span class="linenos">7481</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
</span><span id="Parser-7482"><a href="#Parser-7482"><span class="linenos">7482</span></a>
</span><span id="Parser-7483"><a href="#Parser-7483"><span class="linenos">7483</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">):</span>
</span><span id="Parser-7484"><a href="#Parser-7484"><span class="linenos">7484</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
</span><span id="Parser-7485"><a href="#Parser-7485"><span class="linenos">7485</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
</span><span id="Parser-7486"><a href="#Parser-7486"><span class="linenos">7486</span></a> <span class="n">then</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 class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Insert</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="Parser-7487"><a href="#Parser-7487"><span class="linenos">7487</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7488"><a href="#Parser-7488"><span class="linenos">7488</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7489"><a href="#Parser-7489"><span class="linenos">7489</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
</span><span id="Parser-7490"><a href="#Parser-7490"><span class="linenos">7490</span></a> <span class="n">this</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="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
</span><span id="Parser-7491"><a href="#Parser-7491"><span class="linenos">7491</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUES&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
</span><span id="Parser-7492"><a href="#Parser-7492"><span class="linenos">7492</span></a> <span class="p">)</span>
</span><span id="Parser-7493"><a href="#Parser-7493"><span class="linenos">7493</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">):</span>
</span><span id="Parser-7494"><a href="#Parser-7494"><span class="linenos">7494</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
</span><span id="Parser-7495"><a href="#Parser-7495"><span class="linenos">7495</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
</span><span id="Parser-7496"><a href="#Parser-7496"><span class="linenos">7496</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-7497"><a href="#Parser-7497"><span class="linenos">7497</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7498"><a href="#Parser-7498"><span class="linenos">7498</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7499"><a href="#Parser-7499"><span class="linenos">7499</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
</span><span id="Parser-7500"><a href="#Parser-7500"><span class="linenos">7500</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">)</span>
</span><span id="Parser-7501"><a href="#Parser-7501"><span class="linenos">7501</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">),</span>
</span><span id="Parser-7502"><a href="#Parser-7502"><span class="linenos">7502</span></a> <span class="p">)</span>
</span><span id="Parser-7503"><a href="#Parser-7503"><span class="linenos">7503</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">):</span>
</span><span id="Parser-7504"><a href="#Parser-7504"><span class="linenos">7504</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="Parser-7505"><a href="#Parser-7505"><span class="linenos">7505</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7506"><a href="#Parser-7506"><span class="linenos">7506</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONFLICT_ACTIONS</span><span class="p">)</span>
</span><span id="Parser-7507"><a href="#Parser-7507"><span class="linenos">7507</span></a>
</span><span id="Parser-7508"><a href="#Parser-7508"><span class="linenos">7508</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
</span><span id="Parser-7509"><a href="#Parser-7509"><span class="linenos">7509</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7510"><a href="#Parser-7510"><span class="linenos">7510</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
</span><span id="Parser-7511"><a href="#Parser-7511"><span class="linenos">7511</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
</span><span id="Parser-7512"><a href="#Parser-7512"><span class="linenos">7512</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
</span><span id="Parser-7513"><a href="#Parser-7513"><span class="linenos">7513</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
</span><span id="Parser-7514"><a href="#Parser-7514"><span class="linenos">7514</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
</span><span id="Parser-7515"><a href="#Parser-7515"><span class="linenos">7515</span></a> <span class="p">)</span>
</span><span id="Parser-7516"><a href="#Parser-7516"><span class="linenos">7516</span></a> <span class="p">)</span>
</span><span id="Parser-7517"><a href="#Parser-7517"><span class="linenos">7517</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Whens</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">whens</span><span class="p">)</span>
</span><span id="Parser-7518"><a href="#Parser-7518"><span class="linenos">7518</span></a>
</span><span id="Parser-7519"><a href="#Parser-7519"><span class="linenos">7519</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_show</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-7520"><a href="#Parser-7520"><span class="linenos">7520</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
</span><span id="Parser-7521"><a href="#Parser-7521"><span class="linenos">7521</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
</span><span id="Parser-7522"><a href="#Parser-7522"><span class="linenos">7522</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
</span><span id="Parser-7523"><a href="#Parser-7523"><span class="linenos">7523</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-7524"><a href="#Parser-7524"><span class="linenos">7524</span></a>
</span><span id="Parser-7525"><a href="#Parser-7525"><span class="linenos">7525</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
</span><span id="Parser-7526"><a href="#Parser-7526"><span class="linenos">7526</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</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="Parser-7527"><a href="#Parser-7527"><span class="linenos">7527</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="Parser-7528"><a href="#Parser-7528"><span class="linenos">7528</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-7529"><a href="#Parser-7529"><span class="linenos">7529</span></a>
</span><span id="Parser-7530"><a href="#Parser-7530"><span class="linenos">7530</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;GLOBAL&quot;</span><span class="p">,</span> <span class="s2">&quot;SESSION&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">):</span>
</span><span id="Parser-7531"><a href="#Parser-7531"><span class="linenos">7531</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_transaction</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">)</span>
</span><span id="Parser-7532"><a href="#Parser-7532"><span class="linenos">7532</span></a>
</span><span id="Parser-7533"><a href="#Parser-7533"><span class="linenos">7533</span></a> <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-7534"><a href="#Parser-7534"><span class="linenos">7534</span></a> <span class="n">assignment_delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;=&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">))</span>
</span><span id="Parser-7535"><a href="#Parser-7535"><span class="linenos">7535</span></a>
</span><span id="Parser-7536"><a href="#Parser-7536"><span class="linenos">7536</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">left</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_REQUIRES_ASSIGNMENT_DELIMITER</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">assignment_delimiter</span><span class="p">):</span>
</span><span id="Parser-7537"><a href="#Parser-7537"><span class="linenos">7537</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-7538"><a href="#Parser-7538"><span class="linenos">7538</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7539"><a href="#Parser-7539"><span class="linenos">7539</span></a>
</span><span id="Parser-7540"><a href="#Parser-7540"><span class="linenos">7540</span></a> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-7541"><a href="#Parser-7541"><span class="linenos">7541</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">right</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">)):</span>
</span><span id="Parser-7542"><a href="#Parser-7542"><span class="linenos">7542</span></a> <span class="n">right</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">right</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="Parser-7543"><a href="#Parser-7543"><span class="linenos">7543</span></a>
</span><span id="Parser-7544"><a href="#Parser-7544"><span class="linenos">7544</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</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="Parser-7545"><a href="#Parser-7545"><span class="linenos">7545</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</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">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="Parser-7546"><a href="#Parser-7546"><span class="linenos">7546</span></a>
</span><span id="Parser-7547"><a href="#Parser-7547"><span class="linenos">7547</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_set_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="Parser-7548"><a href="#Parser-7548"><span class="linenos">7548</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)</span>
</span><span id="Parser-7549"><a href="#Parser-7549"><span class="linenos">7549</span></a> <span class="n">characteristics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="Parser-7550"><a href="#Parser-7550"><span class="linenos">7550</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_CHARACTERISTICS</span><span class="p">)</span>
</span><span id="Parser-7551"><a href="#Parser-7551"><span class="linenos">7551</span></a> <span class="p">)</span>
</span><span id="Parser-7552"><a href="#Parser-7552"><span class="linenos">7552</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7553"><a href="#Parser-7553"><span class="linenos">7553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
</span><span id="Parser-7554"><a href="#Parser-7554"><span class="linenos">7554</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
</span><span id="Parser-7555"><a href="#Parser-7555"><span class="linenos">7555</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span>
</span><span id="Parser-7556"><a href="#Parser-7556"><span class="linenos">7556</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="n">global_</span><span class="p">},</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-7557"><a href="#Parser-7557"><span class="linenos">7557</span></a> <span class="p">)</span>
</span><span id="Parser-7558"><a href="#Parser-7558"><span class="linenos">7558</span></a>
</span><span id="Parser-7559"><a href="#Parser-7559"><span class="linenos">7559</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_set_item</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-7560"><a href="#Parser-7560"><span class="linenos">7560</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
</span><span id="Parser-7561"><a href="#Parser-7561"><span class="linenos">7561</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">if</span> <span class="n">parser</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
</span><span id="Parser-7562"><a href="#Parser-7562"><span class="linenos">7562</span></a>
</span><span id="Parser-7563"><a href="#Parser-7563"><span class="linenos">7563</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</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="n">tag</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">exp</span><span class="o">.</span><span class="n">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="Parser-7564"><a href="#Parser-7564"><span class="linenos">7564</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-7565"><a href="#Parser-7565"><span class="linenos">7565</span></a> <span class="n">set_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7566"><a href="#Parser-7566"><span class="linenos">7566</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
</span><span id="Parser-7567"><a href="#Parser-7567"><span class="linenos">7567</span></a> <span class="p">)</span>
</span><span id="Parser-7568"><a href="#Parser-7568"><span class="linenos">7568</span></a>
</span><span id="Parser-7569"><a href="#Parser-7569"><span class="linenos">7569</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-7570"><a href="#Parser-7570"><span class="linenos">7570</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-7571"><a href="#Parser-7571"><span class="linenos">7571</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-7572"><a href="#Parser-7572"><span class="linenos">7572</span></a>
</span><span id="Parser-7573"><a href="#Parser-7573"><span class="linenos">7573</span></a> <span class="k">return</span> <span class="n">set_</span>
</span><span id="Parser-7574"><a href="#Parser-7574"><span class="linenos">7574</span></a>
</span><span id="Parser-7575"><a href="#Parser-7575"><span class="linenos">7575</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_var_from_options</span><span class="p">(</span>
</span><span id="Parser-7576"><a href="#Parser-7576"><span class="linenos">7576</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">OPTIONS_TYPE</span><span class="p">,</span> <span class="n">raise_unmatched</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Parser-7577"><a href="#Parser-7577"><span class="linenos">7577</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">Var</span><span class="p">]:</span>
</span><span id="Parser-7578"><a href="#Parser-7578"><span class="linenos">7578</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Parser-7579"><a href="#Parser-7579"><span class="linenos">7579</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span>
</span><span id="Parser-7580"><a href="#Parser-7580"><span class="linenos">7580</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7581"><a href="#Parser-7581"><span class="linenos">7581</span></a>
</span><span id="Parser-7582"><a href="#Parser-7582"><span class="linenos">7582</span></a> <span class="n">option</span> <span class="o">=</span> <span class="n">start</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-7583"><a href="#Parser-7583"><span class="linenos">7583</span></a> <span class="n">continuations</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
</span><span id="Parser-7584"><a href="#Parser-7584"><span class="linenos">7584</span></a>
</span><span id="Parser-7585"><a href="#Parser-7585"><span class="linenos">7585</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-7586"><a href="#Parser-7586"><span class="linenos">7586</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-7587"><a href="#Parser-7587"><span class="linenos">7587</span></a> <span class="k">for</span> <span class="n">keywords</span> <span class="ow">in</span> <span class="n">continuations</span> <span class="ow">or</span> <span class="p">[]:</span>
</span><span id="Parser-7588"><a href="#Parser-7588"><span class="linenos">7588</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">keywords</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
</span><span id="Parser-7589"><a href="#Parser-7589"><span class="linenos">7589</span></a> <span class="n">keywords</span> <span class="o">=</span> <span class="p">(</span><span class="n">keywords</span><span class="p">,)</span>
</span><span id="Parser-7590"><a href="#Parser-7590"><span class="linenos">7590</span></a>
</span><span id="Parser-7591"><a href="#Parser-7591"><span class="linenos">7591</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="o">*</span><span class="n">keywords</span><span class="p">):</span>
</span><span id="Parser-7592"><a href="#Parser-7592"><span class="linenos">7592</span></a> <span class="n">option</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">option</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">keywords</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span id="Parser-7593"><a href="#Parser-7593"><span class="linenos">7593</span></a> <span class="k">break</span>
</span><span id="Parser-7594"><a href="#Parser-7594"><span class="linenos">7594</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7595"><a href="#Parser-7595"><span class="linenos">7595</span></a> <span class="k">if</span> <span class="n">continuations</span> <span class="ow">or</span> <span class="n">continuations</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-7596"><a href="#Parser-7596"><span class="linenos">7596</span></a> <span class="k">if</span> <span class="n">raise_unmatched</span><span class="p">:</span>
</span><span id="Parser-7597"><a href="#Parser-7597"><span class="linenos">7597</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown option </span><span class="si">{</span><span class="n">option</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Parser-7598"><a href="#Parser-7598"><span class="linenos">7598</span></a>
</span><span id="Parser-7599"><a href="#Parser-7599"><span class="linenos">7599</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-7600"><a href="#Parser-7600"><span class="linenos">7600</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7601"><a href="#Parser-7601"><span class="linenos">7601</span></a>
</span><span id="Parser-7602"><a href="#Parser-7602"><span class="linenos">7602</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
</span><span id="Parser-7603"><a href="#Parser-7603"><span class="linenos">7603</span></a>
</span><span id="Parser-7604"><a href="#Parser-7604"><span class="linenos">7604</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="Parser-7605"><a href="#Parser-7605"><span class="linenos">7605</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-7606"><a href="#Parser-7606"><span class="linenos">7606</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-7607"><a href="#Parser-7607"><span class="linenos">7607</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-7608"><a href="#Parser-7608"><span class="linenos">7608</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="Parser-7609"><a href="#Parser-7609"><span class="linenos">7609</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_warn_unsupported</span><span class="p">()</span>
</span><span id="Parser-7610"><a href="#Parser-7610"><span class="linenos">7610</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">[:</span><span class="n">size</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="n">size</span><span class="p">:])</span>
</span><span id="Parser-7611"><a href="#Parser-7611"><span class="linenos">7611</span></a>
</span><span id="Parser-7612"><a href="#Parser-7612"><span class="linenos">7612</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
</span><span id="Parser-7613"><a href="#Parser-7613"><span class="linenos">7613</span></a> <span class="n">settings</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-7614"><a href="#Parser-7614"><span class="linenos">7614</span></a>
</span><span id="Parser-7615"><a href="#Parser-7615"><span class="linenos">7615</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="Parser-7616"><a href="#Parser-7616"><span class="linenos">7616</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-7617"><a href="#Parser-7617"><span class="linenos">7617</span></a>
</span><span id="Parser-7618"><a href="#Parser-7618"><span class="linenos">7618</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-7619"><a href="#Parser-7619"><span class="linenos">7619</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-7620"><a href="#Parser-7620"><span class="linenos">7620</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-7621"><a href="#Parser-7621"><span class="linenos">7621</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="Parser-7622"><a href="#Parser-7622"><span class="linenos">7622</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-7623"><a href="#Parser-7623"><span class="linenos">7623</span></a> <span class="k">break</span>
</span><span id="Parser-7624"><a href="#Parser-7624"><span class="linenos">7624</span></a> <span class="n">settings</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">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
</span><span id="Parser-7625"><a href="#Parser-7625"><span class="linenos">7625</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span>
</span><span id="Parser-7626"><a href="#Parser-7626"><span class="linenos">7626</span></a>
</span><span id="Parser-7627"><a href="#Parser-7627"><span class="linenos">7627</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-7628"><a href="#Parser-7628"><span class="linenos">7628</span></a>
</span><span id="Parser-7629"><a href="#Parser-7629"><span class="linenos">7629</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7630"><a href="#Parser-7630"><span class="linenos">7630</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</span>
</span><span id="Parser-7631"><a href="#Parser-7631"><span class="linenos">7631</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-7632"><a href="#Parser-7632"><span class="linenos">7632</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser-7633"><a href="#Parser-7633"><span class="linenos">7633</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
</span><span id="Parser-7634"><a href="#Parser-7634"><span class="linenos">7634</span></a> <span class="p">)</span>
</span><span id="Parser-7635"><a href="#Parser-7635"><span class="linenos">7635</span></a>
</span><span id="Parser-7636"><a href="#Parser-7636"><span class="linenos">7636</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
</span><span id="Parser-7637"><a href="#Parser-7637"><span class="linenos">7637</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="Parser-7638"><a href="#Parser-7638"><span class="linenos">7638</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
</span><span id="Parser-7639"><a href="#Parser-7639"><span class="linenos">7639</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
</span><span id="Parser-7640"><a href="#Parser-7640"><span class="linenos">7640</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="Parser-7641"><a href="#Parser-7641"><span class="linenos">7641</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
</span><span id="Parser-7642"><a href="#Parser-7642"><span class="linenos">7642</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="Parser-7643"><a href="#Parser-7643"><span class="linenos">7643</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7644"><a href="#Parser-7644"><span class="linenos">7644</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
</span><span id="Parser-7645"><a href="#Parser-7645"><span class="linenos">7645</span></a> <span class="nb">min</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">0</span><span class="p">)</span>
</span><span id="Parser-7646"><a href="#Parser-7646"><span class="linenos">7646</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-7647"><a href="#Parser-7647"><span class="linenos">7647</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictRange</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="nb">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
</span><span id="Parser-7648"><a href="#Parser-7648"><span class="linenos">7648</span></a>
</span><span id="Parser-7649"><a href="#Parser-7649"><span class="linenos">7649</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_comprehension</span><span class="p">(</span>
</span><span id="Parser-7650"><a href="#Parser-7650"><span class="linenos">7650</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</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="Parser-7651"><a href="#Parser-7651"><span class="linenos">7651</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">Comprehension</span><span class="p">]:</span>
</span><span id="Parser-7652"><a href="#Parser-7652"><span class="linenos">7652</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-7653"><a href="#Parser-7653"><span class="linenos">7653</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-7654"><a href="#Parser-7654"><span class="linenos">7654</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
</span><span id="Parser-7655"><a href="#Parser-7655"><span class="linenos">7655</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</span><span id="Parser-7656"><a href="#Parser-7656"><span class="linenos">7656</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7657"><a href="#Parser-7657"><span class="linenos">7657</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
</span><span id="Parser-7658"><a href="#Parser-7658"><span class="linenos">7658</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_assignment</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-7659"><a href="#Parser-7659"><span class="linenos">7659</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7660"><a href="#Parser-7660"><span class="linenos">7660</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">,</span>
</span><span id="Parser-7661"><a href="#Parser-7661"><span class="linenos">7661</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-7662"><a href="#Parser-7662"><span class="linenos">7662</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
</span><span id="Parser-7663"><a href="#Parser-7663"><span class="linenos">7663</span></a> <span class="n">iterator</span><span class="o">=</span><span class="n">iterator</span><span class="p">,</span>
</span><span id="Parser-7664"><a href="#Parser-7664"><span class="linenos">7664</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
</span><span id="Parser-7665"><a href="#Parser-7665"><span class="linenos">7665</span></a> <span class="p">)</span>
</span><span id="Parser-7666"><a href="#Parser-7666"><span class="linenos">7666</span></a>
</span><span id="Parser-7667"><a href="#Parser-7667"><span class="linenos">7667</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_heredoc</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">]:</span>
</span><span id="Parser-7668"><a href="#Parser-7668"><span class="linenos">7668</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">):</span>
</span><span id="Parser-7669"><a href="#Parser-7669"><span class="linenos">7669</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="Parser-7670"><a href="#Parser-7670"><span class="linenos">7670</span></a>
</span><span id="Parser-7671"><a href="#Parser-7671"><span class="linenos">7671</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">):</span>
</span><span id="Parser-7672"><a href="#Parser-7672"><span class="linenos">7672</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7673"><a href="#Parser-7673"><span class="linenos">7673</span></a>
</span><span id="Parser-7674"><a href="#Parser-7674"><span class="linenos">7674</span></a> <span class="n">tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
</span><span id="Parser-7675"><a href="#Parser-7675"><span class="linenos">7675</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7676"><a href="#Parser-7676"><span class="linenos">7676</span></a>
</span><span id="Parser-7677"><a href="#Parser-7677"><span class="linenos">7677</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">():</span>
</span><span id="Parser-7678"><a href="#Parser-7678"><span class="linenos">7678</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-7679"><a href="#Parser-7679"><span class="linenos">7679</span></a> <span class="n">tags</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">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-7680"><a href="#Parser-7680"><span class="linenos">7680</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7681"><a href="#Parser-7681"><span class="linenos">7681</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;No closing $ found&quot;</span><span class="p">)</span>
</span><span id="Parser-7682"><a href="#Parser-7682"><span class="linenos">7682</span></a>
</span><span id="Parser-7683"><a href="#Parser-7683"><span class="linenos">7683</span></a> <span class="k">if</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;$&quot;</span><span class="p">:</span>
</span><span id="Parser-7684"><a href="#Parser-7684"><span class="linenos">7684</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">):</span>
</span><span id="Parser-7685"><a href="#Parser-7685"><span class="linenos">7685</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span><span id="Parser-7686"><a href="#Parser-7686"><span class="linenos">7686</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">)</span>
</span><span id="Parser-7687"><a href="#Parser-7687"><span class="linenos">7687</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7688"><a href="#Parser-7688"><span class="linenos">7688</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;No closing $ found&quot;</span><span class="p">)</span>
</span><span id="Parser-7689"><a href="#Parser-7689"><span class="linenos">7689</span></a>
</span><span id="Parser-7690"><a href="#Parser-7690"><span class="linenos">7690</span></a> <span class="n">heredoc_start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Parser-7691"><a href="#Parser-7691"><span class="linenos">7691</span></a>
</span><span id="Parser-7692"><a href="#Parser-7692"><span class="linenos">7692</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-7693"><a href="#Parser-7693"><span class="linenos">7693</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-7694"><a href="#Parser-7694"><span class="linenos">7694</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">heredoc_start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-7695"><a href="#Parser-7695"><span class="linenos">7695</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">tags</span><span class="p">))</span>
</span><span id="Parser-7696"><a href="#Parser-7696"><span class="linenos">7696</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</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">tag</span><span class="o">=</span><span class="n">tag_text</span><span class="p">)</span>
</span><span id="Parser-7697"><a href="#Parser-7697"><span class="linenos">7697</span></a>
</span><span id="Parser-7698"><a href="#Parser-7698"><span class="linenos">7698</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-7699"><a href="#Parser-7699"><span class="linenos">7699</span></a>
</span><span id="Parser-7700"><a href="#Parser-7700"><span class="linenos">7700</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No closing </span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span><span class="si">}</span><span class="s2"> found&quot;</span><span class="p">)</span>
</span><span id="Parser-7701"><a href="#Parser-7701"><span class="linenos">7701</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7702"><a href="#Parser-7702"><span class="linenos">7702</span></a>
</span><span id="Parser-7703"><a href="#Parser-7703"><span class="linenos">7703</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_find_parser</span><span class="p">(</span>
</span><span id="Parser-7704"><a href="#Parser-7704"><span class="linenos">7704</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parsers</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">Callable</span><span class="p">],</span> <span class="n">trie</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
</span><span id="Parser-7705"><a href="#Parser-7705"><span class="linenos">7705</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">Callable</span><span class="p">]:</span>
</span><span id="Parser-7706"><a href="#Parser-7706"><span class="linenos">7706</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-7707"><a href="#Parser-7707"><span class="linenos">7707</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7708"><a href="#Parser-7708"><span class="linenos">7708</span></a>
</span><span id="Parser-7709"><a href="#Parser-7709"><span class="linenos">7709</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-7710"><a href="#Parser-7710"><span class="linenos">7710</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-7711"><a href="#Parser-7711"><span class="linenos">7711</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
</span><span id="Parser-7712"><a href="#Parser-7712"><span class="linenos">7712</span></a> <span class="c1"># The current token might be multiple words</span>
</span><span id="Parser-7713"><a href="#Parser-7713"><span class="linenos">7713</span></a> <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-7714"><a href="#Parser-7714"><span class="linenos">7714</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">curr</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="Parser-7715"><a href="#Parser-7715"><span class="linenos">7715</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr</span><span class="p">)</span>
</span><span id="Parser-7716"><a href="#Parser-7716"><span class="linenos">7716</span></a>
</span><span id="Parser-7717"><a href="#Parser-7717"><span class="linenos">7717</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-7718"><a href="#Parser-7718"><span class="linenos">7718</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
</span><span id="Parser-7719"><a href="#Parser-7719"><span class="linenos">7719</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
</span><span id="Parser-7720"><a href="#Parser-7720"><span class="linenos">7720</span></a> <span class="k">break</span>
</span><span id="Parser-7721"><a href="#Parser-7721"><span class="linenos">7721</span></a>
</span><span id="Parser-7722"><a href="#Parser-7722"><span class="linenos">7722</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
</span><span id="Parser-7723"><a href="#Parser-7723"><span class="linenos">7723</span></a> <span class="n">subparser</span> <span class="o">=</span> <span class="n">parsers</span><span class="p">[</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">this</span><span class="p">)]</span>
</span><span id="Parser-7724"><a href="#Parser-7724"><span class="linenos">7724</span></a> <span class="k">return</span> <span class="n">subparser</span>
</span><span id="Parser-7725"><a href="#Parser-7725"><span class="linenos">7725</span></a>
</span><span id="Parser-7726"><a href="#Parser-7726"><span class="linenos">7726</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-7727"><a href="#Parser-7727"><span class="linenos">7727</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7728"><a href="#Parser-7728"><span class="linenos">7728</span></a>
</span><span id="Parser-7729"><a href="#Parser-7729"><span class="linenos">7729</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
</span><span id="Parser-7730"><a href="#Parser-7730"><span class="linenos">7730</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-7731"><a href="#Parser-7731"><span class="linenos">7731</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7732"><a href="#Parser-7732"><span class="linenos">7732</span></a>
</span><span id="Parser-7733"><a href="#Parser-7733"><span class="linenos">7733</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type</span><span class="p">:</span>
</span><span id="Parser-7734"><a href="#Parser-7734"><span class="linenos">7734</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
</span><span id="Parser-7735"><a href="#Parser-7735"><span class="linenos">7735</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-7736"><a href="#Parser-7736"><span class="linenos">7736</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Parser-7737"><a href="#Parser-7737"><span class="linenos">7737</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Parser-7738"><a href="#Parser-7738"><span class="linenos">7738</span></a>
</span><span id="Parser-7739"><a href="#Parser-7739"><span class="linenos">7739</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7740"><a href="#Parser-7740"><span class="linenos">7740</span></a>
</span><span id="Parser-7741"><a href="#Parser-7741"><span class="linenos">7741</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">types</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="Parser-7742"><a href="#Parser-7742"><span class="linenos">7742</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-7743"><a href="#Parser-7743"><span class="linenos">7743</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7744"><a href="#Parser-7744"><span class="linenos">7744</span></a>
</span><span id="Parser-7745"><a href="#Parser-7745"><span class="linenos">7745</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="n">types</span><span class="p">:</span>
</span><span id="Parser-7746"><a href="#Parser-7746"><span class="linenos">7746</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
</span><span id="Parser-7747"><a href="#Parser-7747"><span class="linenos">7747</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-7748"><a href="#Parser-7748"><span class="linenos">7748</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Parser-7749"><a href="#Parser-7749"><span class="linenos">7749</span></a>
</span><span id="Parser-7750"><a href="#Parser-7750"><span class="linenos">7750</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7751"><a href="#Parser-7751"><span class="linenos">7751</span></a>
</span><span id="Parser-7752"><a href="#Parser-7752"><span class="linenos">7752</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match_pair</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type_a</span><span class="p">,</span> <span class="n">token_type_b</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="Parser-7753"><a href="#Parser-7753"><span class="linenos">7753</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
</span><span id="Parser-7754"><a href="#Parser-7754"><span class="linenos">7754</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7755"><a href="#Parser-7755"><span class="linenos">7755</span></a>
</span><span id="Parser-7756"><a href="#Parser-7756"><span class="linenos">7756</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_a</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_b</span><span class="p">:</span>
</span><span id="Parser-7757"><a href="#Parser-7757"><span class="linenos">7757</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
</span><span id="Parser-7758"><a href="#Parser-7758"><span class="linenos">7758</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</span><span id="Parser-7759"><a href="#Parser-7759"><span class="linenos">7759</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Parser-7760"><a href="#Parser-7760"><span class="linenos">7760</span></a>
</span><span id="Parser-7761"><a href="#Parser-7761"><span class="linenos">7761</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7762"><a href="#Parser-7762"><span class="linenos">7762</span></a>
</span><span id="Parser-7763"><a href="#Parser-7763"><span class="linenos">7763</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match_l_paren</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">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 class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-7764"><a href="#Parser-7764"><span class="linenos">7764</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</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="Parser-7765"><a href="#Parser-7765"><span class="linenos">7765</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
</span><span id="Parser-7766"><a href="#Parser-7766"><span class="linenos">7766</span></a>
</span><span id="Parser-7767"><a href="#Parser-7767"><span class="linenos">7767</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match_r_paren</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">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 class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-7768"><a href="#Parser-7768"><span class="linenos">7768</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</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="Parser-7769"><a href="#Parser-7769"><span class="linenos">7769</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">)</span>
</span><span id="Parser-7770"><a href="#Parser-7770"><span class="linenos">7770</span></a>
</span><span id="Parser-7771"><a href="#Parser-7771"><span class="linenos">7771</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="Parser-7772"><a href="#Parser-7772"><span class="linenos">7772</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Parser-7773"><a href="#Parser-7773"><span class="linenos">7773</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Parser-7774"><a href="#Parser-7774"><span class="linenos">7774</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
</span><span id="Parser-7775"><a href="#Parser-7775"><span class="linenos">7775</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">texts</span>
</span><span id="Parser-7776"><a href="#Parser-7776"><span class="linenos">7776</span></a> <span class="p">):</span>
</span><span id="Parser-7777"><a href="#Parser-7777"><span class="linenos">7777</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
</span><span id="Parser-7778"><a href="#Parser-7778"><span class="linenos">7778</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-7779"><a href="#Parser-7779"><span class="linenos">7779</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Parser-7780"><a href="#Parser-7780"><span class="linenos">7780</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7781"><a href="#Parser-7781"><span class="linenos">7781</span></a>
</span><span id="Parser-7782"><a href="#Parser-7782"><span class="linenos">7782</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_match_text_seq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
</span><span id="Parser-7783"><a href="#Parser-7783"><span class="linenos">7783</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-7784"><a href="#Parser-7784"><span class="linenos">7784</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
</span><span id="Parser-7785"><a href="#Parser-7785"><span class="linenos">7785</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Parser-7786"><a href="#Parser-7786"><span class="linenos">7786</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Parser-7787"><a href="#Parser-7787"><span class="linenos">7787</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
</span><span id="Parser-7788"><a href="#Parser-7788"><span class="linenos">7788</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">text</span>
</span><span id="Parser-7789"><a href="#Parser-7789"><span class="linenos">7789</span></a> <span class="p">):</span>
</span><span id="Parser-7790"><a href="#Parser-7790"><span class="linenos">7790</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-7791"><a href="#Parser-7791"><span class="linenos">7791</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7792"><a href="#Parser-7792"><span class="linenos">7792</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-7793"><a href="#Parser-7793"><span class="linenos">7793</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-7794"><a href="#Parser-7794"><span class="linenos">7794</span></a>
</span><span id="Parser-7795"><a href="#Parser-7795"><span class="linenos">7795</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">advance</span><span class="p">:</span>
</span><span id="Parser-7796"><a href="#Parser-7796"><span class="linenos">7796</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
</span><span id="Parser-7797"><a href="#Parser-7797"><span class="linenos">7797</span></a>
</span><span id="Parser-7798"><a href="#Parser-7798"><span class="linenos">7798</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Parser-7799"><a href="#Parser-7799"><span class="linenos">7799</span></a>
</span><span id="Parser-7800"><a href="#Parser-7800"><span class="linenos">7800</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_replace_lambda</span><span class="p">(</span>
</span><span id="Parser-7801"><a href="#Parser-7801"><span class="linenos">7801</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</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 class="n">expressions</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><span id="Parser-7802"><a href="#Parser-7802"><span class="linenos">7802</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="Parser-7803"><a href="#Parser-7803"><span class="linenos">7803</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
</span><span id="Parser-7804"><a href="#Parser-7804"><span class="linenos">7804</span></a> <span class="k">return</span> <span class="n">node</span>
</span><span id="Parser-7805"><a href="#Parser-7805"><span class="linenos">7805</span></a>
</span><span id="Parser-7806"><a href="#Parser-7806"><span class="linenos">7806</span></a> <span class="n">lambda_types</span> <span class="o">=</span> <span class="p">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="n">e</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;to&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">False</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">expressions</span><span class="p">}</span>
</span><span id="Parser-7807"><a href="#Parser-7807"><span class="linenos">7807</span></a>
</span><span id="Parser-7808"><a href="#Parser-7808"><span class="linenos">7808</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
</span><span id="Parser-7809"><a href="#Parser-7809"><span class="linenos">7809</span></a> <span class="n">typ</span> <span class="o">=</span> <span class="n">lambda_types</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">column</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</span><span id="Parser-7810"><a href="#Parser-7810"><span class="linenos">7810</span></a> <span class="k">if</span> <span class="n">typ</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser-7811"><a href="#Parser-7811"><span class="linenos">7811</span></a> <span class="n">dot_or_id</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">to_dot</span><span class="p">()</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span>
</span><span id="Parser-7812"><a href="#Parser-7812"><span class="linenos">7812</span></a>
</span><span id="Parser-7813"><a href="#Parser-7813"><span class="linenos">7813</span></a> <span class="k">if</span> <span class="n">typ</span><span class="p">:</span>
</span><span id="Parser-7814"><a href="#Parser-7814"><span class="linenos">7814</span></a> <span class="n">dot_or_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7815"><a href="#Parser-7815"><span class="linenos">7815</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span>
</span><span id="Parser-7816"><a href="#Parser-7816"><span class="linenos">7816</span></a> <span class="n">this</span><span class="o">=</span><span class="n">dot_or_id</span><span class="p">,</span>
</span><span id="Parser-7817"><a href="#Parser-7817"><span class="linenos">7817</span></a> <span class="n">to</span><span class="o">=</span><span class="n">typ</span><span class="p">,</span>
</span><span id="Parser-7818"><a href="#Parser-7818"><span class="linenos">7818</span></a> <span class="p">)</span>
</span><span id="Parser-7819"><a href="#Parser-7819"><span class="linenos">7819</span></a>
</span><span id="Parser-7820"><a href="#Parser-7820"><span class="linenos">7820</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">parent</span>
</span><span id="Parser-7821"><a href="#Parser-7821"><span class="linenos">7821</span></a>
</span><span id="Parser-7822"><a href="#Parser-7822"><span class="linenos">7822</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
</span><span id="Parser-7823"><a href="#Parser-7823"><span class="linenos">7823</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
</span><span id="Parser-7824"><a href="#Parser-7824"><span class="linenos">7824</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
</span><span id="Parser-7825"><a href="#Parser-7825"><span class="linenos">7825</span></a> <span class="k">break</span>
</span><span id="Parser-7826"><a href="#Parser-7826"><span class="linenos">7826</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">parent</span>
</span><span id="Parser-7827"><a href="#Parser-7827"><span class="linenos">7827</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7828"><a href="#Parser-7828"><span class="linenos">7828</span></a> <span class="k">if</span> <span class="n">column</span> <span class="ow">is</span> <span class="n">node</span><span class="p">:</span>
</span><span id="Parser-7829"><a href="#Parser-7829"><span class="linenos">7829</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
</span><span id="Parser-7830"><a href="#Parser-7830"><span class="linenos">7830</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7831"><a href="#Parser-7831"><span class="linenos">7831</span></a> <span class="n">column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
</span><span id="Parser-7832"><a href="#Parser-7832"><span class="linenos">7832</span></a> <span class="k">return</span> <span class="n">node</span>
</span><span id="Parser-7833"><a href="#Parser-7833"><span class="linenos">7833</span></a>
</span><span id="Parser-7834"><a href="#Parser-7834"><span class="linenos">7834</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_truncate_table</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">TruncateTable</span><span class="p">]</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
</span><span id="Parser-7835"><a href="#Parser-7835"><span class="linenos">7835</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-7836"><a href="#Parser-7836"><span class="linenos">7836</span></a>
</span><span id="Parser-7837"><a href="#Parser-7837"><span class="linenos">7837</span></a> <span class="c1"># Not to be confused with TRUNCATE(number, decimals) function call</span>
</span><span id="Parser-7838"><a href="#Parser-7838"><span class="linenos">7838</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
</span><span id="Parser-7839"><a href="#Parser-7839"><span class="linenos">7839</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span>
</span><span id="Parser-7840"><a href="#Parser-7840"><span class="linenos">7840</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
</span><span id="Parser-7841"><a href="#Parser-7841"><span class="linenos">7841</span></a>
</span><span id="Parser-7842"><a href="#Parser-7842"><span class="linenos">7842</span></a> <span class="c1"># Clickhouse supports TRUNCATE DATABASE as well</span>
</span><span id="Parser-7843"><a href="#Parser-7843"><span class="linenos">7843</span></a> <span class="n">is_database</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DATABASE</span><span class="p">)</span>
</span><span id="Parser-7844"><a href="#Parser-7844"><span class="linenos">7844</span></a>
</span><span id="Parser-7845"><a href="#Parser-7845"><span class="linenos">7845</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
</span><span id="Parser-7846"><a href="#Parser-7846"><span class="linenos">7846</span></a>
</span><span id="Parser-7847"><a href="#Parser-7847"><span class="linenos">7847</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-7848"><a href="#Parser-7848"><span class="linenos">7848</span></a>
</span><span id="Parser-7849"><a href="#Parser-7849"><span class="linenos">7849</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
</span><span id="Parser-7850"><a href="#Parser-7850"><span class="linenos">7850</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_database</span><span class="p">)</span>
</span><span id="Parser-7851"><a href="#Parser-7851"><span class="linenos">7851</span></a> <span class="p">)</span>
</span><span id="Parser-7852"><a href="#Parser-7852"><span class="linenos">7852</span></a>
</span><span id="Parser-7853"><a href="#Parser-7853"><span class="linenos">7853</span></a> <span class="n">cluster</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_property</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-7854"><a href="#Parser-7854"><span class="linenos">7854</span></a>
</span><span id="Parser-7855"><a href="#Parser-7855"><span class="linenos">7855</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESTART&quot;</span><span class="p">,</span> <span class="s2">&quot;IDENTITY&quot;</span><span class="p">):</span>
</span><span id="Parser-7856"><a href="#Parser-7856"><span class="linenos">7856</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="s2">&quot;RESTART&quot;</span>
</span><span id="Parser-7857"><a href="#Parser-7857"><span class="linenos">7857</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONTINUE&quot;</span><span class="p">,</span> <span class="s2">&quot;IDENTITY&quot;</span><span class="p">):</span>
</span><span id="Parser-7858"><a href="#Parser-7858"><span class="linenos">7858</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="s2">&quot;CONTINUE&quot;</span>
</span><span id="Parser-7859"><a href="#Parser-7859"><span class="linenos">7859</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7860"><a href="#Parser-7860"><span class="linenos">7860</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7861"><a href="#Parser-7861"><span class="linenos">7861</span></a>
</span><span id="Parser-7862"><a href="#Parser-7862"><span class="linenos">7862</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESTRICT&quot;</span><span class="p">):</span>
</span><span id="Parser-7863"><a href="#Parser-7863"><span class="linenos">7863</span></a> <span class="n">option</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-7864"><a href="#Parser-7864"><span class="linenos">7864</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7865"><a href="#Parser-7865"><span class="linenos">7865</span></a> <span class="n">option</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-7866"><a href="#Parser-7866"><span class="linenos">7866</span></a>
</span><span id="Parser-7867"><a href="#Parser-7867"><span class="linenos">7867</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">()</span>
</span><span id="Parser-7868"><a href="#Parser-7868"><span class="linenos">7868</span></a>
</span><span id="Parser-7869"><a href="#Parser-7869"><span class="linenos">7869</span></a> <span class="c1"># Fallback case</span>
</span><span id="Parser-7870"><a href="#Parser-7870"><span class="linenos">7870</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-7871"><a href="#Parser-7871"><span class="linenos">7871</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="Parser-7872"><a href="#Parser-7872"><span class="linenos">7872</span></a>
</span><span id="Parser-7873"><a href="#Parser-7873"><span class="linenos">7873</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7874"><a href="#Parser-7874"><span class="linenos">7874</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TruncateTable</span><span class="p">,</span>
</span><span id="Parser-7875"><a href="#Parser-7875"><span class="linenos">7875</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
</span><span id="Parser-7876"><a href="#Parser-7876"><span class="linenos">7876</span></a> <span class="n">is_database</span><span class="o">=</span><span class="n">is_database</span><span class="p">,</span>
</span><span id="Parser-7877"><a href="#Parser-7877"><span class="linenos">7877</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
</span><span id="Parser-7878"><a href="#Parser-7878"><span class="linenos">7878</span></a> <span class="n">cluster</span><span class="o">=</span><span class="n">cluster</span><span class="p">,</span>
</span><span id="Parser-7879"><a href="#Parser-7879"><span class="linenos">7879</span></a> <span class="n">identity</span><span class="o">=</span><span class="n">identity</span><span class="p">,</span>
</span><span id="Parser-7880"><a href="#Parser-7880"><span class="linenos">7880</span></a> <span class="n">option</span><span class="o">=</span><span class="n">option</span><span class="p">,</span>
</span><span id="Parser-7881"><a href="#Parser-7881"><span class="linenos">7881</span></a> <span class="n">partition</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
</span><span id="Parser-7882"><a href="#Parser-7882"><span class="linenos">7882</span></a> <span class="p">)</span>
</span><span id="Parser-7883"><a href="#Parser-7883"><span class="linenos">7883</span></a>
</span><span id="Parser-7884"><a href="#Parser-7884"><span class="linenos">7884</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_with_operator</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-7885"><a href="#Parser-7885"><span class="linenos">7885</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_opclass</span><span class="p">)</span>
</span><span id="Parser-7886"><a href="#Parser-7886"><span class="linenos">7886</span></a>
</span><span id="Parser-7887"><a href="#Parser-7887"><span class="linenos">7887</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
</span><span id="Parser-7888"><a href="#Parser-7888"><span class="linenos">7888</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-7889"><a href="#Parser-7889"><span class="linenos">7889</span></a>
</span><span id="Parser-7890"><a href="#Parser-7890"><span class="linenos">7890</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-7891"><a href="#Parser-7891"><span class="linenos">7891</span></a>
</span><span id="Parser-7892"><a href="#Parser-7892"><span class="linenos">7892</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithOperator</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">op</span><span class="o">=</span><span class="n">op</span><span class="p">)</span>
</span><span id="Parser-7893"><a href="#Parser-7893"><span class="linenos">7893</span></a>
</span><span id="Parser-7894"><a href="#Parser-7894"><span class="linenos">7894</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_wrapped_options</span><span class="p">(</span><span class="bp">self</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="Parser-7895"><a href="#Parser-7895"><span class="linenos">7895</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-7896"><a href="#Parser-7896"><span class="linenos">7896</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
</span><span id="Parser-7897"><a href="#Parser-7897"><span class="linenos">7897</span></a>
</span><span id="Parser-7898"><a href="#Parser-7898"><span class="linenos">7898</span></a> <span class="n">opts</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-7899"><a href="#Parser-7899"><span class="linenos">7899</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
</span><span id="Parser-7900"><a href="#Parser-7900"><span class="linenos">7900</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FORMAT_NAME&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="Parser-7901"><a href="#Parser-7901"><span class="linenos">7901</span></a> <span class="c1"># The FORMAT_NAME can be set to an identifier for Snowflake and T-SQL</span>
</span><span id="Parser-7902"><a href="#Parser-7902"><span class="linenos">7902</span></a> <span class="n">prop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7903"><a href="#Parser-7903"><span class="linenos">7903</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Property</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">var</span><span class="p">(</span><span class="s2">&quot;FORMAT_NAME&quot;</span><span class="p">),</span> <span class="n">value</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
</span><span id="Parser-7904"><a href="#Parser-7904"><span class="linenos">7904</span></a> <span class="p">)</span>
</span><span id="Parser-7905"><a href="#Parser-7905"><span class="linenos">7905</span></a> <span class="n">opts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">prop</span><span class="p">)</span>
</span><span id="Parser-7906"><a href="#Parser-7906"><span class="linenos">7906</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7907"><a href="#Parser-7907"><span class="linenos">7907</span></a> <span class="n">opts</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">_parse_property</span><span class="p">())</span>
</span><span id="Parser-7908"><a href="#Parser-7908"><span class="linenos">7908</span></a>
</span><span id="Parser-7909"><a href="#Parser-7909"><span class="linenos">7909</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
</span><span id="Parser-7910"><a href="#Parser-7910"><span class="linenos">7910</span></a>
</span><span id="Parser-7911"><a href="#Parser-7911"><span class="linenos">7911</span></a> <span class="k">return</span> <span class="n">opts</span>
</span><span id="Parser-7912"><a href="#Parser-7912"><span class="linenos">7912</span></a>
</span><span id="Parser-7913"><a href="#Parser-7913"><span class="linenos">7913</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_copy_parameters</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">CopyParameter</span><span class="p">]:</span>
</span><span id="Parser-7914"><a href="#Parser-7914"><span class="linenos">7914</span></a> <span class="n">sep</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">COPY_PARAMS_ARE_CSV</span> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-7915"><a href="#Parser-7915"><span class="linenos">7915</span></a>
</span><span id="Parser-7916"><a href="#Parser-7916"><span class="linenos">7916</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-7917"><a href="#Parser-7917"><span class="linenos">7917</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-7918"><a href="#Parser-7918"><span class="linenos">7918</span></a> <span class="n">option</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-7919"><a href="#Parser-7919"><span class="linenos">7919</span></a> <span class="n">prev</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-7920"><a href="#Parser-7920"><span class="linenos">7920</span></a>
</span><span id="Parser-7921"><a href="#Parser-7921"><span class="linenos">7921</span></a> <span class="c1"># Different dialects might separate options and values by white space, &quot;=&quot; and &quot;AS&quot;</span>
</span><span id="Parser-7922"><a href="#Parser-7922"><span class="linenos">7922</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span>
</span><span id="Parser-7923"><a href="#Parser-7923"><span class="linenos">7923</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
</span><span id="Parser-7924"><a href="#Parser-7924"><span class="linenos">7924</span></a>
</span><span id="Parser-7925"><a href="#Parser-7925"><span class="linenos">7925</span></a> <span class="n">param</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CopyParameter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">option</span><span class="p">)</span>
</span><span id="Parser-7926"><a href="#Parser-7926"><span class="linenos">7926</span></a>
</span><span id="Parser-7927"><a href="#Parser-7927"><span class="linenos">7927</span></a> <span class="k">if</span> <span class="n">prev</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">COPY_INTO_VARLEN_OPTIONS</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span>
</span><span id="Parser-7928"><a href="#Parser-7928"><span class="linenos">7928</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span>
</span><span id="Parser-7929"><a href="#Parser-7929"><span class="linenos">7929</span></a> <span class="p">):</span>
</span><span id="Parser-7930"><a href="#Parser-7930"><span class="linenos">7930</span></a> <span class="c1"># Snowflake FILE_FORMAT case, Databricks COPY &amp; FORMAT options</span>
</span><span id="Parser-7931"><a href="#Parser-7931"><span class="linenos">7931</span></a> <span class="n">param</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="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_options</span><span class="p">())</span>
</span><span id="Parser-7932"><a href="#Parser-7932"><span class="linenos">7932</span></a> <span class="k">elif</span> <span class="n">prev</span> <span class="o">==</span> <span class="s2">&quot;FILE_FORMAT&quot;</span><span class="p">:</span>
</span><span id="Parser-7933"><a href="#Parser-7933"><span class="linenos">7933</span></a> <span class="c1"># T-SQL&#39;s external file format case</span>
</span><span id="Parser-7934"><a href="#Parser-7934"><span class="linenos">7934</span></a> <span class="n">param</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="Parser-7935"><a href="#Parser-7935"><span class="linenos">7935</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-7936"><a href="#Parser-7936"><span class="linenos">7936</span></a> <span class="n">param</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unquoted_field</span><span class="p">())</span>
</span><span id="Parser-7937"><a href="#Parser-7937"><span class="linenos">7937</span></a>
</span><span id="Parser-7938"><a href="#Parser-7938"><span class="linenos">7938</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">param</span><span class="p">)</span>
</span><span id="Parser-7939"><a href="#Parser-7939"><span class="linenos">7939</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span>
</span><span id="Parser-7940"><a href="#Parser-7940"><span class="linenos">7940</span></a>
</span><span id="Parser-7941"><a href="#Parser-7941"><span class="linenos">7941</span></a> <span class="k">return</span> <span class="n">options</span>
</span><span id="Parser-7942"><a href="#Parser-7942"><span class="linenos">7942</span></a>
</span><span id="Parser-7943"><a href="#Parser-7943"><span class="linenos">7943</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_credentials</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Credentials</span><span class="p">]:</span>
</span><span id="Parser-7944"><a href="#Parser-7944"><span class="linenos">7944</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Credentials</span><span class="p">)</span>
</span><span id="Parser-7945"><a href="#Parser-7945"><span class="linenos">7945</span></a>
</span><span id="Parser-7946"><a href="#Parser-7946"><span class="linenos">7946</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STORAGE_INTEGRATION&quot;</span><span class="p">,</span> <span class="s2">&quot;=&quot;</span><span class="p">):</span>
</span><span id="Parser-7947"><a href="#Parser-7947"><span class="linenos">7947</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;storage&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="Parser-7948"><a href="#Parser-7948"><span class="linenos">7948</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CREDENTIALS&quot;</span><span class="p">):</span>
</span><span id="Parser-7949"><a href="#Parser-7949"><span class="linenos">7949</span></a> <span class="c1"># Snowflake case: CREDENTIALS = (...), Redshift case: CREDENTIALS &lt;string&gt;</span>
</span><span id="Parser-7950"><a href="#Parser-7950"><span class="linenos">7950</span></a> <span class="n">creds</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-7951"><a href="#Parser-7951"><span class="linenos">7951</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_options</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EQ</span><span class="p">)</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
</span><span id="Parser-7952"><a href="#Parser-7952"><span class="linenos">7952</span></a> <span class="p">)</span>
</span><span id="Parser-7953"><a href="#Parser-7953"><span class="linenos">7953</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;credentials&quot;</span><span class="p">,</span> <span class="n">creds</span><span class="p">)</span>
</span><span id="Parser-7954"><a href="#Parser-7954"><span class="linenos">7954</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENCRYPTION&quot;</span><span class="p">):</span>
</span><span id="Parser-7955"><a href="#Parser-7955"><span class="linenos">7955</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;encryption&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_options</span><span class="p">())</span>
</span><span id="Parser-7956"><a href="#Parser-7956"><span class="linenos">7956</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IAM_ROLE&quot;</span><span class="p">):</span>
</span><span id="Parser-7957"><a href="#Parser-7957"><span class="linenos">7957</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;iam_role&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="Parser-7958"><a href="#Parser-7958"><span class="linenos">7958</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;REGION&quot;</span><span class="p">):</span>
</span><span id="Parser-7959"><a href="#Parser-7959"><span class="linenos">7959</span></a> <span class="n">expr</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;region&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
</span><span id="Parser-7960"><a href="#Parser-7960"><span class="linenos">7960</span></a>
</span><span id="Parser-7961"><a href="#Parser-7961"><span class="linenos">7961</span></a> <span class="k">return</span> <span class="n">expr</span>
</span><span id="Parser-7962"><a href="#Parser-7962"><span class="linenos">7962</span></a>
</span><span id="Parser-7963"><a href="#Parser-7963"><span class="linenos">7963</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_file_location</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-7964"><a href="#Parser-7964"><span class="linenos">7964</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
</span><span id="Parser-7965"><a href="#Parser-7965"><span class="linenos">7965</span></a>
</span><span id="Parser-7966"><a href="#Parser-7966"><span class="linenos">7966</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_copy</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Copy</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="Parser-7967"><a href="#Parser-7967"><span class="linenos">7967</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-7968"><a href="#Parser-7968"><span class="linenos">7968</span></a>
</span><span id="Parser-7969"><a href="#Parser-7969"><span class="linenos">7969</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span>
</span><span id="Parser-7970"><a href="#Parser-7970"><span class="linenos">7970</span></a>
</span><span id="Parser-7971"><a href="#Parser-7971"><span class="linenos">7971</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-7972"><a href="#Parser-7972"><span class="linenos">7972</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-7973"><a href="#Parser-7973"><span class="linenos">7973</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-7974"><a href="#Parser-7974"><span class="linenos">7974</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-7975"><a href="#Parser-7975"><span class="linenos">7975</span></a> <span class="p">)</span>
</span><span id="Parser-7976"><a href="#Parser-7976"><span class="linenos">7976</span></a>
</span><span id="Parser-7977"><a href="#Parser-7977"><span class="linenos">7977</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
</span><span id="Parser-7978"><a href="#Parser-7978"><span class="linenos">7978</span></a>
</span><span id="Parser-7979"><a href="#Parser-7979"><span class="linenos">7979</span></a> <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_file_location</span><span class="p">)</span>
</span><span id="Parser-7980"><a href="#Parser-7980"><span class="linenos">7980</span></a> <span class="n">credentials</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_credentials</span><span class="p">()</span>
</span><span id="Parser-7981"><a href="#Parser-7981"><span class="linenos">7981</span></a>
</span><span id="Parser-7982"><a href="#Parser-7982"><span class="linenos">7982</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">)</span>
</span><span id="Parser-7983"><a href="#Parser-7983"><span class="linenos">7983</span></a>
</span><span id="Parser-7984"><a href="#Parser-7984"><span class="linenos">7984</span></a> <span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_copy_parameters</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-7985"><a href="#Parser-7985"><span class="linenos">7985</span></a>
</span><span id="Parser-7986"><a href="#Parser-7986"><span class="linenos">7986</span></a> <span class="c1"># Fallback case</span>
</span><span id="Parser-7987"><a href="#Parser-7987"><span class="linenos">7987</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-7988"><a href="#Parser-7988"><span class="linenos">7988</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="Parser-7989"><a href="#Parser-7989"><span class="linenos">7989</span></a>
</span><span id="Parser-7990"><a href="#Parser-7990"><span class="linenos">7990</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-7991"><a href="#Parser-7991"><span class="linenos">7991</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Copy</span><span class="p">,</span>
</span><span id="Parser-7992"><a href="#Parser-7992"><span class="linenos">7992</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
</span><span id="Parser-7993"><a href="#Parser-7993"><span class="linenos">7993</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="Parser-7994"><a href="#Parser-7994"><span class="linenos">7994</span></a> <span class="n">credentials</span><span class="o">=</span><span class="n">credentials</span><span class="p">,</span>
</span><span id="Parser-7995"><a href="#Parser-7995"><span class="linenos">7995</span></a> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">,</span>
</span><span id="Parser-7996"><a href="#Parser-7996"><span class="linenos">7996</span></a> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span>
</span><span id="Parser-7997"><a href="#Parser-7997"><span class="linenos">7997</span></a> <span class="p">)</span>
</span><span id="Parser-7998"><a href="#Parser-7998"><span class="linenos">7998</span></a>
</span><span id="Parser-7999"><a href="#Parser-7999"><span class="linenos">7999</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_normalize</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Normalize</span><span class="p">:</span>
</span><span id="Parser-8000"><a href="#Parser-8000"><span class="linenos">8000</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-8001"><a href="#Parser-8001"><span class="linenos">8001</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Normalize</span><span class="p">,</span>
</span><span id="Parser-8002"><a href="#Parser-8002"><span class="linenos">8002</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="Parser-8003"><a href="#Parser-8003"><span class="linenos">8003</span></a> <span class="n">form</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(),</span>
</span><span id="Parser-8004"><a href="#Parser-8004"><span class="linenos">8004</span></a> <span class="p">)</span>
</span><span id="Parser-8005"><a href="#Parser-8005"><span class="linenos">8005</span></a>
</span><span id="Parser-8006"><a href="#Parser-8006"><span class="linenos">8006</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_ceil_floor</span><span class="p">(</span><span class="bp">self</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">TCeilFloor</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">TCeilFloor</span><span class="p">:</span>
</span><span id="Parser-8007"><a href="#Parser-8007"><span class="linenos">8007</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">())</span>
</span><span id="Parser-8008"><a href="#Parser-8008"><span class="linenos">8008</span></a>
</span><span id="Parser-8009"><a href="#Parser-8009"><span class="linenos">8009</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="Parser-8010"><a href="#Parser-8010"><span class="linenos">8010</span></a> <span class="n">decimals</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="Parser-8011"><a href="#Parser-8011"><span class="linenos">8011</span></a>
</span><span id="Parser-8012"><a href="#Parser-8012"><span class="linenos">8012</span></a> <span class="k">return</span> <span class="n">expr_type</span><span class="p">(</span>
</span><span id="Parser-8013"><a href="#Parser-8013"><span class="linenos">8013</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">decimals</span><span class="o">=</span><span class="n">decimals</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
</span><span id="Parser-8014"><a href="#Parser-8014"><span class="linenos">8014</span></a> <span class="p">)</span>
</span><span id="Parser-8015"><a href="#Parser-8015"><span class="linenos">8015</span></a>
</span><span id="Parser-8016"><a href="#Parser-8016"><span class="linenos">8016</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_star_ops</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Parser-8017"><a href="#Parser-8017"><span class="linenos">8017</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-8018"><a href="#Parser-8018"><span class="linenos">8018</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
</span><span id="Parser-8019"><a href="#Parser-8019"><span class="linenos">8019</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">Columns</span><span class="p">):</span>
</span><span id="Parser-8020"><a href="#Parser-8020"><span class="linenos">8020</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;unpack&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
</span><span id="Parser-8021"><a href="#Parser-8021"><span class="linenos">8021</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-8022"><a href="#Parser-8022"><span class="linenos">8022</span></a>
</span><span id="Parser-8023"><a href="#Parser-8023"><span class="linenos">8023</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-8024"><a href="#Parser-8024"><span class="linenos">8024</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Star</span><span class="p">,</span>
</span><span id="Parser-8025"><a href="#Parser-8025"><span class="linenos">8025</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-8026"><a href="#Parser-8026"><span class="linenos">8026</span></a> <span class="s2">&quot;except&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star_op</span><span class="p">(</span><span class="s2">&quot;EXCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;EXCLUDE&quot;</span><span class="p">),</span>
</span><span id="Parser-8027"><a href="#Parser-8027"><span class="linenos">8027</span></a> <span class="s2">&quot;replace&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star_op</span><span class="p">(</span><span class="s2">&quot;REPLACE&quot;</span><span class="p">),</span>
</span><span id="Parser-8028"><a href="#Parser-8028"><span class="linenos">8028</span></a> <span class="s2">&quot;rename&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star_op</span><span class="p">(</span><span class="s2">&quot;RENAME&quot;</span><span class="p">),</span>
</span><span id="Parser-8029"><a href="#Parser-8029"><span class="linenos">8029</span></a> <span class="p">},</span>
</span><span id="Parser-8030"><a href="#Parser-8030"><span class="linenos">8030</span></a> <span class="p">)</span>
</span><span id="Parser-8031"><a href="#Parser-8031"><span class="linenos">8031</span></a>
</span><span id="Parser-8032"><a href="#Parser-8032"><span class="linenos">8032</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_grant_privilege</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">GrantPrivilege</span><span class="p">]:</span>
</span><span id="Parser-8033"><a href="#Parser-8033"><span class="linenos">8033</span></a> <span class="n">privilege_parts</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-8034"><a href="#Parser-8034"><span class="linenos">8034</span></a>
</span><span id="Parser-8035"><a href="#Parser-8035"><span class="linenos">8035</span></a> <span class="c1"># Keep consuming consecutive keywords until comma (end of this privilege) or ON</span>
</span><span id="Parser-8036"><a href="#Parser-8036"><span class="linenos">8036</span></a> <span class="c1"># (end of privilege list) or L_PAREN (start of column list) are met</span>
</span><span id="Parser-8037"><a href="#Parser-8037"><span class="linenos">8037</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PRIVILEGE_FOLLOW_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</span><span id="Parser-8038"><a href="#Parser-8038"><span class="linenos">8038</span></a> <span class="n">privilege_parts</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">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
</span><span id="Parser-8039"><a href="#Parser-8039"><span class="linenos">8039</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-8040"><a href="#Parser-8040"><span class="linenos">8040</span></a>
</span><span id="Parser-8041"><a href="#Parser-8041"><span class="linenos">8041</span></a> <span class="n">this</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="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">privilege_parts</span><span class="p">))</span>
</span><span id="Parser-8042"><a href="#Parser-8042"><span class="linenos">8042</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
</span><span id="Parser-8043"><a href="#Parser-8043"><span class="linenos">8043</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
</span><span id="Parser-8044"><a href="#Parser-8044"><span class="linenos">8044</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-8045"><a href="#Parser-8045"><span class="linenos">8045</span></a> <span class="k">else</span> <span class="kc">None</span>
</span><span id="Parser-8046"><a href="#Parser-8046"><span class="linenos">8046</span></a> <span class="p">)</span>
</span><span id="Parser-8047"><a href="#Parser-8047"><span class="linenos">8047</span></a>
</span><span id="Parser-8048"><a href="#Parser-8048"><span class="linenos">8048</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GrantPrivilege</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">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-8049"><a href="#Parser-8049"><span class="linenos">8049</span></a>
</span><span id="Parser-8050"><a href="#Parser-8050"><span class="linenos">8050</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_grant_principal</span><span class="p">(</span><span class="bp">self</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">exp</span><span class="o">.</span><span class="n">GrantPrincipal</span><span class="p">]:</span>
</span><span id="Parser-8051"><a href="#Parser-8051"><span class="linenos">8051</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;ROLE&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">))</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-8052"><a href="#Parser-8052"><span class="linenos">8052</span></a> <span class="n">principal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-8053"><a href="#Parser-8053"><span class="linenos">8053</span></a>
</span><span id="Parser-8054"><a href="#Parser-8054"><span class="linenos">8054</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">principal</span><span class="p">:</span>
</span><span id="Parser-8055"><a href="#Parser-8055"><span class="linenos">8055</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-8056"><a href="#Parser-8056"><span class="linenos">8056</span></a>
</span><span id="Parser-8057"><a href="#Parser-8057"><span class="linenos">8057</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GrantPrincipal</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">principal</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="Parser-8058"><a href="#Parser-8058"><span class="linenos">8058</span></a>
</span><span id="Parser-8059"><a href="#Parser-8059"><span class="linenos">8059</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_grant</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Grant</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
</span><span id="Parser-8060"><a href="#Parser-8060"><span class="linenos">8060</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
</span><span id="Parser-8061"><a href="#Parser-8061"><span class="linenos">8061</span></a>
</span><span id="Parser-8062"><a href="#Parser-8062"><span class="linenos">8062</span></a> <span class="n">privileges</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_grant_privilege</span><span class="p">)</span>
</span><span id="Parser-8063"><a href="#Parser-8063"><span class="linenos">8063</span></a>
</span><span id="Parser-8064"><a href="#Parser-8064"><span class="linenos">8064</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
</span><span id="Parser-8065"><a href="#Parser-8065"><span class="linenos">8065</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CREATABLES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
</span><span id="Parser-8066"><a href="#Parser-8066"><span class="linenos">8066</span></a>
</span><span id="Parser-8067"><a href="#Parser-8067"><span class="linenos">8067</span></a> <span class="c1"># Attempt to parse the securable e.g. MySQL allows names</span>
</span><span id="Parser-8068"><a href="#Parser-8068"><span class="linenos">8068</span></a> <span class="c1"># such as &quot;foo.*&quot;, &quot;*.*&quot; which are not easily parseable yet</span>
</span><span id="Parser-8069"><a href="#Parser-8069"><span class="linenos">8069</span></a> <span class="n">securable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_try_parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">)</span>
</span><span id="Parser-8070"><a href="#Parser-8070"><span class="linenos">8070</span></a>
</span><span id="Parser-8071"><a href="#Parser-8071"><span class="linenos">8071</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">securable</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
</span><span id="Parser-8072"><a href="#Parser-8072"><span class="linenos">8072</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="Parser-8073"><a href="#Parser-8073"><span class="linenos">8073</span></a>
</span><span id="Parser-8074"><a href="#Parser-8074"><span class="linenos">8074</span></a> <span class="n">principals</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_grant_principal</span><span class="p">)</span>
</span><span id="Parser-8075"><a href="#Parser-8075"><span class="linenos">8075</span></a>
</span><span id="Parser-8076"><a href="#Parser-8076"><span class="linenos">8076</span></a> <span class="n">grant_option</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;GRANT&quot;</span><span class="p">,</span> <span class="s2">&quot;OPTION&quot;</span><span class="p">)</span>
</span><span id="Parser-8077"><a href="#Parser-8077"><span class="linenos">8077</span></a>
</span><span id="Parser-8078"><a href="#Parser-8078"><span class="linenos">8078</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
</span><span id="Parser-8079"><a href="#Parser-8079"><span class="linenos">8079</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="Parser-8080"><a href="#Parser-8080"><span class="linenos">8080</span></a>
</span><span id="Parser-8081"><a href="#Parser-8081"><span class="linenos">8081</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-8082"><a href="#Parser-8082"><span class="linenos">8082</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Grant</span><span class="p">,</span>
</span><span id="Parser-8083"><a href="#Parser-8083"><span class="linenos">8083</span></a> <span class="n">privileges</span><span class="o">=</span><span class="n">privileges</span><span class="p">,</span>
</span><span id="Parser-8084"><a href="#Parser-8084"><span class="linenos">8084</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
</span><span id="Parser-8085"><a href="#Parser-8085"><span class="linenos">8085</span></a> <span class="n">securable</span><span class="o">=</span><span class="n">securable</span><span class="p">,</span>
</span><span id="Parser-8086"><a href="#Parser-8086"><span class="linenos">8086</span></a> <span class="n">principals</span><span class="o">=</span><span class="n">principals</span><span class="p">,</span>
</span><span id="Parser-8087"><a href="#Parser-8087"><span class="linenos">8087</span></a> <span class="n">grant_option</span><span class="o">=</span><span class="n">grant_option</span><span class="p">,</span>
</span><span id="Parser-8088"><a href="#Parser-8088"><span class="linenos">8088</span></a> <span class="p">)</span>
</span><span id="Parser-8089"><a href="#Parser-8089"><span class="linenos">8089</span></a>
</span><span id="Parser-8090"><a href="#Parser-8090"><span class="linenos">8090</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">_parse_overlay</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Overlay</span><span class="p">:</span>
</span><span id="Parser-8091"><a href="#Parser-8091"><span class="linenos">8091</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Parser-8092"><a href="#Parser-8092"><span class="linenos">8092</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Overlay</span><span class="p">,</span>
</span><span id="Parser-8093"><a href="#Parser-8093"><span class="linenos">8093</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-8094"><a href="#Parser-8094"><span class="linenos">8094</span></a> <span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="Parser-8095"><a href="#Parser-8095"><span class="linenos">8095</span></a> <span class="s2">&quot;expression&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PLACING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="Parser-8096"><a href="#Parser-8096"><span class="linenos">8096</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FROM&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="Parser-8097"><a href="#Parser-8097"><span class="linenos">8097</span></a> <span class="s2">&quot;for&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
</span><span id="Parser-8098"><a href="#Parser-8098"><span class="linenos">8098</span></a> <span class="p">},</span>
</span><span id="Parser-8099"><a href="#Parser-8099"><span class="linenos">8099</span></a> <span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Parser consumes a list of tokens produced by the Tokenizer and produces a parsed syntax tree.</p>
<h6 id="arguments">Arguments:</h6>
<ul>
<li><strong>error_level:</strong> The desired error level.
Default: ErrorLevel.IMMEDIATE</li>
<li><strong>error_message_context:</strong> The amount of context to capture from a query string when displaying
the error message (in number of characters).
Default: 100</li>
<li><strong>max_errors:</strong> Maximum number of error messages to include in a raised ParseError.
This is only relevant if error_level is ErrorLevel.RAISE.
Default: 3</li>
</ul>
</div>
<div id="Parser.__init__" class="classattr">
<input id="Parser.__init__-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<div class="attr function">
<span class="name">Parser</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">error_level</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n"><a href="errors.html#ErrorLevel">sqlglot.errors.ErrorLevel</a></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">error_message_context</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">100</span>,</span><span class="param"> <span class="n">max_errors</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</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="dialects.html#Dialect">sqlglot.dialects.Dialect</a></span><span class="p">,</span> <span class="n">Type</span><span class="p">[</span><span class="n"><a href="dialects.html#Dialect">sqlglot.dialects.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>
<label class="view-source-button" for="Parser.__init__-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Parser.__init__"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Parser.__init__-1469"><a href="#Parser.__init__-1469"><span class="linenos">1469</span></a> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span>
</span><span id="Parser.__init__-1470"><a href="#Parser.__init__-1470"><span class="linenos">1470</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser.__init__-1471"><a href="#Parser.__init__-1471"><span class="linenos">1471</span></a> <span class="n">error_level</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">ErrorLevel</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
</span><span id="Parser.__init__-1472"><a href="#Parser.__init__-1472"><span class="linenos">1472</span></a> <span class="n">error_message_context</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">100</span><span class="p">,</span>
</span><span id="Parser.__init__-1473"><a href="#Parser.__init__-1473"><span class="linenos">1473</span></a> <span class="n">max_errors</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
</span><span id="Parser.__init__-1474"><a href="#Parser.__init__-1474"><span class="linenos">1474</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="Parser.__init__-1475"><a href="#Parser.__init__-1475"><span class="linenos">1475</span></a> <span class="p">):</span>
</span><span id="Parser.__init__-1476"><a href="#Parser.__init__-1476"><span class="linenos">1476</span></a> <span class="kn">from</span><span class="w"> </span><span class="nn">sqlglot.dialects</span><span class="w"> </span><span class="kn">import</span> <span class="n">Dialect</span>
</span><span id="Parser.__init__-1477"><a href="#Parser.__init__-1477"><span class="linenos">1477</span></a>
</span><span id="Parser.__init__-1478"><a href="#Parser.__init__-1478"><span class="linenos">1478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">=</span> <span class="n">error_level</span> <span class="ow">or</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span>
</span><span id="Parser.__init__-1479"><a href="#Parser.__init__-1479"><span class="linenos">1479</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span> <span class="o">=</span> <span class="n">error_message_context</span>
</span><span id="Parser.__init__-1480"><a href="#Parser.__init__-1480"><span class="linenos">1480</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span> <span class="o">=</span> <span class="n">max_errors</span>
</span><span id="Parser.__init__-1481"><a href="#Parser.__init__-1481"><span class="linenos">1481</span></a> <span class="bp">self</span><span class="o">.</span><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="Parser.__init__-1482"><a href="#Parser.__init__-1482"><span class="linenos">1482</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
</span></pre></div>
</div>
<div id="Parser.FUNCTIONS" class="classattr">
<div class="attr variable">
<span class="name">FUNCTIONS</span><span class="annotation">: Dict[str, Callable]</span> =
<input id="Parser.FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.FUNCTIONS-view-value"></label><span class="default_value">{&#39;ABS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Abs">sqlglot.expressions.Abs</a>&#39;&gt;&gt;, &#39;ADD_MONTHS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#AddMonths">sqlglot.expressions.AddMonths</a>&#39;&gt;&gt;, &#39;AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#And">sqlglot.expressions.And</a>&#39;&gt;&gt;, &#39;ANONYMOUS_AGG_FUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#AnonymousAggFunc">sqlglot.expressions.AnonymousAggFunc</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPLY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Apply">sqlglot.expressions.Apply</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;APPROX_TOP_K&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ApproxTopK">sqlglot.expressions.ApproxTopK</a>&#39;&gt;&gt;, &#39;ARG_MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;ARGMAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;MAX_BY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;ARG_MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;ARGMIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;MIN_BY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ARRAY_AGG&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ARRAY_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>&#39;&gt;&gt;, &#39;ARRAY_ANY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>&#39;&gt;&gt;, &#39;ARRAY_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>&#39;&gt;&gt;, &#39;ARRAY_CONSTRUCT_COMPACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayConstructCompact">sqlglot.expressions.ArrayConstructCompact</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;ARRAY_HAS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>&#39;&gt;&gt;, &#39;ARRAY_CONTAINS_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayContainsAll">sqlglot.expressions.ArrayContainsAll</a>&#39;&gt;&gt;, &#39;ARRAY_HAS_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayContainsAll">sqlglot.expressions.ArrayContainsAll</a>&#39;&gt;&gt;, &#39;FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_FILTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>&#39;&gt;&gt;, &#39;ARRAY_OVERLAPS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_SORT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArraySort">sqlglot.expressions.ArraySort</a>&#39;&gt;&gt;, &#39;ARRAY_SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>&#39;&gt;&gt;, &#39;ARRAY_TO_STRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayToString">sqlglot.expressions.ArrayToString</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayToString">sqlglot.expressions.ArrayToString</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;ARRAY_UNIQUE_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ArrayUniqueAgg">sqlglot.expressions.ArrayUniqueAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CBRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Cbrt">sqlglot.expressions.Cbrt</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CHR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHAR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COALESCE&#39;: &lt;function build_coalesce&gt;, &#39;IFNULL&#39;: &lt;function build_coalesce&gt;, &#39;NVL&#39;: &lt;function build_coalesce&gt;, &#39;COLLATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Collate">sqlglot.expressions.Collate</a>&#39;&gt;&gt;, &#39;COLUMNS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Columns">sqlglot.expressions.Columns</a>&#39;&gt;&gt;, &#39;COMBINED_AGG_FUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CombinedAggFunc">sqlglot.expressions.CombinedAggFunc</a>&#39;&gt;&gt;, &#39;COMBINED_PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CombinedParameterizedAgg">sqlglot.expressions.CombinedParameterizedAgg</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CONNECT_BY_ROOT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ConnectByRoot">sqlglot.expressions.ConnectByRoot</a>&#39;&gt;&gt;, &#39;CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Contains">sqlglot.expressions.Contains</a>&#39;&gt;&gt;, &#39;CONVERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Convert">sqlglot.expressions.Convert</a>&#39;&gt;&gt;, &#39;CONVERT_TIMEZONE&#39;: &lt;function build_convert_timezone&gt;, &#39;CORR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Corr">sqlglot.expressions.Corr</a>&#39;&gt;&gt;, &#39;COUNT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COUNT_IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;COUNTIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CountIf">sqlglot.expressions.CountIf</a>&#39;&gt;&gt;, &#39;COVAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CovarPop">sqlglot.expressions.CovarPop</a>&#39;&gt;&gt;, &#39;COVAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CovarSamp">sqlglot.expressions.CovarSamp</a>&#39;&gt;&gt;, &#39;CURRENT_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;&gt;, &#39;CURRENT_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>&#39;&gt;&gt;, &#39;CURRENT_SCHEMA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentSchema">sqlglot.expressions.CurrentSchema</a>&#39;&gt;&gt;, &#39;CURRENT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;&gt;, &#39;CURRENT_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;&gt;, &#39;CURRENT_USER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;&gt;, &#39;DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;&gt;, &#39;DATE_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>&#39;&gt;&gt;, &#39;DATE_BIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateBin">sqlglot.expressions.DateBin</a>&#39;&gt;&gt;, &#39;DATEDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateDiff">sqlglot.expressions.DateDiff</a>&#39;&gt;&gt;, &#39;DATE_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateSub">sqlglot.expressions.DateSub</a>&#39;&gt;&gt;, &#39;DATE_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATE_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>&#39;&gt;&gt;, &#39;DATE_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DateTrunc">sqlglot.expressions.DateTrunc</a>&#39;&gt;&gt;, &#39;DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Datetime">sqlglot.expressions.Datetime</a>&#39;&gt;&gt;, &#39;DATETIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>&#39;&gt;&gt;, &#39;DATETIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>&#39;&gt;&gt;, &#39;DATETIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>&#39;&gt;&gt;, &#39;DATETIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>&#39;&gt;&gt;, &#39;DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Day">sqlglot.expressions.Day</a>&#39;&gt;&gt;, &#39;DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAYOFMONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>&#39;&gt;&gt;, &#39;DAY_OF_WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>&#39;&gt;&gt;, &#39;DAYOFWEEK_ISO&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfWeekIso">sqlglot.expressions.DayOfWeekIso</a>&#39;&gt;&gt;, &#39;ISODOW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfWeekIso">sqlglot.expressions.DayOfWeekIso</a>&#39;&gt;&gt;, &#39;DAY_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DAYOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>&#39;&gt;&gt;, &#39;DECODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Decode">sqlglot.expressions.Decode</a>&#39;&gt;&gt;, &#39;DI_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>&#39;&gt;&gt;, &#39;ENCODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Encode">sqlglot.expressions.Encode</a>&#39;&gt;&gt;, &#39;EXISTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Exists">sqlglot.expressions.Exists</a>&#39;&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXPLODE_OUTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ExplodeOuter">sqlglot.expressions.ExplodeOuter</a>&#39;&gt;&gt;, &#39;EXPLODING_GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ExplodingGenerateSeries">sqlglot.expressions.ExplodingGenerateSeries</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FEATURES_AT_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#FeaturesAtTime">sqlglot.expressions.FeaturesAtTime</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FIRST_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#FirstValue">sqlglot.expressions.FirstValue</a>&#39;&gt;&gt;, &#39;FLATTEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Flatten">sqlglot.expressions.Flatten</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;FROM_ISO8601_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#FromISO8601Timestamp">sqlglot.expressions.FromISO8601Timestamp</a>&#39;&gt;&gt;, &#39;GAP_FILL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#GapFill">sqlglot.expressions.GapFill</a>&#39;&gt;&gt;, &#39;GENERATE_DATE_ARRAY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#GenerateSeries">sqlglot.expressions.GenerateSeries</a>&#39;&gt;&gt;, &#39;GENERATE_TIMESTAMP_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#GenerateTimestampArray">sqlglot.expressions.GenerateTimestampArray</a>&#39;&gt;&gt;, &#39;GREATEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Greatest">sqlglot.expressions.Greatest</a>&#39;&gt;&gt;, &#39;GROUP_CONCAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>&#39;&gt;&gt;, &#39;HEX&#39;: &lt;function build_hex&gt;, &#39;HLL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Hll">sqlglot.expressions.Hll</a>&#39;&gt;&gt;, &#39;IF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;IIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#If">sqlglot.expressions.If</a>&#39;&gt;&gt;, &#39;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;INLINE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Inline">sqlglot.expressions.Inline</a>&#39;&gt;&gt;, &#39;INT64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Int64">sqlglot.expressions.Int64</a>&#39;&gt;&gt;, &#39;IS_ASCII&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#IsAscii">sqlglot.expressions.IsAscii</a>&#39;&gt;&gt;, &#39;IS_INF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#IsInf">sqlglot.expressions.IsInf</a>&#39;&gt;&gt;, &#39;ISINF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#IsInf">sqlglot.expressions.IsInf</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;J_S_O_N_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONArray">sqlglot.expressions.JSONArray</a>&#39;&gt;&gt;, &#39;J_S_O_N_ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONArrayAgg">sqlglot.expressions.JSONArrayAgg</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;&gt;, &#39;JSONB_EXISTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONBExists">sqlglot.expressions.JSONBExists</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;J_S_O_N_B_OBJECT_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONBObjectAgg">sqlglot.expressions.JSONBObjectAgg</a>&#39;&gt;&gt;, &#39;J_S_O_N_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONCast">sqlglot.expressions.JSONCast</a>&#39;&gt;&gt;, &#39;J_S_O_N_EXISTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONExists">sqlglot.expressions.JSONExists</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;function build_extract_json_with_path.&lt;locals&gt;._builder&gt;, &#39;JSON_EXTRACT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONExtractArray">sqlglot.expressions.JSONExtractArray</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;function build_extract_json_with_path.&lt;locals&gt;._builder&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONObjectAgg">sqlglot.expressions.JSONObjectAgg</a>&#39;&gt;&gt;, &#39;J_S_O_N_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONTable">sqlglot.expressions.JSONTable</a>&#39;&gt;&gt;, &#39;J_S_O_N_VALUE_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#JSONValueArray">sqlglot.expressions.JSONValueArray</a>&#39;&gt;&gt;, &#39;LAG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Lag">sqlglot.expressions.Lag</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LastDay">sqlglot.expressions.LastDay</a>&#39;&gt;&gt;, &#39;LAST_DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LastDay">sqlglot.expressions.LastDay</a>&#39;&gt;&gt;, &#39;LAST_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LastValue">sqlglot.expressions.LastValue</a>&#39;&gt;&gt;, &#39;LEAD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Lead">sqlglot.expressions.Lead</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;CHAR_LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;CHARACTER_LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LIST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#List">sqlglot.expressions.List</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;function build_logarithm&gt;, &#39;LOGICAL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOL_AND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;BOOLAND_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>&#39;&gt;&gt;, &#39;LOGICAL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOL_OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;BOOLOR_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>&#39;&gt;&gt;, &#39;LOWER&#39;: &lt;function build_lower&gt;, &#39;LCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Lower">sqlglot.expressions.Lower</a>&#39;&gt;&gt;, &#39;LOWER_HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#LowerHex">sqlglot.expressions.LowerHex</a>&#39;&gt;&gt;, &#39;MD5&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MD5">sqlglot.expressions.MD5</a>&#39;&gt;&gt;, &#39;MD5_DIGEST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>&#39;&gt;&gt;, &#39;MAKE_INTERVAL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MakeInterval">sqlglot.expressions.MakeInterval</a>&#39;&gt;&gt;, &#39;MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Map">sqlglot.expressions.Map</a>&#39;&gt;&gt;, &#39;MAP_FROM_ENTRIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>&#39;&gt;&gt;, &#39;MATCH_AGAINST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>&#39;&gt;&gt;, &#39;MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Max">sqlglot.expressions.Max</a>&#39;&gt;&gt;, &#39;MEDIAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Median">sqlglot.expressions.Median</a>&#39;&gt;&gt;, &#39;MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Min">sqlglot.expressions.Min</a>&#39;&gt;&gt;, &#39;MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Month">sqlglot.expressions.Month</a>&#39;&gt;&gt;, &#39;MONTHS_BETWEEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>&#39;&gt;&gt;, &#39;NEXT_VALUE_FOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>&#39;&gt;&gt;, &#39;NORMALIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Normalize">sqlglot.expressions.Normalize</a>&#39;&gt;&gt;, &#39;NTH_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#NthValue">sqlglot.expressions.NthValue</a>&#39;&gt;&gt;, &#39;NULLIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Nullif">sqlglot.expressions.Nullif</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OBJECT_INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ObjectInsert">sqlglot.expressions.ObjectInsert</a>&#39;&gt;&gt;, &#39;OPEN_J_S_O_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>&#39;&gt;&gt;, &#39;OR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Or">sqlglot.expressions.Or</a>&#39;&gt;&gt;, &#39;OVERLAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Overlay">sqlglot.expressions.Overlay</a>&#39;&gt;&gt;, &#39;PAD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Pad">sqlglot.expressions.Pad</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PARSE_JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;&gt;, &#39;JSON_PARSE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POSEXPLODE_OUTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#PosexplodeOuter">sqlglot.expressions.PosexplodeOuter</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;PREDICT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Predict">sqlglot.expressions.Predict</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;QUARTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Quarter">sqlglot.expressions.Quarter</a>&#39;&gt;&gt;, &#39;RAND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;&gt;, &#39;RANDOM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;&gt;, &#39;RANDN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Randn">sqlglot.expressions.Randn</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpExtract">sqlglot.expressions.RegexpExtract</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpExtractAll">sqlglot.expressions.RegexpExtractAll</a>&#39;&gt;&gt;, &#39;REGEXP_I_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>&#39;&gt;&gt;, &#39;REGEXP_LIKE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>&#39;&gt;&gt;, &#39;REGEXP_REPLACE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpReplace">sqlglot.expressions.RegexpReplace</a>&#39;&gt;&gt;, &#39;REGEXP_SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>&#39;&gt;&gt;, &#39;REPEAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Repeat">sqlglot.expressions.Repeat</a>&#39;&gt;&gt;, &#39;RIGHT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Right">sqlglot.expressions.Right</a>&#39;&gt;&gt;, &#39;ROUND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Round">sqlglot.expressions.Round</a>&#39;&gt;&gt;, &#39;ROW_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>&#39;&gt;&gt;, &#39;SHA&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA1&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SHA">sqlglot.expressions.SHA</a>&#39;&gt;&gt;, &#39;SHA2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SHA2">sqlglot.expressions.SHA2</a>&#39;&gt;&gt;, &#39;SAFE_DIVIDE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>&#39;&gt;&gt;, &#39;SIGN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Sign">sqlglot.expressions.Sign</a>&#39;&gt;&gt;, &#39;SIGNUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Sign">sqlglot.expressions.Sign</a>&#39;&gt;&gt;, &#39;SORT_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SortArray">sqlglot.expressions.SortArray</a>&#39;&gt;&gt;, &#39;SPLIT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Split">sqlglot.expressions.Split</a>&#39;&gt;&gt;, &#39;SPLIT_PART&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#SplitPart">sqlglot.expressions.SplitPart</a>&#39;&gt;&gt;, &#39;SQRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>&#39;&gt;&gt;, &#39;STANDARD_HASH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>&#39;&gt;&gt;, &#39;STAR_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StarMap">sqlglot.expressions.StarMap</a>&#39;&gt;&gt;, &#39;STARTS_WITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STARTSWITH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>&#39;&gt;&gt;, &#39;STDDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDEV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Stddev">sqlglot.expressions.Stddev</a>&#39;&gt;&gt;, &#39;STDDEV_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>&#39;&gt;&gt;, &#39;STDDEV_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>&#39;&gt;&gt;, &#39;STR_POSITION&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>&#39;&gt;&gt;, &#39;STR_TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>&#39;&gt;&gt;, &#39;STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>&#39;&gt;&gt;, &#39;STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>&#39;&gt;&gt;, &#39;STRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#String">sqlglot.expressions.String</a>&#39;&gt;&gt;, &#39;STRING_TO_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StringToArray">sqlglot.expressions.StringToArray</a>&#39;&gt;&gt;, &#39;SPLIT_BY_STRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StringToArray">sqlglot.expressions.StringToArray</a>&#39;&gt;&gt;, &#39;STRUCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Struct">sqlglot.expressions.Struct</a>&#39;&gt;&gt;, &#39;STRUCT_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>&#39;&gt;&gt;, &#39;STUFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Stuff">sqlglot.expressions.Stuff</a>&#39;&gt;&gt;, &#39;SUBSTRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUBSTR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Substring">sqlglot.expressions.Substring</a>&#39;&gt;&gt;, &#39;SUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Sum">sqlglot.expressions.Sum</a>&#39;&gt;&gt;, &#39;TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Time">sqlglot.expressions.Time</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;&gt;, &#39;TIMEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Timestamp">sqlglot.expressions.Timestamp</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMPDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;&gt;, &#39;TIMESTAMPFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ToArray">sqlglot.expressions.ToArray</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TO_DAYS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ToDays">sqlglot.expressions.ToDays</a>&#39;&gt;&gt;, &#39;TO_DOUBLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ToDouble">sqlglot.expressions.ToDouble</a>&#39;&gt;&gt;, &#39;TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ToMap">sqlglot.expressions.ToMap</a>&#39;&gt;&gt;, &#39;TO_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#ToNumber">sqlglot.expressions.ToNumber</a>&#39;&gt;&gt;, &#39;TRANSFORM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Transform">sqlglot.expressions.Transform</a>&#39;&gt;&gt;, &#39;TRIM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Trim">sqlglot.expressions.Trim</a>&#39;&gt;&gt;, &#39;TRY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Try">sqlglot.expressions.Try</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TsOrDsDiff">sqlglot.expressions.TsOrDsDiff</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TS_OR_DS_TO_DATETIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TsOrDsToDatetime">sqlglot.expressions.TsOrDsToDatetime</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TsOrDsToTime">sqlglot.expressions.TsOrDsToTime</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#TsOrDsToTimestamp">sqlglot.expressions.TsOrDsToTimestamp</a>&#39;&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNICODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Unicode">sqlglot.expressions.Unicode</a>&#39;&gt;&gt;, &#39;UNIX_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#UnixDate">sqlglot.expressions.UnixDate</a>&#39;&gt;&gt;, &#39;UNIX_SECONDS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#UnixSeconds">sqlglot.expressions.UnixSeconds</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;UNNEST&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UPPER&#39;: &lt;function build_upper&gt;, &#39;UCASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Upper">sqlglot.expressions.Upper</a>&#39;&gt;&gt;, &#39;UUID&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Uuid">sqlglot.expressions.Uuid</a>&#39;&gt;&gt;, &#39;GEN_RANDOM_UUID&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Uuid">sqlglot.expressions.Uuid</a>&#39;&gt;&gt;, &#39;GENERATE_UUID&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Uuid">sqlglot.expressions.Uuid</a>&#39;&gt;&gt;, &#39;UUID_STRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Uuid">sqlglot.expressions.Uuid</a>&#39;&gt;&gt;, &#39;VAR_MAP&#39;: &lt;function build_var_map&gt;, &#39;VARIANCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Variance">sqlglot.expressions.Variance</a>&#39;&gt;&gt;, &#39;VARIANCE_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;VAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>&#39;&gt;&gt;, &#39;WEEK&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Week">sqlglot.expressions.Week</a>&#39;&gt;&gt;, &#39;WEEK_OF_YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;WEEKOFYEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>&#39;&gt;&gt;, &#39;XMLELEMENT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#XMLElement">sqlglot.expressions.XMLElement</a>&#39;&gt;&gt;, &#39;X_M_L_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>&#39;&gt;&gt;, &#39;XOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Xor">sqlglot.expressions.Xor</a>&#39;&gt;&gt;, &#39;YEAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#Year">sqlglot.expressions.Year</a>&#39;&gt;&gt;, &#39;ARRAYAGG&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;GLOB&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;JSON_EXTRACT_PATH_TEXT&#39;: &lt;function build_extract_json_with_path.&lt;locals&gt;._builder&gt;, &#39;LIKE&#39;: &lt;function build_like&gt;, &#39;LOG2&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LOG10&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LPAD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LEFTPAD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LTRIM&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;MOD&#39;: &lt;function build_mod&gt;, &#39;RIGHTPAD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;RPAD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;RTRIM&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SCOPE_RESOLUTION&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;STRPOS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;CHARINDEX&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;INSTR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>&#39;&gt;&gt;, &#39;LOCATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TO_HEX&#39;: &lt;function build_hex&gt;}</span>
</div>
<a class="headerlink" href="#Parser.FUNCTIONS"></a>
</div>
<div id="Parser.NO_PAREN_FUNCTIONS" class="classattr">
<div class="attr variable">
<span class="name">NO_PAREN_FUNCTIONS</span> =
<input id="Parser.NO_PAREN_FUNCTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.NO_PAREN_FUNCTIONS-view-value"></label><span class="default_value">{&lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;: &lt;class &#39;<a href="expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;: &lt;class &#39;<a href="expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;: &lt;class &#39;<a href="expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;: &lt;class &#39;<a href="expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;: &lt;class &#39;<a href="expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.NO_PAREN_FUNCTIONS"></a>
</div>
<div id="Parser.STRUCT_TYPE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">STRUCT_TYPE_TOKENS</span> =
<input id="Parser.STRUCT_TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.STRUCT_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.UNION: &#39;UNION&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.STRUCT_TYPE_TOKENS"></a>
</div>
<div id="Parser.NESTED_TYPE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">NESTED_TYPE_TOKENS</span> =
<input id="Parser.NESTED_TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.NESTED_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.NESTED_TYPE_TOKENS"></a>
</div>
<div id="Parser.ENUM_TYPE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">ENUM_TYPE_TOKENS</span> =
<input id="Parser.ENUM_TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.ENUM_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.DYNAMIC: &#39;DYNAMIC&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.ENUM_TYPE_TOKENS"></a>
</div>
<div id="Parser.AGGREGATE_TYPE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">AGGREGATE_TYPE_TOKENS</span> =
<input id="Parser.AGGREGATE_TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.AGGREGATE_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.AGGREGATE_TYPE_TOKENS"></a>
</div>
<div id="Parser.TYPE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">TYPE_TOKENS</span> =
<input id="Parser.TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.MULTILINESTRING: &#39;MULTILINESTRING&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.UDOUBLE: &#39;UDOUBLE&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DECIMAL64: &#39;DECIMAL64&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.DECIMAL128: &#39;DECIMAL128&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RING: &#39;RING&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL32: &#39;DECIMAL32&#39;&gt;, &lt;TokenType.DATETIME2: &#39;DATETIME2&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.POINT: &#39;POINT&#39;&gt;, &lt;TokenType.POLYGON: &#39;POLYGON&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.BLOB: &#39;BLOB&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.DYNAMIC: &#39;DYNAMIC&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.SMALLDATETIME: &#39;SMALLDATETIME&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.MULTIPOLYGON: &#39;MULTIPOLYGON&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.LINESTRING: &#39;LINESTRING&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL256: &#39;DECIMAL256&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.TYPE_TOKENS"></a>
</div>
<div id="Parser.SIGNED_TO_UNSIGNED_TYPE_TOKEN" class="classattr">
<div class="attr variable">
<span class="name">SIGNED_TO_UNSIGNED_TYPE_TOKEN</span> =
<input id="Parser.SIGNED_TO_UNSIGNED_TYPE_TOKEN-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.SIGNED_TO_UNSIGNED_TYPE_TOKEN-view-value"></label><span class="default_value">{&lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;: &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;: &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;: &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;: &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;: &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;: &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;: &lt;TokenType.UDOUBLE: &#39;UDOUBLE&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.SIGNED_TO_UNSIGNED_TYPE_TOKEN"></a>
</div>
<div id="Parser.SUBQUERY_PREDICATES" class="classattr">
<div class="attr variable">
<span class="name">SUBQUERY_PREDICATES</span> =
<input id="Parser.SUBQUERY_PREDICATES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.SUBQUERY_PREDICATES-view-value"></label><span class="default_value">{&lt;TokenType.ANY: &#39;ANY&#39;&gt;: &lt;class &#39;<a href="expressions.html#Any">sqlglot.expressions.Any</a>&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;: &lt;class &#39;<a href="expressions.html#All">sqlglot.expressions.All</a>&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;: &lt;class &#39;<a href="expressions.html#Exists">sqlglot.expressions.Exists</a>&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;: &lt;class &#39;<a href="expressions.html#Any">sqlglot.expressions.Any</a>&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.SUBQUERY_PREDICATES"></a>
</div>
<div id="Parser.RESERVED_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">RESERVED_TOKENS</span> =
<input id="Parser.RESERVED_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.RESERVED_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STAR: &#39;STAR&#39;&gt;, &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &lt;TokenType.SEMICOLON: &#39;SEMICOLON&#39;&gt;, &lt;TokenType.DOT: &#39;DOT&#39;&gt;, &lt;TokenType.SLASH: &#39;SLASH&#39;&gt;, &lt;TokenType.R_PAREN: &#39;R_PAREN&#39;&gt;, &lt;TokenType.MOD: &#39;MOD&#39;&gt;, &lt;TokenType.LT: &#39;LT&#39;&gt;, &lt;TokenType.TILDA: &#39;TILDA&#39;&gt;, &lt;TokenType.L_BRACKET: &#39;L_BRACKET&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;, &lt;TokenType.COMMA: &#39;COMMA&#39;&gt;, &lt;TokenType.PLUS: &#39;PLUS&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.HASH: &#39;HASH&#39;&gt;, &lt;TokenType.R_BRACE: &#39;R_BRACE&#39;&gt;, &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &lt;TokenType.COLON: &#39;COLON&#39;&gt;, &lt;TokenType.GT: &#39;GT&#39;&gt;, &lt;TokenType.PLACEHOLDER: &#39;PLACEHOLDER&#39;&gt;, &lt;TokenType.CARET: &#39;CARET&#39;&gt;, &lt;TokenType.R_BRACKET: &#39;R_BRACKET&#39;&gt;, &lt;TokenType.PIPE: &#39;PIPE&#39;&gt;, &lt;TokenType.BACKSLASH: &#39;BACKSLASH&#39;&gt;, &lt;TokenType.DASH: &#39;DASH&#39;&gt;, &lt;TokenType.PARAMETER: &#39;PARAMETER&#39;&gt;, &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &lt;TokenType.L_BRACE: &#39;L_BRACE&#39;&gt;, &lt;TokenType.AMP: &#39;AMP&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.RESERVED_TOKENS"></a>
</div>
<div id="Parser.DB_CREATABLES" class="classattr">
<div class="attr variable">
<span class="name">DB_CREATABLES</span> =
<input id="Parser.DB_CREATABLES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.DB_CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.SINK: &#39;SINK&#39;&gt;, &lt;TokenType.SOURCE: &#39;SOURCE&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.NAMESPACE: &#39;NAMESPACE&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.DB_CREATABLES"></a>
</div>
<div id="Parser.CREATABLES" class="classattr">
<div class="attr variable">
<span class="name">CREATABLES</span> =
<input id="Parser.CREATABLES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.SINK: &#39;SINK&#39;&gt;, &lt;TokenType.SOURCE: &#39;SOURCE&#39;&gt;, &lt;TokenType.NAMESPACE: &#39;NAMESPACE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.CREATABLES"></a>
</div>
<div id="Parser.ALTERABLES" class="classattr">
<div class="attr variable">
<span class="name">ALTERABLES</span> =
<span class="default_value">{&lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.ALTERABLES"></a>
</div>
<div id="Parser.ID_VAR_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">ID_VAR_TOKENS</span> =
<input id="Parser.ID_VAR_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MULTILINESTRING: &#39;MULTILINESTRING&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.UDOUBLE: &#39;UDOUBLE&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ATTACH: &#39;ATTACH&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.DECIMAL64: &#39;DECIMAL64&#39;&gt;, &lt;TokenType.SOURCE: &#39;SOURCE&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.COPY: &#39;COPY&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.CURRENT_SCHEMA: &#39;CURRENT_SCHEMA&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.DECIMAL128: &#39;DECIMAL128&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.RING: &#39;RING&#39;&gt;, &lt;TokenType.SINK: &#39;SINK&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.DETACH: &#39;DETACH&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL32: &#39;DECIMAL32&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.DATETIME2: &#39;DATETIME2&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.POINT: &#39;POINT&#39;&gt;, &lt;TokenType.EXPORT: &#39;EXPORT&#39;&gt;, &lt;TokenType.POLYGON: &#39;POLYGON&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.BLOB: &#39;BLOB&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.NAMESPACE: &#39;NAMESPACE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.DYNAMIC: &#39;DYNAMIC&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.SMALLDATETIME: &#39;SMALLDATETIME&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MULTIPOLYGON: &#39;MULTIPOLYGON&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.LINESTRING: &#39;LINESTRING&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.PUT: &#39;PUT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &lt;TokenType.RENAME: &#39;RENAME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DECIMAL256: &#39;DECIMAL256&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.ID_VAR_TOKENS"></a>
</div>
<div id="Parser.TABLE_ALIAS_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MULTILINESTRING: &#39;MULTILINESTRING&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.UDOUBLE: &#39;UDOUBLE&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ATTACH: &#39;ATTACH&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DECIMAL64: &#39;DECIMAL64&#39;&gt;, &lt;TokenType.SOURCE: &#39;SOURCE&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.COPY: &#39;COPY&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.CURRENT_SCHEMA: &#39;CURRENT_SCHEMA&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.DECIMAL128: &#39;DECIMAL128&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.RING: &#39;RING&#39;&gt;, &lt;TokenType.SINK: &#39;SINK&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.DETACH: &#39;DETACH&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL32: &#39;DECIMAL32&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.DATETIME2: &#39;DATETIME2&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.POINT: &#39;POINT&#39;&gt;, &lt;TokenType.EXPORT: &#39;EXPORT&#39;&gt;, &lt;TokenType.POLYGON: &#39;POLYGON&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.BLOB: &#39;BLOB&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.NAMESPACE: &#39;NAMESPACE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.DYNAMIC: &#39;DYNAMIC&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.SMALLDATETIME: &#39;SMALLDATETIME&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MULTIPOLYGON: &#39;MULTIPOLYGON&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.LINESTRING: &#39;LINESTRING&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.PUT: &#39;PUT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &lt;TokenType.RENAME: &#39;RENAME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL256: &#39;DECIMAL256&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.TABLE_ALIAS_TOKENS"></a>
</div>
<div id="Parser.ALIAS_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">ALIAS_TOKENS</span> =
<input id="Parser.ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MULTILINESTRING: &#39;MULTILINESTRING&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.UDOUBLE: &#39;UDOUBLE&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ATTACH: &#39;ATTACH&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.DECIMAL64: &#39;DECIMAL64&#39;&gt;, &lt;TokenType.SOURCE: &#39;SOURCE&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.COPY: &#39;COPY&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.CURRENT_SCHEMA: &#39;CURRENT_SCHEMA&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.DECIMAL128: &#39;DECIMAL128&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.RING: &#39;RING&#39;&gt;, &lt;TokenType.SINK: &#39;SINK&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.DETACH: &#39;DETACH&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL32: &#39;DECIMAL32&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.DATETIME2: &#39;DATETIME2&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.POINT: &#39;POINT&#39;&gt;, &lt;TokenType.EXPORT: &#39;EXPORT&#39;&gt;, &lt;TokenType.POLYGON: &#39;POLYGON&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.BLOB: &#39;BLOB&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.NAMESPACE: &#39;NAMESPACE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.DYNAMIC: &#39;DYNAMIC&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.SMALLDATETIME: &#39;SMALLDATETIME&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MULTIPOLYGON: &#39;MULTIPOLYGON&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.LINESTRING: &#39;LINESTRING&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.PUT: &#39;PUT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &lt;TokenType.RENAME: &#39;RENAME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DECIMAL256: &#39;DECIMAL256&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.ALIAS_TOKENS"></a>
</div>
<div id="Parser.ARRAY_CONSTRUCTORS" class="classattr">
<div class="attr variable">
<span class="name">ARRAY_CONSTRUCTORS</span> =
<span class="default_value">{&#39;ARRAY&#39;: &lt;class &#39;<a href="expressions.html#Array">sqlglot.expressions.Array</a>&#39;&gt;, &#39;LIST&#39;: &lt;class &#39;<a href="expressions.html#List">sqlglot.expressions.List</a>&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.ARRAY_CONSTRUCTORS"></a>
</div>
<div id="Parser.COMMENT_TABLE_ALIAS_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">COMMENT_TABLE_ALIAS_TOKENS</span> =
<input id="Parser.COMMENT_TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.COMMENT_TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MULTILINESTRING: &#39;MULTILINESTRING&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.UDOUBLE: &#39;UDOUBLE&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ATTACH: &#39;ATTACH&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.DECIMAL64: &#39;DECIMAL64&#39;&gt;, &lt;TokenType.SOURCE: &#39;SOURCE&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.COPY: &#39;COPY&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.CURRENT_SCHEMA: &#39;CURRENT_SCHEMA&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.DECIMAL128: &#39;DECIMAL128&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.RING: &#39;RING&#39;&gt;, &lt;TokenType.SINK: &#39;SINK&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.DETACH: &#39;DETACH&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL32: &#39;DECIMAL32&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.DATETIME2: &#39;DATETIME2&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.POINT: &#39;POINT&#39;&gt;, &lt;TokenType.EXPORT: &#39;EXPORT&#39;&gt;, &lt;TokenType.POLYGON: &#39;POLYGON&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.BLOB: &#39;BLOB&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.NAMESPACE: &#39;NAMESPACE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.DYNAMIC: &#39;DYNAMIC&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.SMALLDATETIME: &#39;SMALLDATETIME&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.MULTIPOLYGON: &#39;MULTIPOLYGON&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.LINESTRING: &#39;LINESTRING&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.PUT: &#39;PUT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &lt;TokenType.RENAME: &#39;RENAME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DECIMAL256: &#39;DECIMAL256&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.COMMENT_TABLE_ALIAS_TOKENS"></a>
</div>
<div id="Parser.UPDATE_ALIAS_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">UPDATE_ALIAS_TOKENS</span> =
<input id="Parser.UPDATE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.UPDATE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MULTILINESTRING: &#39;MULTILINESTRING&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.UDOUBLE: &#39;UDOUBLE&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ATTACH: &#39;ATTACH&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.DECIMAL64: &#39;DECIMAL64&#39;&gt;, &lt;TokenType.SOURCE: &#39;SOURCE&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.COPY: &#39;COPY&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.CURRENT_SCHEMA: &#39;CURRENT_SCHEMA&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.DECIMAL128: &#39;DECIMAL128&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.RING: &#39;RING&#39;&gt;, &lt;TokenType.SINK: &#39;SINK&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.DETACH: &#39;DETACH&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL32: &#39;DECIMAL32&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.DATETIME2: &#39;DATETIME2&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.POINT: &#39;POINT&#39;&gt;, &lt;TokenType.EXPORT: &#39;EXPORT&#39;&gt;, &lt;TokenType.POLYGON: &#39;POLYGON&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.BLOB: &#39;BLOB&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.NAMESPACE: &#39;NAMESPACE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.DYNAMIC: &#39;DYNAMIC&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.SMALLDATETIME: &#39;SMALLDATETIME&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MULTIPOLYGON: &#39;MULTIPOLYGON&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.LINESTRING: &#39;LINESTRING&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.PUT: &#39;PUT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &lt;TokenType.RENAME: &#39;RENAME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DECIMAL256: &#39;DECIMAL256&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.UPDATE_ALIAS_TOKENS"></a>
</div>
<div id="Parser.TRIM_TYPES" class="classattr">
<div class="attr variable">
<span class="name">TRIM_TYPES</span> =
<span class="default_value">{&#39;TRAILING&#39;, &#39;BOTH&#39;, &#39;LEADING&#39;}</span>
</div>
<a class="headerlink" href="#Parser.TRIM_TYPES"></a>
</div>
<div id="Parser.FUNC_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">FUNC_TOKENS</span> =
<input id="Parser.FUNC_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.MULTILINESTRING: &#39;MULTILINESTRING&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.UDOUBLE: &#39;UDOUBLE&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.DECIMAL64: &#39;DECIMAL64&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.CURRENT_SCHEMA: &#39;CURRENT_SCHEMA&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.DECIMAL128: &#39;DECIMAL128&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.RING: &#39;RING&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL32: &#39;DECIMAL32&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.DATETIME2: &#39;DATETIME2&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.POINT: &#39;POINT&#39;&gt;, &lt;TokenType.POLYGON: &#39;POLYGON&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.BLOB: &#39;BLOB&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.DYNAMIC: &#39;DYNAMIC&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.SMALLDATETIME: &#39;SMALLDATETIME&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.MULTIPOLYGON: &#39;MULTIPOLYGON&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.LINESTRING: &#39;LINESTRING&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DECIMAL256: &#39;DECIMAL256&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.FUNC_TOKENS"></a>
</div>
<div id="Parser.CONJUNCTION" class="classattr">
<div class="attr variable">
<span class="name">CONJUNCTION</span><span class="annotation">: Dict[<a href="tokens.html#TokenType">sqlglot.tokens.TokenType</a>, Type[<a href="expressions.html#Expression">sqlglot.expressions.Expression</a>]]</span> =
<span class="default_value">{&lt;TokenType.AND: &#39;AND&#39;&gt;: &lt;class &#39;<a href="expressions.html#And">sqlglot.expressions.And</a>&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.CONJUNCTION"></a>
</div>
<div id="Parser.ASSIGNMENT" class="classattr">
<div class="attr variable">
<span class="name">ASSIGNMENT</span><span class="annotation">: Dict[<a href="tokens.html#TokenType">sqlglot.tokens.TokenType</a>, Type[<a href="expressions.html#Expression">sqlglot.expressions.Expression</a>]]</span> =
<span class="default_value">{&lt;TokenType.COLON_EQ: &#39;COLON_EQ&#39;&gt;: &lt;class &#39;<a href="expressions.html#PropertyEQ">sqlglot.expressions.PropertyEQ</a>&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.ASSIGNMENT"></a>
</div>
<div id="Parser.DISJUNCTION" class="classattr">
<div class="attr variable">
<span class="name">DISJUNCTION</span><span class="annotation">: Dict[<a href="tokens.html#TokenType">sqlglot.tokens.TokenType</a>, Type[<a href="expressions.html#Expression">sqlglot.expressions.Expression</a>]]</span> =
<span class="default_value">{&lt;TokenType.OR: &#39;OR&#39;&gt;: &lt;class &#39;<a href="expressions.html#Or">sqlglot.expressions.Or</a>&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.DISJUNCTION"></a>
</div>
<div id="Parser.EQUALITY" class="classattr">
<div class="attr variable">
<span class="name">EQUALITY</span> =
<input id="Parser.EQUALITY-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.EQUALITY-view-value"></label><span class="default_value">{&lt;TokenType.EQ: &#39;EQ&#39;&gt;: &lt;class &#39;<a href="expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;, &lt;TokenType.NEQ: &#39;NEQ&#39;&gt;: &lt;class &#39;<a href="expressions.html#NEQ">sqlglot.expressions.NEQ</a>&#39;&gt;, &lt;TokenType.NULLSAFE_EQ: &#39;NULLSAFE_EQ&#39;&gt;: &lt;class &#39;<a href="expressions.html#NullSafeEQ">sqlglot.expressions.NullSafeEQ</a>&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.EQUALITY"></a>
</div>
<div id="Parser.COMPARISON" class="classattr">
<div class="attr variable">
<span class="name">COMPARISON</span> =
<input id="Parser.COMPARISON-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.COMPARISON-view-value"></label><span class="default_value">{&lt;TokenType.GT: &#39;GT&#39;&gt;: &lt;class &#39;<a href="expressions.html#GT">sqlglot.expressions.GT</a>&#39;&gt;, &lt;TokenType.GTE: &#39;GTE&#39;&gt;: &lt;class &#39;<a href="expressions.html#GTE">sqlglot.expressions.GTE</a>&#39;&gt;, &lt;TokenType.LT: &#39;LT&#39;&gt;: &lt;class &#39;<a href="expressions.html#LT">sqlglot.expressions.LT</a>&#39;&gt;, &lt;TokenType.LTE: &#39;LTE&#39;&gt;: &lt;class &#39;<a href="expressions.html#LTE">sqlglot.expressions.LTE</a>&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.COMPARISON"></a>
</div>
<div id="Parser.BITWISE" class="classattr">
<div class="attr variable">
<span class="name">BITWISE</span> =
<input id="Parser.BITWISE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.BITWISE-view-value"></label><span class="default_value">{&lt;TokenType.AMP: &#39;AMP&#39;&gt;: &lt;class &#39;<a href="expressions.html#BitwiseAnd">sqlglot.expressions.BitwiseAnd</a>&#39;&gt;, &lt;TokenType.CARET: &#39;CARET&#39;&gt;: &lt;class &#39;<a href="expressions.html#BitwiseXor">sqlglot.expressions.BitwiseXor</a>&#39;&gt;, &lt;TokenType.PIPE: &#39;PIPE&#39;&gt;: &lt;class &#39;<a href="expressions.html#BitwiseOr">sqlglot.expressions.BitwiseOr</a>&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.BITWISE"></a>
</div>
<div id="Parser.TERM" class="classattr">
<div class="attr variable">
<span class="name">TERM</span> =
<input id="Parser.TERM-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.TERM-view-value"></label><span class="default_value">{&lt;TokenType.DASH: &#39;DASH&#39;&gt;: &lt;class &#39;<a href="expressions.html#Sub">sqlglot.expressions.Sub</a>&#39;&gt;, &lt;TokenType.PLUS: &#39;PLUS&#39;&gt;: &lt;class &#39;<a href="expressions.html#Add">sqlglot.expressions.Add</a>&#39;&gt;, &lt;TokenType.MOD: &#39;MOD&#39;&gt;: &lt;class &#39;<a href="expressions.html#Mod">sqlglot.expressions.Mod</a>&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;: &lt;class &#39;<a href="expressions.html#Collate">sqlglot.expressions.Collate</a>&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.TERM"></a>
</div>
<div id="Parser.FACTOR" class="classattr">
<div class="attr variable">
<span class="name">FACTOR</span> =
<input id="Parser.FACTOR-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.FACTOR-view-value"></label><span class="default_value">{&lt;TokenType.DIV: &#39;DIV&#39;&gt;: &lt;class &#39;<a href="expressions.html#IntDiv">sqlglot.expressions.IntDiv</a>&#39;&gt;, &lt;TokenType.LR_ARROW: &#39;LR_ARROW&#39;&gt;: &lt;class &#39;<a href="expressions.html#Distance">sqlglot.expressions.Distance</a>&#39;&gt;, &lt;TokenType.SLASH: &#39;SLASH&#39;&gt;: &lt;class &#39;<a href="expressions.html#Div">sqlglot.expressions.Div</a>&#39;&gt;, &lt;TokenType.STAR: &#39;STAR&#39;&gt;: &lt;class &#39;<a href="expressions.html#Mul">sqlglot.expressions.Mul</a>&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.FACTOR"></a>
</div>
<div id="Parser.EXPONENT" class="classattr">
<div class="attr variable">
<span class="name">EXPONENT</span><span class="annotation">: Dict[<a href="tokens.html#TokenType">sqlglot.tokens.TokenType</a>, Type[<a href="expressions.html#Expression">sqlglot.expressions.Expression</a>]]</span> =
<span class="default_value">{}</span>
</div>
<a class="headerlink" href="#Parser.EXPONENT"></a>
</div>
<div id="Parser.TIMES" class="classattr">
<div class="attr variable">
<span class="name">TIMES</span> =
<span class="default_value">{&lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.TIMES"></a>
</div>
<div id="Parser.TIMESTAMPS" class="classattr">
<div class="attr variable">
<span class="name">TIMESTAMPS</span> =
<input id="Parser.TIMESTAMPS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.TIMESTAMPS-view-value"></label><span class="default_value">{&lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.TIMESTAMPS"></a>
</div>
<div id="Parser.SET_OPERATIONS" class="classattr">
<div class="attr variable">
<span class="name">SET_OPERATIONS</span> =
<span class="default_value">{&lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &lt;TokenType.UNION: &#39;UNION&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.SET_OPERATIONS"></a>
</div>
<div id="Parser.JOIN_METHODS" class="classattr">
<div class="attr variable">
<span class="name">JOIN_METHODS</span> =
<span class="default_value">{&lt;TokenType.POSITIONAL: &#39;POSITIONAL&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.JOIN_METHODS"></a>
</div>
<div id="Parser.JOIN_SIDES" class="classattr">
<div class="attr variable">
<span class="name">JOIN_SIDES</span> =
<span class="default_value">{&lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.JOIN_SIDES"></a>
</div>
<div id="Parser.JOIN_KINDS" class="classattr">
<div class="attr variable">
<span class="name">JOIN_KINDS</span> =
<input id="Parser.JOIN_KINDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.JOIN_KINDS-view-value"></label><span class="default_value">{&lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.INNER: &#39;INNER&#39;&gt;, &lt;TokenType.STRAIGHT_JOIN: &#39;STRAIGHT_JOIN&#39;&gt;, &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.JOIN_KINDS"></a>
</div>
<div id="Parser.JOIN_HINTS" class="classattr">
<div class="attr variable">
<span class="name">JOIN_HINTS</span><span class="annotation">: Set[str]</span> =
<span class="default_value">set()</span>
</div>
<a class="headerlink" href="#Parser.JOIN_HINTS"></a>
</div>
<div id="Parser.LAMBDAS" class="classattr">
<div class="attr variable">
<span class="name">LAMBDAS</span> =
<input id="Parser.LAMBDAS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.LAMBDAS-view-value"></label><span class="default_value">{&lt;TokenType.ARROW: &#39;ARROW&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FARROW: &#39;FARROW&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.LAMBDAS"></a>
</div>
<div id="Parser.COLUMN_OPERATORS" class="classattr">
<div class="attr variable">
<span class="name">COLUMN_OPERATORS</span> =
<input id="Parser.COLUMN_OPERATORS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.COLUMN_OPERATORS-view-value"></label><span class="default_value">{&lt;TokenType.DOT: &#39;DOT&#39;&gt;: None, &lt;TokenType.DOTCOLON: &#39;DOTCOLON&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DCOLON: &#39;DCOLON&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ARROW: &#39;ARROW&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DARROW: &#39;DARROW&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.HASH_ARROW: &#39;HASH_ARROW&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DHASH_ARROW: &#39;DHASH_ARROW&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PLACEHOLDER: &#39;PLACEHOLDER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.COLUMN_OPERATORS"></a>
</div>
<div id="Parser.EXPRESSION_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">EXPRESSION_PARSERS</span> =
<input id="Parser.EXPRESSION_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.EXPRESSION_PARSERS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="expressions.html#Cluster">sqlglot.expressions.Cluster</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Column">sqlglot.expressions.Column</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Condition">sqlglot.expressions.Condition</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#DataType">sqlglot.expressions.DataType</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Expression">sqlglot.expressions.Expression</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#From">sqlglot.expressions.From</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Group">sqlglot.expressions.Group</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Having">sqlglot.expressions.Having</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Hint">sqlglot.expressions.Hint</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Identifier">sqlglot.expressions.Identifier</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Join">sqlglot.expressions.Join</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Lambda">sqlglot.expressions.Lambda</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Lateral">sqlglot.expressions.Lateral</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Limit">sqlglot.expressions.Limit</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Offset">sqlglot.expressions.Offset</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Order">sqlglot.expressions.Order</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Ordered">sqlglot.expressions.Ordered</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Properties">sqlglot.expressions.Properties</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Qualify">sqlglot.expressions.Qualify</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Returning">sqlglot.expressions.Returning</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Select">sqlglot.expressions.Select</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Sort">sqlglot.expressions.Sort</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Table">sqlglot.expressions.Table</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#TableAlias">sqlglot.expressions.TableAlias</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Tuple">sqlglot.expressions.Tuple</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Whens">sqlglot.expressions.Whens</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Where">sqlglot.expressions.Where</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#Window">sqlglot.expressions.Window</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;class &#39;<a href="expressions.html#With">sqlglot.expressions.With</a>&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;JOIN_TYPE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.EXPRESSION_PARSERS"></a>
</div>
<div id="Parser.STATEMENT_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">STATEMENT_PARSERS</span> =
<input id="Parser.STATEMENT_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.STATEMENT_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.ALTER: &#39;ALTER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ANALYZE: &#39;ANALYZE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COPY: &#39;COPY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DROP: &#39;DROP&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GRANT: &#39;GRANT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ROLLBACK: &#39;ROLLBACK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNCACHE: &#39;UNCACHE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SEMICOLON: &#39;SEMICOLON&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.STATEMENT_PARSERS"></a>
</div>
<div id="Parser.UNARY_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">UNARY_PARSERS</span> =
<input id="Parser.UNARY_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.UNARY_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.PLUS: &#39;PLUS&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.NOT: &#39;NOT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.TILDA: &#39;TILDA&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DASH: &#39;DASH&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PIPE_SLASH: &#39;PIPE_SLASH&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DPIPE_SLASH: &#39;DPIPE_SLASH&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.UNARY_PARSERS"></a>
</div>
<div id="Parser.STRING_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">STRING_PARSERS</span> =
<input id="Parser.STRING_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.STRING_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.HEREDOC_STRING: &#39;HEREDOC_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.NATIONAL_STRING: &#39;NATIONAL_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.RAW_STRING: &#39;RAW_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.STRING: &#39;STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNICODE_STRING: &#39;UNICODE_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.STRING_PARSERS"></a>
</div>
<div id="Parser.NUMERIC_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">NUMERIC_PARSERS</span> =
<input id="Parser.NUMERIC_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.NUMERIC_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.BIT_STRING: &#39;BIT_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BYTE_STRING: &#39;BYTE_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.HEX_STRING: &#39;HEX_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.NUMBER: &#39;NUMBER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.NUMERIC_PARSERS"></a>
</div>
<div id="Parser.PRIMARY_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">PRIMARY_PARSERS</span> =
<input id="Parser.PRIMARY_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.PRIMARY_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.HEREDOC_STRING: &#39;HEREDOC_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.NATIONAL_STRING: &#39;NATIONAL_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.RAW_STRING: &#39;RAW_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.STRING: &#39;STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.UNICODE_STRING: &#39;UNICODE_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BIT_STRING: &#39;BIT_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.BYTE_STRING: &#39;BYTE_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.HEX_STRING: &#39;HEX_STRING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.NUMBER: &#39;NUMBER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.INTRODUCER: &#39;INTRODUCER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SESSION_PARAMETER: &#39;SESSION_PARAMETER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.STAR: &#39;STAR&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.PRIMARY_PARSERS"></a>
</div>
<div id="Parser.PLACEHOLDER_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">PLACEHOLDER_PARSERS</span> =
<input id="Parser.PLACEHOLDER_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.PLACEHOLDER_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.PLACEHOLDER: &#39;PLACEHOLDER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PARAMETER: &#39;PARAMETER&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.COLON: &#39;COLON&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.PLACEHOLDER_PARSERS"></a>
</div>
<div id="Parser.RANGE_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">RANGE_PARSERS</span> =
<input id="Parser.RANGE_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.RANGE_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.AT_GT: &#39;AT_GT&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;._parse_binary_range&gt;, &lt;TokenType.BETWEEN: &#39;BETWEEN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;._parse_binary_range&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;._parse_binary_range&gt;, &lt;TokenType.IN: &#39;IN&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.IRLIKE: &#39;IRLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;._parse_binary_range&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;._parse_binary_range&gt;, &lt;TokenType.LT_AT: &#39;LT_AT&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;._parse_binary_range&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;._parse_binary_range&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;._parse_binary_range&gt;, &lt;TokenType.SIMILAR_TO: &#39;SIMILAR_TO&#39;&gt;: &lt;function binary_range_parser.&lt;locals&gt;._parse_binary_range&gt;, &lt;TokenType.FOR: &#39;FOR&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.RANGE_PARSERS"></a>
</div>
<div id="Parser.PROPERTY_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">PROPERTY_PARSERS</span><span class="annotation">: Dict[str, Callable]</span> =
<input id="Parser.PROPERTY_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.PROPERTY_PARSERS-view-value"></label><span class="default_value">{&#39;ALLOWED_VALUES&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ALGORITHM&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;AUTO&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;BACKUP&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;BLOCKCOMPRESSION&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHARSET&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHARACTER SET&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHECKSUM&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CLUSTER BY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CLUSTERED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COLLATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CONTAINS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COPY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATABLOCKSIZE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DATA_DELETION&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DEFINER&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DETERMINISTIC&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DISTRIBUTED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DUPLICATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DYNAMIC&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DISTKEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DISTSTYLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;EMPTY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ENGINE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;EXECUTE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;EXTERNAL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FALLBACK&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FORMAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FREESPACE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;GLOBAL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;HEAP&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ICEBERG&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;IMMUTABLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;INHERITS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;INPUT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;JOURNAL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LANGUAGE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LAYOUT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIFETIME&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LOCATION&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LOCK&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LOCKING&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LOG&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;MATERIALIZED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;MERGEBLOCKRATIO&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;MODIFIES&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;MULTISET&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NO&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ON&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ORDER BY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;OUTPUT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PARTITION&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PARTITION BY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PARTITIONED BY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PARTITIONED_BY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PRIMARY KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;RANGE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;READS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;REMOTE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;RETURNS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;STRICT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;STREAMING&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ROW&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ROW_FORMAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SAMPLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SECURE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SECURITY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SET&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SETTINGS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SHARING&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SORTKEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SOURCE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;STABLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;STORED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SYSTEM_VERSIONING&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TBLPROPERTIES&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TEMP&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TEMPORARY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TO&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TRANSIENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TRANSFORM&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TTL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;USING&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNLOGGED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;VOLATILE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;WITH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.PROPERTY_PARSERS"></a>
</div>
<div id="Parser.CONSTRAINT_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">CONSTRAINT_PARSERS</span> =
<input id="Parser.CONSTRAINT_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.CONSTRAINT_PARSERS-view-value"></label><span class="default_value">{&#39;AUTOINCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;AUTO_INCREMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CASESPECIFIC&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHARACTER SET&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CHECK&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COLLATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMPRESS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CLUSTERED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NONCLUSTERED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DEFAULT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ENCODE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;EPHEMERAL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;EXCLUDE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FOREIGN KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FORMAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;GENERATED&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;IDENTITY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;INLINE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIKE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NOT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NULL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ON&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PATH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PERIOD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PRIMARY KEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;REFERENCES&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TITLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TTL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UNIQUE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UPPERCASE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;WATERMARK&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;WITH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.CONSTRAINT_PARSERS"></a>
</div>
<div id="Parser.ALTER_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">ALTER_PARSERS</span> =
<input id="Parser.ALTER_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.ALTER_PARSERS-view-value"></label><span class="default_value">{&#39;ADD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;AS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ALTER&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CLUSTER BY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DELETE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DROP&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;RENAME&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SET&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SWAP&#39;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.ALTER_PARSERS"></a>
</div>
<div id="Parser.ALTER_ALTER_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">ALTER_ALTER_PARSERS</span> =
<input id="Parser.ALTER_ALTER_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.ALTER_ALTER_PARSERS-view-value"></label><span class="default_value">{&#39;DISTKEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DISTSTYLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SORTKEY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMPOUND&#39;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.ALTER_ALTER_PARSERS"></a>
</div>
<div id="Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="classattr">
<div class="attr variable">
<span class="name">SCHEMA_UNNAMED_CONSTRAINTS</span> =
<span class="default_value">{&#39;EXCLUDE&#39;, &#39;UNIQUE&#39;, &#39;PRIMARY KEY&#39;, &#39;LIKE&#39;, &#39;PERIOD&#39;, &#39;CHECK&#39;, &#39;WATERMARK&#39;, &#39;FOREIGN KEY&#39;}</span>
</div>
<a class="headerlink" href="#Parser.SCHEMA_UNNAMED_CONSTRAINTS"></a>
</div>
<div id="Parser.NO_PAREN_FUNCTION_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">NO_PAREN_FUNCTION_PARSERS</span> =
<input id="Parser.NO_PAREN_FUNCTION_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.NO_PAREN_FUNCTION_PARSERS-view-value"></label><span class="default_value">{&#39;ANY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CASE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CONNECT_BY_ROOT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;IF&#39;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.NO_PAREN_FUNCTION_PARSERS"></a>
</div>
<div id="Parser.INVALID_FUNC_NAME_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">INVALID_FUNC_NAME_TOKENS</span> =
<span class="default_value">{&lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.STRING: &#39;STRING&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.INVALID_FUNC_NAME_TOKENS"></a>
</div>
<div id="Parser.FUNCTIONS_WITH_ALIASED_ARGS" class="classattr">
<div class="attr variable">
<span class="name">FUNCTIONS_WITH_ALIASED_ARGS</span> =
<span class="default_value">{&#39;STRUCT&#39;}</span>
</div>
<a class="headerlink" href="#Parser.FUNCTIONS_WITH_ALIASED_ARGS"></a>
</div>
<div id="Parser.KEY_VALUE_DEFINITIONS" class="classattr">
<div class="attr variable">
<span class="name">KEY_VALUE_DEFINITIONS</span> =
<input id="Parser.KEY_VALUE_DEFINITIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.KEY_VALUE_DEFINITIONS-view-value"></label><span class="default_value">(&lt;class &#39;<a href="expressions.html#Alias">sqlglot.expressions.Alias</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#EQ">sqlglot.expressions.EQ</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#PropertyEQ">sqlglot.expressions.PropertyEQ</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Slice">sqlglot.expressions.Slice</a>&#39;&gt;)</span>
</div>
<a class="headerlink" href="#Parser.KEY_VALUE_DEFINITIONS"></a>
</div>
<div id="Parser.FUNCTION_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">FUNCTION_PARSERS</span> =
<input id="Parser.FUNCTION_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.FUNCTION_PARSERS-view-value"></label><span class="default_value">{&#39;CAST&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CEIL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CONVERT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DECODE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;EXTRACT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;FLOOR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;GAP_FILL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;JSON_OBJECT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;JSON_OBJECTAGG&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;JSON_TABLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;MATCH&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;NORMALIZE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;OPENJSON&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;OVERLAY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;POSITION&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PREDICT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SAFE_CAST&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;STRING_AGG&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SUBSTRING&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TRIM&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TRY_CAST&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TRY_CONVERT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;XMLELEMENT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;XMLTABLE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.FUNCTION_PARSERS"></a>
</div>
<div id="Parser.QUERY_MODIFIER_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">QUERY_MODIFIER_PARSERS</span> =
<input id="Parser.QUERY_MODIFIER_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.QUERY_MODIFIER_PARSERS-view-value"></label><span class="default_value">{&lt;TokenType.MATCH_RECOGNIZE: &#39;MATCH_RECOGNIZE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.PREWHERE: &#39;PREWHERE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.WHERE: &#39;WHERE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.GROUP_BY: &#39;GROUP_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.HAVING: &#39;HAVING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.QUALIFY: &#39;QUALIFY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.ORDER_BY: &#39;ORDER_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FETCH: &#39;FETCH&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.FOR: &#39;FOR&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.LOCK: &#39;LOCK&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.TABLE_SAMPLE: &#39;TABLE_SAMPLE&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.USING: &#39;USING&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CLUSTER_BY: &#39;CLUSTER_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.DISTRIBUTE_BY: &#39;DISTRIBUTE_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.SORT_BY: &#39;SORT_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.CONNECT_BY: &#39;CONNECT_BY&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;, &lt;TokenType.START_WITH: &#39;START_WITH&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.QUERY_MODIFIER_PARSERS"></a>
</div>
<div id="Parser.SET_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">SET_PARSERS</span> =
<input id="Parser.SET_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.SET_PARSERS-view-value"></label><span class="default_value">{&#39;GLOBAL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LOCAL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SESSION&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TRANSACTION&#39;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.SET_PARSERS"></a>
</div>
<div id="Parser.SHOW_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">SHOW_PARSERS</span><span class="annotation">: Dict[str, Callable]</span> =
<span class="default_value">{}</span>
</div>
<a class="headerlink" href="#Parser.SHOW_PARSERS"></a>
</div>
<div id="Parser.TYPE_LITERAL_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">TYPE_LITERAL_PARSERS</span> =
<span class="default_value">{&lt;Type.JSON: &#39;JSON&#39;&gt;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.TYPE_LITERAL_PARSERS"></a>
</div>
<div id="Parser.TYPE_CONVERTERS" class="classattr">
<div class="attr variable">
<span class="name">TYPE_CONVERTERS</span><span class="annotation">: Dict[<a href="expressions.html#DataType.Type">sqlglot.expressions.DataType.Type</a>, Callable[[<a href="expressions.html#DataType">sqlglot.expressions.DataType</a>], <a href="expressions.html#DataType">sqlglot.expressions.DataType</a>]]</span> =
<span class="default_value">{}</span>
</div>
<a class="headerlink" href="#Parser.TYPE_CONVERTERS"></a>
</div>
<div id="Parser.DDL_SELECT_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">DDL_SELECT_TOKENS</span> =
<span class="default_value">{&lt;TokenType.WITH: &#39;WITH&#39;&gt;, &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.DDL_SELECT_TOKENS"></a>
</div>
<div id="Parser.PRE_VOLATILE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">PRE_VOLATILE_TOKENS</span> =
<span class="default_value">{&lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.PRE_VOLATILE_TOKENS"></a>
</div>
<div id="Parser.TRANSACTION_KIND" class="classattr">
<div class="attr variable">
<span class="name">TRANSACTION_KIND</span> =
<span class="default_value">{&#39;IMMEDIATE&#39;, &#39;DEFERRED&#39;, &#39;EXCLUSIVE&#39;}</span>
</div>
<a class="headerlink" href="#Parser.TRANSACTION_KIND"></a>
</div>
<div id="Parser.TRANSACTION_CHARACTERISTICS" class="classattr">
<div class="attr variable">
<span class="name">TRANSACTION_CHARACTERISTICS</span><span class="annotation">: Dict[str, Sequence[Union[Sequence[str], str]]]</span> =
<input id="Parser.TRANSACTION_CHARACTERISTICS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.TRANSACTION_CHARACTERISTICS-view-value"></label><span class="default_value">{&#39;ISOLATION&#39;: ((&#39;LEVEL&#39;, &#39;REPEATABLE&#39;, &#39;READ&#39;), (&#39;LEVEL&#39;, &#39;READ&#39;, &#39;COMMITTED&#39;), (&#39;LEVEL&#39;, &#39;READ&#39;, &#39;UNCOMITTED&#39;), (&#39;LEVEL&#39;, &#39;SERIALIZABLE&#39;)), &#39;READ&#39;: (&#39;WRITE&#39;, &#39;ONLY&#39;)}</span>
</div>
<a class="headerlink" href="#Parser.TRANSACTION_CHARACTERISTICS"></a>
</div>
<div id="Parser.CONFLICT_ACTIONS" class="classattr">
<div class="attr variable">
<span class="name">CONFLICT_ACTIONS</span><span class="annotation">: Dict[str, Sequence[Union[Sequence[str], str]]]</span> =
<input id="Parser.CONFLICT_ACTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.CONFLICT_ACTIONS-view-value"></label><span class="default_value">{&#39;ABORT&#39;: (), &#39;FAIL&#39;: (), &#39;IGNORE&#39;: (), &#39;REPLACE&#39;: (), &#39;ROLLBACK&#39;: (), &#39;UPDATE&#39;: (), &#39;DO&#39;: (&#39;NOTHING&#39;, &#39;UPDATE&#39;)}</span>
</div>
<a class="headerlink" href="#Parser.CONFLICT_ACTIONS"></a>
</div>
<div id="Parser.CREATE_SEQUENCE" class="classattr">
<div class="attr variable">
<span class="name">CREATE_SEQUENCE</span><span class="annotation">: Dict[str, Sequence[Union[Sequence[str], str]]]</span> =
<input id="Parser.CREATE_SEQUENCE-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.CREATE_SEQUENCE-view-value"></label><span class="default_value">{&#39;SCALE&#39;: (&#39;EXTEND&#39;, &#39;NOEXTEND&#39;), &#39;SHARD&#39;: (&#39;EXTEND&#39;, &#39;NOEXTEND&#39;), &#39;NO&#39;: (&#39;CYCLE&#39;, &#39;CACHE&#39;, &#39;MAXVALUE&#39;, &#39;MINVALUE&#39;), &#39;SESSION&#39;: (), &#39;GLOBAL&#39;: (), &#39;KEEP&#39;: (), &#39;NOKEEP&#39;: (), &#39;ORDER&#39;: (), &#39;NOORDER&#39;: (), &#39;NOCACHE&#39;: (), &#39;CYCLE&#39;: (), &#39;NOCYCLE&#39;: (), &#39;NOMINVALUE&#39;: (), &#39;NOMAXVALUE&#39;: (), &#39;NOSCALE&#39;: (), &#39;NOSHARD&#39;: ()}</span>
</div>
<a class="headerlink" href="#Parser.CREATE_SEQUENCE"></a>
</div>
<div id="Parser.ISOLATED_LOADING_OPTIONS" class="classattr">
<div class="attr variable">
<span class="name">ISOLATED_LOADING_OPTIONS</span><span class="annotation">: Dict[str, Sequence[Union[Sequence[str], str]]]</span> =
<span class="default_value">{&#39;FOR&#39;: (&#39;ALL&#39;, &#39;INSERT&#39;, &#39;NONE&#39;)}</span>
</div>
<a class="headerlink" href="#Parser.ISOLATED_LOADING_OPTIONS"></a>
</div>
<div id="Parser.USABLES" class="classattr">
<div class="attr variable">
<span class="name">USABLES</span><span class="annotation">: Dict[str, Sequence[Union[Sequence[str], str]]]</span> =
<span class="default_value">{&#39;ROLE&#39;: (), &#39;WAREHOUSE&#39;: (), &#39;DATABASE&#39;: (), &#39;SCHEMA&#39;: (), &#39;CATALOG&#39;: ()}</span>
</div>
<a class="headerlink" href="#Parser.USABLES"></a>
</div>
<div id="Parser.CAST_ACTIONS" class="classattr">
<div class="attr variable">
<span class="name">CAST_ACTIONS</span><span class="annotation">: Dict[str, Sequence[Union[Sequence[str], str]]]</span> =
<span class="default_value">{&#39;RENAME&#39;: (&#39;FIELDS&#39;,), &#39;ADD&#39;: (&#39;FIELDS&#39;,)}</span>
</div>
<a class="headerlink" href="#Parser.CAST_ACTIONS"></a>
</div>
<div id="Parser.SCHEMA_BINDING_OPTIONS" class="classattr">
<div class="attr variable">
<span class="name">SCHEMA_BINDING_OPTIONS</span><span class="annotation">: Dict[str, Sequence[Union[Sequence[str], str]]]</span> =
<span class="default_value">{&#39;TYPE&#39;: (&#39;EVOLUTION&#39;,), &#39;BINDING&#39;: (), &#39;COMPENSATION&#39;: (), &#39;EVOLUTION&#39;: ()}</span>
</div>
<a class="headerlink" href="#Parser.SCHEMA_BINDING_OPTIONS"></a>
</div>
<div id="Parser.PROCEDURE_OPTIONS" class="classattr">
<div class="attr variable">
<span class="name">PROCEDURE_OPTIONS</span><span class="annotation">: Dict[str, Sequence[Union[Sequence[str], str]]]</span> =
<span class="default_value">{}</span>
</div>
<a class="headerlink" href="#Parser.PROCEDURE_OPTIONS"></a>
</div>
<div id="Parser.EXECUTE_AS_OPTIONS" class="classattr">
<div class="attr variable">
<span class="name">EXECUTE_AS_OPTIONS</span><span class="annotation">: Dict[str, Sequence[Union[Sequence[str], str]]]</span> =
<span class="default_value">{&#39;CALLER&#39;: (), &#39;SELF&#39;: (), &#39;OWNER&#39;: ()}</span>
</div>
<a class="headerlink" href="#Parser.EXECUTE_AS_OPTIONS"></a>
</div>
<div id="Parser.KEY_CONSTRAINT_OPTIONS" class="classattr">
<div class="attr variable">
<span class="name">KEY_CONSTRAINT_OPTIONS</span><span class="annotation">: Dict[str, Sequence[Union[Sequence[str], str]]]</span> =
<input id="Parser.KEY_CONSTRAINT_OPTIONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.KEY_CONSTRAINT_OPTIONS-view-value"></label><span class="default_value">{&#39;NOT&#39;: (&#39;ENFORCED&#39;,), &#39;MATCH&#39;: (&#39;FULL&#39;, &#39;PARTIAL&#39;, &#39;SIMPLE&#39;), &#39;INITIALLY&#39;: (&#39;DEFERRED&#39;, &#39;IMMEDIATE&#39;), &#39;USING&#39;: (&#39;BTREE&#39;, &#39;HASH&#39;), &#39;DEFERRABLE&#39;: (), &#39;NORELY&#39;: ()}</span>
</div>
<a class="headerlink" href="#Parser.KEY_CONSTRAINT_OPTIONS"></a>
</div>
<div id="Parser.INSERT_ALTERNATIVES" class="classattr">
<div class="attr variable">
<span class="name">INSERT_ALTERNATIVES</span> =
<span class="default_value">{&#39;REPLACE&#39;, &#39;FAIL&#39;, &#39;IGNORE&#39;, &#39;ROLLBACK&#39;, &#39;ABORT&#39;}</span>
</div>
<a class="headerlink" href="#Parser.INSERT_ALTERNATIVES"></a>
</div>
<div id="Parser.CLONE_KEYWORDS" class="classattr">
<div class="attr variable">
<span class="name">CLONE_KEYWORDS</span> =
<span class="default_value">{&#39;CLONE&#39;, &#39;COPY&#39;}</span>
</div>
<a class="headerlink" href="#Parser.CLONE_KEYWORDS"></a>
</div>
<div id="Parser.HISTORICAL_DATA_PREFIX" class="classattr">
<div class="attr variable">
<span class="name">HISTORICAL_DATA_PREFIX</span> =
<span class="default_value">{&#39;AT&#39;, &#39;BEFORE&#39;, &#39;END&#39;}</span>
</div>
<a class="headerlink" href="#Parser.HISTORICAL_DATA_PREFIX"></a>
</div>
<div id="Parser.HISTORICAL_DATA_KIND" class="classattr">
<div class="attr variable">
<span class="name">HISTORICAL_DATA_KIND</span> =
<span class="default_value">{&#39;OFFSET&#39;, &#39;TIMESTAMP&#39;, &#39;STREAM&#39;, &#39;STATEMENT&#39;}</span>
</div>
<a class="headerlink" href="#Parser.HISTORICAL_DATA_KIND"></a>
</div>
<div id="Parser.OPCLASS_FOLLOW_KEYWORDS" class="classattr">
<div class="attr variable">
<span class="name">OPCLASS_FOLLOW_KEYWORDS</span> =
<span class="default_value">{&#39;WITH&#39;, &#39;DESC&#39;, &#39;NULLS&#39;, &#39;ASC&#39;}</span>
</div>
<a class="headerlink" href="#Parser.OPCLASS_FOLLOW_KEYWORDS"></a>
</div>
<div id="Parser.OPTYPE_FOLLOW_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">OPTYPE_FOLLOW_TOKENS</span> =
<span class="default_value">{&lt;TokenType.COMMA: &#39;COMMA&#39;&gt;, &lt;TokenType.R_PAREN: &#39;R_PAREN&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.OPTYPE_FOLLOW_TOKENS"></a>
</div>
<div id="Parser.TABLE_INDEX_HINT_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">TABLE_INDEX_HINT_TOKENS</span> =
<span class="default_value">{&lt;TokenType.FORCE: &#39;FORCE&#39;&gt;, &lt;TokenType.IGNORE: &#39;IGNORE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.TABLE_INDEX_HINT_TOKENS"></a>
</div>
<div id="Parser.VIEW_ATTRIBUTES" class="classattr">
<div class="attr variable">
<span class="name">VIEW_ATTRIBUTES</span> =
<span class="default_value">{&#39;ENCRYPTION&#39;, &#39;VIEW_METADATA&#39;, &#39;SCHEMABINDING&#39;}</span>
</div>
<a class="headerlink" href="#Parser.VIEW_ATTRIBUTES"></a>
</div>
<div id="Parser.WINDOW_ALIAS_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">WINDOW_ALIAS_TOKENS</span> =
<input id="Parser.WINDOW_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.WINDOW_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MULTILINESTRING: &#39;MULTILINESTRING&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.UDOUBLE: &#39;UDOUBLE&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ATTACH: &#39;ATTACH&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DECIMAL64: &#39;DECIMAL64&#39;&gt;, &lt;TokenType.SOURCE: &#39;SOURCE&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.COPY: &#39;COPY&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.CURRENT_SCHEMA: &#39;CURRENT_SCHEMA&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.DECIMAL128: &#39;DECIMAL128&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.RING: &#39;RING&#39;&gt;, &lt;TokenType.SINK: &#39;SINK&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.DETACH: &#39;DETACH&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL32: &#39;DECIMAL32&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.DATETIME2: &#39;DATETIME2&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.POINT: &#39;POINT&#39;&gt;, &lt;TokenType.EXPORT: &#39;EXPORT&#39;&gt;, &lt;TokenType.POLYGON: &#39;POLYGON&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.BLOB: &#39;BLOB&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.NAMESPACE: &#39;NAMESPACE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.DYNAMIC: &#39;DYNAMIC&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.SMALLDATETIME: &#39;SMALLDATETIME&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MULTIPOLYGON: &#39;MULTIPOLYGON&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.LINESTRING: &#39;LINESTRING&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.PUT: &#39;PUT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &lt;TokenType.RENAME: &#39;RENAME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL256: &#39;DECIMAL256&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.WINDOW_ALIAS_TOKENS"></a>
</div>
<div id="Parser.WINDOW_BEFORE_PAREN_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">WINDOW_BEFORE_PAREN_TOKENS</span> =
<span class="default_value">{&lt;TokenType.OVER: &#39;OVER&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.WINDOW_BEFORE_PAREN_TOKENS"></a>
</div>
<div id="Parser.WINDOW_SIDES" class="classattr">
<div class="attr variable">
<span class="name">WINDOW_SIDES</span> =
<span class="default_value">{&#39;FOLLOWING&#39;, &#39;PRECEDING&#39;}</span>
</div>
<a class="headerlink" href="#Parser.WINDOW_SIDES"></a>
</div>
<div id="Parser.JSON_KEY_VALUE_SEPARATOR_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">JSON_KEY_VALUE_SEPARATOR_TOKENS</span> =
<span class="default_value">{&lt;TokenType.COMMA: &#39;COMMA&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.COLON: &#39;COLON&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.JSON_KEY_VALUE_SEPARATOR_TOKENS"></a>
</div>
<div id="Parser.FETCH_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">FETCH_TOKENS</span> =
<input id="Parser.FETCH_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.FETCH_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MULTILINESTRING: &#39;MULTILINESTRING&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.UDOUBLE: &#39;UDOUBLE&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.ATTACH: &#39;ATTACH&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DECIMAL64: &#39;DECIMAL64&#39;&gt;, &lt;TokenType.SOURCE: &#39;SOURCE&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.COPY: &#39;COPY&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.CURRENT_SCHEMA: &#39;CURRENT_SCHEMA&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.DECIMAL128: &#39;DECIMAL128&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.RING: &#39;RING&#39;&gt;, &lt;TokenType.SINK: &#39;SINK&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.DETACH: &#39;DETACH&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL32: &#39;DECIMAL32&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.DATETIME2: &#39;DATETIME2&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.POINT: &#39;POINT&#39;&gt;, &lt;TokenType.EXPORT: &#39;EXPORT&#39;&gt;, &lt;TokenType.POLYGON: &#39;POLYGON&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.BLOB: &#39;BLOB&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.NAMESPACE: &#39;NAMESPACE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.DYNAMIC: &#39;DYNAMIC&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.SMALLDATETIME: &#39;SMALLDATETIME&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MULTIPOLYGON: &#39;MULTIPOLYGON&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.LINESTRING: &#39;LINESTRING&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.PUT: &#39;PUT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &lt;TokenType.RENAME: &#39;RENAME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL256: &#39;DECIMAL256&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.FETCH_TOKENS"></a>
</div>
<div id="Parser.ADD_CONSTRAINT_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">ADD_CONSTRAINT_TOKENS</span> =
<input id="Parser.ADD_CONSTRAINT_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.ADD_CONSTRAINT_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.KEY: &#39;KEY&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.ADD_CONSTRAINT_TOKENS"></a>
</div>
<div id="Parser.DISTINCT_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">DISTINCT_TOKENS</span> =
<span class="default_value">{&lt;TokenType.DISTINCT: &#39;DISTINCT&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.DISTINCT_TOKENS"></a>
</div>
<div id="Parser.NULL_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">NULL_TOKENS</span> =
<span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.NULL_TOKENS"></a>
</div>
<div id="Parser.UNNEST_OFFSET_ALIAS_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">UNNEST_OFFSET_ALIAS_TOKENS</span> =
<input id="Parser.UNNEST_OFFSET_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.UNNEST_OFFSET_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.MULTILINESTRING: &#39;MULTILINESTRING&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.UDOUBLE: &#39;UDOUBLE&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ATTACH: &#39;ATTACH&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DECIMAL64: &#39;DECIMAL64&#39;&gt;, &lt;TokenType.SOURCE: &#39;SOURCE&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.COPY: &#39;COPY&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.CURRENT_SCHEMA: &#39;CURRENT_SCHEMA&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.DECIMAL128: &#39;DECIMAL128&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.RING: &#39;RING&#39;&gt;, &lt;TokenType.SINK: &#39;SINK&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.DETACH: &#39;DETACH&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL32: &#39;DECIMAL32&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.DATETIME2: &#39;DATETIME2&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.POINT: &#39;POINT&#39;&gt;, &lt;TokenType.EXPORT: &#39;EXPORT&#39;&gt;, &lt;TokenType.POLYGON: &#39;POLYGON&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.BLOB: &#39;BLOB&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.NAMESPACE: &#39;NAMESPACE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.DYNAMIC: &#39;DYNAMIC&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.SMALLDATETIME: &#39;SMALLDATETIME&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.MULTIPOLYGON: &#39;MULTIPOLYGON&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.LINESTRING: &#39;LINESTRING&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.PUT: &#39;PUT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &lt;TokenType.RENAME: &#39;RENAME&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.DECIMAL256: &#39;DECIMAL256&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.UNNEST_OFFSET_ALIAS_TOKENS"></a>
</div>
<div id="Parser.SELECT_START_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">SELECT_START_TOKENS</span> =
<span class="default_value">{&lt;TokenType.WITH: &#39;WITH&#39;&gt;, &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.SELECT_START_TOKENS"></a>
</div>
<div id="Parser.COPY_INTO_VARLEN_OPTIONS" class="classattr">
<div class="attr variable">
<span class="name">COPY_INTO_VARLEN_OPTIONS</span> =
<span class="default_value">{&#39;CREDENTIAL&#39;, &#39;FILE_FORMAT&#39;, &#39;COPY_OPTIONS&#39;, &#39;FORMAT_OPTIONS&#39;}</span>
</div>
<a class="headerlink" href="#Parser.COPY_INTO_VARLEN_OPTIONS"></a>
</div>
<div id="Parser.IS_JSON_PREDICATE_KIND" class="classattr">
<div class="attr variable">
<span class="name">IS_JSON_PREDICATE_KIND</span> =
<span class="default_value">{&#39;SCALAR&#39;, &#39;ARRAY&#39;, &#39;OBJECT&#39;, &#39;VALUE&#39;}</span>
</div>
<a class="headerlink" href="#Parser.IS_JSON_PREDICATE_KIND"></a>
</div>
<div id="Parser.ODBC_DATETIME_LITERALS" class="classattr">
<div class="attr variable">
<span class="name">ODBC_DATETIME_LITERALS</span> =
<input id="Parser.ODBC_DATETIME_LITERALS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.ODBC_DATETIME_LITERALS-view-value"></label><span class="default_value">{&#39;d&#39;: &lt;class &#39;<a href="expressions.html#Date">sqlglot.expressions.Date</a>&#39;&gt;, &#39;t&#39;: &lt;class &#39;<a href="expressions.html#Time">sqlglot.expressions.Time</a>&#39;&gt;, &#39;ts&#39;: &lt;class &#39;<a href="expressions.html#Timestamp">sqlglot.expressions.Timestamp</a>&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.ODBC_DATETIME_LITERALS"></a>
</div>
<div id="Parser.ON_CONDITION_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">ON_CONDITION_TOKENS</span> =
<span class="default_value">{&#39;FALSE&#39;, &#39;EMPTY&#39;, &#39;NULL&#39;, &#39;TRUE&#39;, &#39;ERROR&#39;}</span>
</div>
<a class="headerlink" href="#Parser.ON_CONDITION_TOKENS"></a>
</div>
<div id="Parser.PRIVILEGE_FOLLOW_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">PRIVILEGE_FOLLOW_TOKENS</span> =
<span class="default_value">{&lt;TokenType.COMMA: &#39;COMMA&#39;&gt;, &lt;TokenType.ON: &#39;ON&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.PRIVILEGE_FOLLOW_TOKENS"></a>
</div>
<div id="Parser.DESCRIBE_STYLES" class="classattr">
<div class="attr variable">
<span class="name">DESCRIBE_STYLES</span> =
<span class="default_value">{&#39;HISTORY&#39;, &#39;FORMATTED&#39;, &#39;EXTENDED&#39;, &#39;ANALYZE&#39;}</span>
</div>
<a class="headerlink" href="#Parser.DESCRIBE_STYLES"></a>
</div>
<div id="Parser.ANALYZE_STYLES" class="classattr">
<div class="attr variable">
<span class="name">ANALYZE_STYLES</span> =
<span class="default_value">{&#39;NO_WRITE_TO_BINLOG&#39;, &#39;VERBOSE&#39;, &#39;BUFFER_USAGE_LIMIT&#39;, &#39;LOCAL&#39;, &#39;SAMPLE&#39;, &#39;SKIP_LOCKED&#39;, &#39;FULL&#39;}</span>
</div>
<a class="headerlink" href="#Parser.ANALYZE_STYLES"></a>
</div>
<div id="Parser.ANALYZE_EXPRESSION_PARSERS" class="classattr">
<div class="attr variable">
<span class="name">ANALYZE_EXPRESSION_PARSERS</span> =
<input id="Parser.ANALYZE_EXPRESSION_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.ANALYZE_EXPRESSION_PARSERS-view-value"></label><span class="default_value">{&#39;ALL&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;COMPUTE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DELETE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;DROP&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;ESTIMATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LIST&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;PREDICATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;UPDATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;VALIDATE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;}</span>
</div>
<a class="headerlink" href="#Parser.ANALYZE_EXPRESSION_PARSERS"></a>
</div>
<div id="Parser.PARTITION_KEYWORDS" class="classattr">
<div class="attr variable">
<span class="name">PARTITION_KEYWORDS</span> =
<span class="default_value">{&#39;SUBPARTITION&#39;, &#39;PARTITION&#39;}</span>
</div>
<a class="headerlink" href="#Parser.PARTITION_KEYWORDS"></a>
</div>
<div id="Parser.AMBIGUOUS_ALIAS_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">AMBIGUOUS_ALIAS_TOKENS</span> =
<span class="default_value">(&lt;TokenType.LIMIT: &#39;LIMIT&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;)</span>
</div>
<a class="headerlink" href="#Parser.AMBIGUOUS_ALIAS_TOKENS"></a>
</div>
<div id="Parser.OPERATION_MODIFIERS" class="classattr">
<div class="attr variable">
<span class="name">OPERATION_MODIFIERS</span><span class="annotation">: Set[str]</span> =
<span class="default_value">set()</span>
</div>
<a class="headerlink" href="#Parser.OPERATION_MODIFIERS"></a>
</div>
<div id="Parser.RECURSIVE_CTE_SEARCH_KIND" class="classattr">
<div class="attr variable">
<span class="name">RECURSIVE_CTE_SEARCH_KIND</span> =
<span class="default_value">{&#39;CYCLE&#39;, &#39;BREADTH&#39;, &#39;DEPTH&#39;}</span>
</div>
<a class="headerlink" href="#Parser.RECURSIVE_CTE_SEARCH_KIND"></a>
</div>
<div id="Parser.MODIFIABLES" class="classattr">
<div class="attr variable">
<span class="name">MODIFIABLES</span> =
<input id="Parser.MODIFIABLES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
<label class="view-value-button pdoc-button" for="Parser.MODIFIABLES-view-value"></label><span class="default_value">(&lt;class &#39;<a href="expressions.html#Query">sqlglot.expressions.Query</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#Table">sqlglot.expressions.Table</a>&#39;&gt;, &lt;class &#39;<a href="expressions.html#TableFromRows">sqlglot.expressions.TableFromRows</a>&#39;&gt;)</span>
</div>
<a class="headerlink" href="#Parser.MODIFIABLES"></a>
</div>
<div id="Parser.STRICT_CAST" class="classattr">
<div class="attr variable">
<span class="name">STRICT_CAST</span> =
<span class="default_value">True</span>
</div>
<a class="headerlink" href="#Parser.STRICT_CAST"></a>
</div>
<div id="Parser.PREFIXED_PIVOT_COLUMNS" class="classattr">
<div class="attr variable">
<span class="name">PREFIXED_PIVOT_COLUMNS</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Parser.PREFIXED_PIVOT_COLUMNS"></a>
</div>
<div id="Parser.IDENTIFY_PIVOT_STRINGS" class="classattr">
<div class="attr variable">
<span class="name">IDENTIFY_PIVOT_STRINGS</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Parser.IDENTIFY_PIVOT_STRINGS"></a>
</div>
<div id="Parser.LOG_DEFAULTS_TO_LN" class="classattr">
<div class="attr variable">
<span class="name">LOG_DEFAULTS_TO_LN</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Parser.LOG_DEFAULTS_TO_LN"></a>
</div>
<div id="Parser.ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN" class="classattr">
<div class="attr variable">
<span class="name">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</span> =
<span class="default_value">True</span>
</div>
<a class="headerlink" href="#Parser.ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN"></a>
</div>
<div id="Parser.TABLESAMPLE_CSV" class="classattr">
<div class="attr variable">
<span class="name">TABLESAMPLE_CSV</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Parser.TABLESAMPLE_CSV"></a>
</div>
<div id="Parser.DEFAULT_SAMPLING_METHOD" class="classattr">
<div class="attr variable">
<span class="name">DEFAULT_SAMPLING_METHOD</span><span class="annotation">: Optional[str]</span> =
<span class="default_value">None</span>
</div>
<a class="headerlink" href="#Parser.DEFAULT_SAMPLING_METHOD"></a>
</div>
<div id="Parser.SET_REQUIRES_ASSIGNMENT_DELIMITER" class="classattr">
<div class="attr variable">
<span class="name">SET_REQUIRES_ASSIGNMENT_DELIMITER</span> =
<span class="default_value">True</span>
</div>
<a class="headerlink" href="#Parser.SET_REQUIRES_ASSIGNMENT_DELIMITER"></a>
</div>
<div id="Parser.TRIM_PATTERN_FIRST" class="classattr">
<div class="attr variable">
<span class="name">TRIM_PATTERN_FIRST</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Parser.TRIM_PATTERN_FIRST"></a>
</div>
<div id="Parser.STRING_ALIASES" class="classattr">
<div class="attr variable">
<span class="name">STRING_ALIASES</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Parser.STRING_ALIASES"></a>
</div>
<div id="Parser.MODIFIERS_ATTACHED_TO_SET_OP" class="classattr">
<div class="attr variable">
<span class="name">MODIFIERS_ATTACHED_TO_SET_OP</span> =
<span class="default_value">True</span>
</div>
<a class="headerlink" href="#Parser.MODIFIERS_ATTACHED_TO_SET_OP"></a>
</div>
<div id="Parser.SET_OP_MODIFIERS" class="classattr">
<div class="attr variable">
<span class="name">SET_OP_MODIFIERS</span> =
<span class="default_value">{&#39;offset&#39;, &#39;order&#39;, &#39;limit&#39;}</span>
</div>
<a class="headerlink" href="#Parser.SET_OP_MODIFIERS"></a>
</div>
<div id="Parser.NO_PAREN_IF_COMMANDS" class="classattr">
<div class="attr variable">
<span class="name">NO_PAREN_IF_COMMANDS</span> =
<span class="default_value">True</span>
</div>
<a class="headerlink" href="#Parser.NO_PAREN_IF_COMMANDS"></a>
</div>
<div id="Parser.JSON_ARROWS_REQUIRE_JSON_TYPE" class="classattr">
<div class="attr variable">
<span class="name">JSON_ARROWS_REQUIRE_JSON_TYPE</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Parser.JSON_ARROWS_REQUIRE_JSON_TYPE"></a>
</div>
<div id="Parser.COLON_IS_VARIANT_EXTRACT" class="classattr">
<div class="attr variable">
<span class="name">COLON_IS_VARIANT_EXTRACT</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Parser.COLON_IS_VARIANT_EXTRACT"></a>
</div>
<div id="Parser.VALUES_FOLLOWED_BY_PAREN" class="classattr">
<div class="attr variable">
<span class="name">VALUES_FOLLOWED_BY_PAREN</span> =
<span class="default_value">True</span>
</div>
<a class="headerlink" href="#Parser.VALUES_FOLLOWED_BY_PAREN"></a>
</div>
<div id="Parser.SUPPORTS_IMPLICIT_UNNEST" class="classattr">
<div class="attr variable">
<span class="name">SUPPORTS_IMPLICIT_UNNEST</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Parser.SUPPORTS_IMPLICIT_UNNEST"></a>
</div>
<div id="Parser.INTERVAL_SPANS" class="classattr">
<div class="attr variable">
<span class="name">INTERVAL_SPANS</span> =
<span class="default_value">True</span>
</div>
<a class="headerlink" href="#Parser.INTERVAL_SPANS"></a>
</div>
<div id="Parser.SUPPORTS_PARTITION_SELECTION" class="classattr">
<div class="attr variable">
<span class="name">SUPPORTS_PARTITION_SELECTION</span> =
<span class="default_value">False</span>
</div>
<a class="headerlink" href="#Parser.SUPPORTS_PARTITION_SELECTION"></a>
</div>
<div id="Parser.WRAPPED_TRANSFORM_COLUMN_CONSTRAINT" class="classattr">
<div class="attr variable">
<span class="name">WRAPPED_TRANSFORM_COLUMN_CONSTRAINT</span> =
<span class="default_value">True</span>
</div>
<a class="headerlink" href="#Parser.WRAPPED_TRANSFORM_COLUMN_CONSTRAINT"></a>
</div>
<div id="Parser.OPTIONAL_ALIAS_TOKEN_CTE" class="classattr">
<div class="attr variable">
<span class="name">OPTIONAL_ALIAS_TOKEN_CTE</span> =
<span class="default_value">True</span>
</div>
<a class="headerlink" href="#Parser.OPTIONAL_ALIAS_TOKEN_CTE"></a>
</div>
<div id="Parser.SHOW_TRIE" class="classattr">
<div class="attr variable">
<span class="name">SHOW_TRIE</span><span class="annotation">: Dict</span> =
<span class="default_value">{}</span>
</div>
<a class="headerlink" href="#Parser.SHOW_TRIE"></a>
</div>
<div id="Parser.SET_TRIE" class="classattr">
<div class="attr variable">
<span class="name">SET_TRIE</span><span class="annotation">: Dict</span> =
<span class="default_value">{&#39;GLOBAL&#39;: {0: True}, &#39;LOCAL&#39;: {0: True}, &#39;SESSION&#39;: {0: True}, &#39;TRANSACTION&#39;: {0: True}}</span>
</div>
<a class="headerlink" href="#Parser.SET_TRIE"></a>
</div>
<div id="Parser.error_level" class="classattr">
<div class="attr variable">
<span class="name">error_level</span>
</div>
<a class="headerlink" href="#Parser.error_level"></a>
</div>
<div id="Parser.error_message_context" class="classattr">
<div class="attr variable">
<span class="name">error_message_context</span>
</div>
<a class="headerlink" href="#Parser.error_message_context"></a>
</div>
<div id="Parser.max_errors" class="classattr">
<div class="attr variable">
<span class="name">max_errors</span>
</div>
<a class="headerlink" href="#Parser.max_errors"></a>
</div>
<div id="Parser.dialect" class="classattr">
<div class="attr variable">
<span class="name">dialect</span>
</div>
<a class="headerlink" href="#Parser.dialect"></a>
</div>
<div id="Parser.reset" class="classattr">
<input id="Parser.reset-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">reset</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">):</span></span>
<label class="view-source-button" for="Parser.reset-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Parser.reset"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Parser.reset-1484"><a href="#Parser.reset-1484"><span class="linenos">1484</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span><span id="Parser.reset-1485"><a href="#Parser.reset-1485"><span class="linenos">1485</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</span><span id="Parser.reset-1486"><a href="#Parser.reset-1486"><span class="linenos">1486</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser.reset-1487"><a href="#Parser.reset-1487"><span class="linenos">1487</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_tokens</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser.reset-1488"><a href="#Parser.reset-1488"><span class="linenos">1488</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="Parser.reset-1489"><a href="#Parser.reset-1489"><span class="linenos">1489</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser.reset-1490"><a href="#Parser.reset-1490"><span class="linenos">1490</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser.reset-1491"><a href="#Parser.reset-1491"><span class="linenos">1491</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser.reset-1492"><a href="#Parser.reset-1492"><span class="linenos">1492</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span> <span class="o">=</span> <span class="kc">None</span>
</span></pre></div>
</div>
<div id="Parser.parse" class="classattr">
<input id="Parser.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 multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">raw_tokens</span><span class="p">:</span> <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 class="param"> <span class="n">sql</span><span class="p">:</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 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="Parser.parse-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Parser.parse"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Parser.parse-1494"><a href="#Parser.parse-1494"><span class="linenos">1494</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">parse</span><span class="p">(</span>
</span><span id="Parser.parse-1495"><a href="#Parser.parse-1495"><span class="linenos">1495</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">raw_tokens</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">Token</span><span class="p">],</span> <span class="n">sql</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="Parser.parse-1496"><a href="#Parser.parse-1496"><span class="linenos">1496</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="Parser.parse-1497"><a href="#Parser.parse-1497"><span class="linenos">1497</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser.parse-1498"><a href="#Parser.parse-1498"><span class="linenos">1498</span></a><span class="sd"> Parses a list of tokens and returns a list of syntax trees, one tree</span>
</span><span id="Parser.parse-1499"><a href="#Parser.parse-1499"><span class="linenos">1499</span></a><span class="sd"> per parsed SQL statement.</span>
</span><span id="Parser.parse-1500"><a href="#Parser.parse-1500"><span class="linenos">1500</span></a>
</span><span id="Parser.parse-1501"><a href="#Parser.parse-1501"><span class="linenos">1501</span></a><span class="sd"> Args:</span>
</span><span id="Parser.parse-1502"><a href="#Parser.parse-1502"><span class="linenos">1502</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
</span><span id="Parser.parse-1503"><a href="#Parser.parse-1503"><span class="linenos">1503</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</span>
</span><span id="Parser.parse-1504"><a href="#Parser.parse-1504"><span class="linenos">1504</span></a>
</span><span id="Parser.parse-1505"><a href="#Parser.parse-1505"><span class="linenos">1505</span></a><span class="sd"> Returns:</span>
</span><span id="Parser.parse-1506"><a href="#Parser.parse-1506"><span class="linenos">1506</span></a><span class="sd"> The list of the produced syntax trees.</span>
</span><span id="Parser.parse-1507"><a href="#Parser.parse-1507"><span class="linenos">1507</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser.parse-1508"><a href="#Parser.parse-1508"><span class="linenos">1508</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span>
</span><span id="Parser.parse-1509"><a href="#Parser.parse-1509"><span class="linenos">1509</span></a> <span class="n">parse_method</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="o">=</span><span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="o">=</span><span class="n">sql</span>
</span><span id="Parser.parse-1510"><a href="#Parser.parse-1510"><span class="linenos">1510</span></a> <span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Parses a list of tokens and returns a list of syntax trees, one tree
per parsed SQL statement.</p>
<h6 id="arguments">Arguments:</h6>
<ul>
<li><strong>raw_tokens:</strong> The list of tokens.</li>
<li><strong>sql:</strong> The original SQL string, used to produce helpful debug messages.</li>
</ul>
<h6 id="returns">Returns:</h6>
<blockquote>
<p>The list of the produced syntax trees.</p>
</blockquote>
</div>
</div>
<div id="Parser.parse_into" class="classattr">
<input id="Parser.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_types</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">raw_tokens</span><span class="p">:</span> <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 class="param"> <span class="n">sql</span><span class="p">:</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 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="Parser.parse_into-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Parser.parse_into"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Parser.parse_into-1512"><a href="#Parser.parse_into-1512"><span class="linenos">1512</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">parse_into</span><span class="p">(</span>
</span><span id="Parser.parse_into-1513"><a href="#Parser.parse_into-1513"><span class="linenos">1513</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="Parser.parse_into-1514"><a href="#Parser.parse_into-1514"><span class="linenos">1514</span></a> <span class="n">expression_types</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">IntoType</span><span class="p">,</span>
</span><span id="Parser.parse_into-1515"><a href="#Parser.parse_into-1515"><span class="linenos">1515</span></a> <span class="n">raw_tokens</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">Token</span><span class="p">],</span>
</span><span id="Parser.parse_into-1516"><a href="#Parser.parse_into-1516"><span class="linenos">1516</span></a> <span class="n">sql</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 class="p">,</span>
</span><span id="Parser.parse_into-1517"><a href="#Parser.parse_into-1517"><span class="linenos">1517</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="Parser.parse_into-1518"><a href="#Parser.parse_into-1518"><span class="linenos">1518</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser.parse_into-1519"><a href="#Parser.parse_into-1519"><span class="linenos">1519</span></a><span class="sd"> Parses a list of tokens into a given Expression type. If a collection of Expression</span>
</span><span id="Parser.parse_into-1520"><a href="#Parser.parse_into-1520"><span class="linenos">1520</span></a><span class="sd"> types is given instead, this method will try to parse the token list into each one</span>
</span><span id="Parser.parse_into-1521"><a href="#Parser.parse_into-1521"><span class="linenos">1521</span></a><span class="sd"> of them, stopping at the first for which the parsing succeeds.</span>
</span><span id="Parser.parse_into-1522"><a href="#Parser.parse_into-1522"><span class="linenos">1522</span></a>
</span><span id="Parser.parse_into-1523"><a href="#Parser.parse_into-1523"><span class="linenos">1523</span></a><span class="sd"> Args:</span>
</span><span id="Parser.parse_into-1524"><a href="#Parser.parse_into-1524"><span class="linenos">1524</span></a><span class="sd"> expression_types: The expression type(s) to try and parse the token list into.</span>
</span><span id="Parser.parse_into-1525"><a href="#Parser.parse_into-1525"><span class="linenos">1525</span></a><span class="sd"> raw_tokens: The list of tokens.</span>
</span><span id="Parser.parse_into-1526"><a href="#Parser.parse_into-1526"><span class="linenos">1526</span></a><span class="sd"> sql: The original SQL string, used to produce helpful debug messages.</span>
</span><span id="Parser.parse_into-1527"><a href="#Parser.parse_into-1527"><span class="linenos">1527</span></a>
</span><span id="Parser.parse_into-1528"><a href="#Parser.parse_into-1528"><span class="linenos">1528</span></a><span class="sd"> Returns:</span>
</span><span id="Parser.parse_into-1529"><a href="#Parser.parse_into-1529"><span class="linenos">1529</span></a><span class="sd"> The target Expression.</span>
</span><span id="Parser.parse_into-1530"><a href="#Parser.parse_into-1530"><span class="linenos">1530</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser.parse_into-1531"><a href="#Parser.parse_into-1531"><span class="linenos">1531</span></a> <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser.parse_into-1532"><a href="#Parser.parse_into-1532"><span class="linenos">1532</span></a> <span class="k">for</span> <span class="n">expression_type</span> <span class="ow">in</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">expression_types</span><span class="p">):</span>
</span><span id="Parser.parse_into-1533"><a href="#Parser.parse_into-1533"><span class="linenos">1533</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPRESSION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">expression_type</span><span class="p">)</span>
</span><span id="Parser.parse_into-1534"><a href="#Parser.parse_into-1534"><span class="linenos">1534</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">parser</span><span class="p">:</span>
</span><span id="Parser.parse_into-1535"><a href="#Parser.parse_into-1535"><span class="linenos">1535</span></a> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser registered for </span><span class="si">{</span><span class="n">expression_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</span><span id="Parser.parse_into-1536"><a href="#Parser.parse_into-1536"><span class="linenos">1536</span></a>
</span><span id="Parser.parse_into-1537"><a href="#Parser.parse_into-1537"><span class="linenos">1537</span></a> <span class="k">try</span><span class="p">:</span>
</span><span id="Parser.parse_into-1538"><a href="#Parser.parse_into-1538"><span class="linenos">1538</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse</span><span class="p">(</span><span class="n">parser</span><span class="p">,</span> <span class="n">raw_tokens</span><span class="p">,</span> <span class="n">sql</span><span class="p">)</span>
</span><span id="Parser.parse_into-1539"><a href="#Parser.parse_into-1539"><span class="linenos">1539</span></a> <span class="k">except</span> <span class="n">ParseError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
</span><span id="Parser.parse_into-1540"><a href="#Parser.parse_into-1540"><span class="linenos">1540</span></a> <span class="n">e</span><span class="o">.</span><span class="n">errors</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">&quot;into_expression&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">expression_type</span>
</span><span id="Parser.parse_into-1541"><a href="#Parser.parse_into-1541"><span class="linenos">1541</span></a> <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</span><span id="Parser.parse_into-1542"><a href="#Parser.parse_into-1542"><span class="linenos">1542</span></a>
</span><span id="Parser.parse_into-1543"><a href="#Parser.parse_into-1543"><span class="linenos">1543</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
</span><span id="Parser.parse_into-1544"><a href="#Parser.parse_into-1544"><span class="linenos">1544</span></a> <span class="sa">f</span><span class="s2">&quot;Failed to parse &#39;</span><span class="si">{</span><span class="n">sql</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">raw_tokens</span><span class="si">}</span><span class="s2">&#39; into </span><span class="si">{</span><span class="n">expression_types</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Parser.parse_into-1545"><a href="#Parser.parse_into-1545"><span class="linenos">1545</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="n">errors</span><span class="p">),</span>
</span><span id="Parser.parse_into-1546"><a href="#Parser.parse_into-1546"><span class="linenos">1546</span></a> <span class="p">)</span> <span class="kn">from</span><span class="w"> </span><span class="nn">errors</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span></pre></div>
<div class="docstring"><p>Parses a list of tokens into a given Expression type. If a collection of Expression
types is given instead, this method will try to parse the token list into each one
of them, stopping at the first for which the parsing succeeds.</p>
<h6 id="arguments">Arguments:</h6>
<ul>
<li><strong>expression_types:</strong> The expression type(s) to try and parse the token list into.</li>
<li><strong>raw_tokens:</strong> The list of tokens.</li>
<li><strong>sql:</strong> The original SQL string, used to produce helpful debug messages.</li>
</ul>
<h6 id="returns">Returns:</h6>
<blockquote>
<p>The target Expression.</p>
</blockquote>
</div>
</div>
<div id="Parser.check_errors" class="classattr">
<input id="Parser.check_errors-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">check_errors</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span></span><span class="return-annotation">) -> <span class="kc">None</span>:</span></span>
<label class="view-source-button" for="Parser.check_errors-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Parser.check_errors"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Parser.check_errors-1586"><a href="#Parser.check_errors-1586"><span class="linenos">1586</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">check_errors</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser.check_errors-1587"><a href="#Parser.check_errors-1587"><span class="linenos">1587</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Logs or raises any found errors, depending on the chosen error level setting.&quot;&quot;&quot;</span>
</span><span id="Parser.check_errors-1588"><a href="#Parser.check_errors-1588"><span class="linenos">1588</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">WARN</span><span class="p">:</span>
</span><span id="Parser.check_errors-1589"><a href="#Parser.check_errors-1589"><span class="linenos">1589</span></a> <span class="k">for</span> <span class="n">error</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
</span><span id="Parser.check_errors-1590"><a href="#Parser.check_errors-1590"><span class="linenos">1590</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">error</span><span class="p">))</span>
</span><span id="Parser.check_errors-1591"><a href="#Parser.check_errors-1591"><span class="linenos">1591</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">RAISE</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
</span><span id="Parser.check_errors-1592"><a href="#Parser.check_errors-1592"><span class="linenos">1592</span></a> <span class="k">raise</span> <span class="n">ParseError</span><span class="p">(</span>
</span><span id="Parser.check_errors-1593"><a href="#Parser.check_errors-1593"><span class="linenos">1593</span></a> <span class="n">concat_messages</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_errors</span><span class="p">),</span>
</span><span id="Parser.check_errors-1594"><a href="#Parser.check_errors-1594"><span class="linenos">1594</span></a> <span class="n">errors</span><span class="o">=</span><span class="n">merge_errors</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">),</span>
</span><span id="Parser.check_errors-1595"><a href="#Parser.check_errors-1595"><span class="linenos">1595</span></a> <span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Logs or raises any found errors, depending on the chosen error level setting.</p>
</div>
</div>
<div id="Parser.raise_error" class="classattr">
<input id="Parser.raise_error-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">raise_error</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">message</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">token</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n"><a href="tokens.html#Token">sqlglot.tokens.Token</a></span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="kc">None</span>:</span></span>
<label class="view-source-button" for="Parser.raise_error-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Parser.raise_error"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Parser.raise_error-1597"><a href="#Parser.raise_error-1597"><span class="linenos">1597</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">raise_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">token</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">Token</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Parser.raise_error-1598"><a href="#Parser.raise_error-1598"><span class="linenos">1598</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser.raise_error-1599"><a href="#Parser.raise_error-1599"><span class="linenos">1599</span></a><span class="sd"> Appends an error in the list of recorded errors or raises it, depending on the chosen</span>
</span><span id="Parser.raise_error-1600"><a href="#Parser.raise_error-1600"><span class="linenos">1600</span></a><span class="sd"> error level setting.</span>
</span><span id="Parser.raise_error-1601"><a href="#Parser.raise_error-1601"><span class="linenos">1601</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser.raise_error-1602"><a href="#Parser.raise_error-1602"><span class="linenos">1602</span></a> <span class="n">token</span> <span class="o">=</span> <span class="n">token</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="ow">or</span> <span class="n">Token</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="Parser.raise_error-1603"><a href="#Parser.raise_error-1603"><span class="linenos">1603</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">start</span>
</span><span id="Parser.raise_error-1604"><a href="#Parser.raise_error-1604"><span class="linenos">1604</span></a> <span class="n">end</span> <span class="o">=</span> <span class="n">token</span><span class="o">.</span><span class="n">end</span> <span class="o">+</span> <span class="mi">1</span>
</span><span id="Parser.raise_error-1605"><a href="#Parser.raise_error-1605"><span class="linenos">1605</span></a> <span class="n">start_context</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="nb">max</span><span class="p">(</span><span class="n">start</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="p">:</span> <span class="n">start</span><span class="p">]</span>
</span><span id="Parser.raise_error-1606"><a href="#Parser.raise_error-1606"><span class="linenos">1606</span></a> <span class="n">highlight</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">start</span><span class="p">:</span><span class="n">end</span><span class="p">]</span>
</span><span id="Parser.raise_error-1607"><a href="#Parser.raise_error-1607"><span class="linenos">1607</span></a> <span class="n">end_context</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">end</span> <span class="p">:</span> <span class="n">end</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_message_context</span><span class="p">]</span>
</span><span id="Parser.raise_error-1608"><a href="#Parser.raise_error-1608"><span class="linenos">1608</span></a>
</span><span id="Parser.raise_error-1609"><a href="#Parser.raise_error-1609"><span class="linenos">1609</span></a> <span class="n">error</span> <span class="o">=</span> <span class="n">ParseError</span><span class="o">.</span><span class="n">new</span><span class="p">(</span>
</span><span id="Parser.raise_error-1610"><a href="#Parser.raise_error-1610"><span class="linenos">1610</span></a> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">message</span><span class="si">}</span><span class="s2">. Line </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="si">}</span><span class="s2">, Col: </span><span class="si">{</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">&quot;</span>
</span><span id="Parser.raise_error-1611"><a href="#Parser.raise_error-1611"><span class="linenos">1611</span></a> <span class="sa">f</span><span class="s2">&quot; </span><span class="si">{</span><span class="n">start_context</span><span class="si">}</span><span class="se">\033</span><span class="s2">[4m</span><span class="si">{</span><span class="n">highlight</span><span class="si">}</span><span class="se">\033</span><span class="s2">[0m</span><span class="si">{</span><span class="n">end_context</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Parser.raise_error-1612"><a href="#Parser.raise_error-1612"><span class="linenos">1612</span></a> <span class="n">description</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
</span><span id="Parser.raise_error-1613"><a href="#Parser.raise_error-1613"><span class="linenos">1613</span></a> <span class="n">line</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">line</span><span class="p">,</span>
</span><span id="Parser.raise_error-1614"><a href="#Parser.raise_error-1614"><span class="linenos">1614</span></a> <span class="n">col</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">col</span><span class="p">,</span>
</span><span id="Parser.raise_error-1615"><a href="#Parser.raise_error-1615"><span class="linenos">1615</span></a> <span class="n">start_context</span><span class="o">=</span><span class="n">start_context</span><span class="p">,</span>
</span><span id="Parser.raise_error-1616"><a href="#Parser.raise_error-1616"><span class="linenos">1616</span></a> <span class="n">highlight</span><span class="o">=</span><span class="n">highlight</span><span class="p">,</span>
</span><span id="Parser.raise_error-1617"><a href="#Parser.raise_error-1617"><span class="linenos">1617</span></a> <span class="n">end_context</span><span class="o">=</span><span class="n">end_context</span><span class="p">,</span>
</span><span id="Parser.raise_error-1618"><a href="#Parser.raise_error-1618"><span class="linenos">1618</span></a> <span class="p">)</span>
</span><span id="Parser.raise_error-1619"><a href="#Parser.raise_error-1619"><span class="linenos">1619</span></a>
</span><span id="Parser.raise_error-1620"><a href="#Parser.raise_error-1620"><span class="linenos">1620</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">==</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IMMEDIATE</span><span class="p">:</span>
</span><span id="Parser.raise_error-1621"><a href="#Parser.raise_error-1621"><span class="linenos">1621</span></a> <span class="k">raise</span> <span class="n">error</span>
</span><span id="Parser.raise_error-1622"><a href="#Parser.raise_error-1622"><span class="linenos">1622</span></a>
</span><span id="Parser.raise_error-1623"><a href="#Parser.raise_error-1623"><span class="linenos">1623</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">error</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Appends an error in the list of recorded errors or raises it, depending on the chosen
error level setting.</p>
</div>
</div>
<div id="Parser.expression" class="classattr">
<input id="Parser.expression-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">expression</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><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">comments</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</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="param"> <span class="o">**</span><span class="n">kwargs</span></span><span class="return-annotation">) -> <span class="o">~</span><span class="n">E</span>:</span></span>
<label class="view-source-button" for="Parser.expression-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Parser.expression"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Parser.expression-1625"><a href="#Parser.expression-1625"><span class="linenos">1625</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">expression</span><span class="p">(</span>
</span><span id="Parser.expression-1626"><a href="#Parser.expression-1626"><span class="linenos">1626</span></a> <span class="bp">self</span><span class="p">,</span> <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">comments</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">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
</span><span id="Parser.expression-1627"><a href="#Parser.expression-1627"><span class="linenos">1627</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="Parser.expression-1628"><a href="#Parser.expression-1628"><span class="linenos">1628</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser.expression-1629"><a href="#Parser.expression-1629"><span class="linenos">1629</span></a><span class="sd"> Creates a new, validated Expression.</span>
</span><span id="Parser.expression-1630"><a href="#Parser.expression-1630"><span class="linenos">1630</span></a>
</span><span id="Parser.expression-1631"><a href="#Parser.expression-1631"><span class="linenos">1631</span></a><span class="sd"> Args:</span>
</span><span id="Parser.expression-1632"><a href="#Parser.expression-1632"><span class="linenos">1632</span></a><span class="sd"> exp_class: The expression class to instantiate.</span>
</span><span id="Parser.expression-1633"><a href="#Parser.expression-1633"><span class="linenos">1633</span></a><span class="sd"> comments: An optional list of comments to attach to the expression.</span>
</span><span id="Parser.expression-1634"><a href="#Parser.expression-1634"><span class="linenos">1634</span></a><span class="sd"> kwargs: The arguments to set for the expression along with their respective values.</span>
</span><span id="Parser.expression-1635"><a href="#Parser.expression-1635"><span class="linenos">1635</span></a>
</span><span id="Parser.expression-1636"><a href="#Parser.expression-1636"><span class="linenos">1636</span></a><span class="sd"> Returns:</span>
</span><span id="Parser.expression-1637"><a href="#Parser.expression-1637"><span class="linenos">1637</span></a><span class="sd"> The target expression.</span>
</span><span id="Parser.expression-1638"><a href="#Parser.expression-1638"><span class="linenos">1638</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser.expression-1639"><a href="#Parser.expression-1639"><span class="linenos">1639</span></a> <span class="n">instance</span> <span class="o">=</span> <span class="n">exp_class</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</span><span id="Parser.expression-1640"><a href="#Parser.expression-1640"><span class="linenos">1640</span></a> <span class="n">instance</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span> <span class="k">if</span> <span class="n">comments</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
</span><span id="Parser.expression-1641"><a href="#Parser.expression-1641"><span class="linenos">1641</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
</span></pre></div>
<div class="docstring"><p>Creates a new, validated Expression.</p>
<h6 id="arguments">Arguments:</h6>
<ul>
<li><strong>exp_class:</strong> The expression class to instantiate.</li>
<li><strong>comments:</strong> An optional list of comments to attach to the expression.</li>
<li><strong>kwargs:</strong> The arguments to set for the expression along with their respective values.</li>
</ul>
<h6 id="returns">Returns:</h6>
<blockquote>
<p>The target expression.</p>
</blockquote>
</div>
</div>
<div id="Parser.validate_expression" class="classattr">
<input id="Parser.validate_expression-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">validate_expression</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">args</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">) -> <span class="o">~</span><span class="n">E</span>:</span></span>
<label class="view-source-button" for="Parser.validate_expression-view-source"><span>View Source</span></label>
</div>
<a class="headerlink" href="#Parser.validate_expression"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Parser.validate_expression-1648"><a href="#Parser.validate_expression-1648"><span class="linenos">1648</span></a> <span class="k">def</span><span class="w"> </span><span class="nf">validate_expression</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">args</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">List</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">E</span><span class="p">:</span>
</span><span id="Parser.validate_expression-1649"><a href="#Parser.validate_expression-1649"><span class="linenos">1649</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Parser.validate_expression-1650"><a href="#Parser.validate_expression-1650"><span class="linenos">1650</span></a><span class="sd"> Validates an Expression, making sure that all its mandatory arguments are set.</span>
</span><span id="Parser.validate_expression-1651"><a href="#Parser.validate_expression-1651"><span class="linenos">1651</span></a>
</span><span id="Parser.validate_expression-1652"><a href="#Parser.validate_expression-1652"><span class="linenos">1652</span></a><span class="sd"> Args:</span>
</span><span id="Parser.validate_expression-1653"><a href="#Parser.validate_expression-1653"><span class="linenos">1653</span></a><span class="sd"> expression: The expression to validate.</span>
</span><span id="Parser.validate_expression-1654"><a href="#Parser.validate_expression-1654"><span class="linenos">1654</span></a><span class="sd"> args: An optional list of items that was used to instantiate the expression, if it&#39;s a Func.</span>
</span><span id="Parser.validate_expression-1655"><a href="#Parser.validate_expression-1655"><span class="linenos">1655</span></a>
</span><span id="Parser.validate_expression-1656"><a href="#Parser.validate_expression-1656"><span class="linenos">1656</span></a><span class="sd"> Returns:</span>
</span><span id="Parser.validate_expression-1657"><a href="#Parser.validate_expression-1657"><span class="linenos">1657</span></a><span class="sd"> The validated expression.</span>
</span><span id="Parser.validate_expression-1658"><a href="#Parser.validate_expression-1658"><span class="linenos">1658</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Parser.validate_expression-1659"><a href="#Parser.validate_expression-1659"><span class="linenos">1659</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">error_level</span> <span class="o">!=</span> <span class="n">ErrorLevel</span><span class="o">.</span><span class="n">IGNORE</span><span class="p">:</span>
</span><span id="Parser.validate_expression-1660"><a href="#Parser.validate_expression-1660"><span class="linenos">1660</span></a> <span class="k">for</span> <span class="n">error_message</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">error_messages</span><span class="p">(</span><span class="n">args</span><span class="p">):</span>
</span><span id="Parser.validate_expression-1661"><a href="#Parser.validate_expression-1661"><span class="linenos">1661</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="n">error_message</span><span class="p">)</span>
</span><span id="Parser.validate_expression-1662"><a href="#Parser.validate_expression-1662"><span class="linenos">1662</span></a>
</span><span id="Parser.validate_expression-1663"><a href="#Parser.validate_expression-1663"><span class="linenos">1663</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
<div class="docstring"><p>Validates an Expression, making sure that all its mandatory arguments are set.</p>
<h6 id="arguments">Arguments:</h6>
<ul>
<li><strong>expression:</strong> The expression to validate.</li>
<li><strong>args:</strong> An optional list of items that was used to instantiate the expression, if it's a Func.</li>
</ul>
<h6 id="returns">Returns:</h6>
<blockquote>
<p>The validated expression.</p>
</blockquote>
</div>
</div>
<div id="Parser.errors" class="classattr">
<div class="attr variable">
<span class="name">errors</span>
</div>
<a class="headerlink" href="#Parser.errors"></a>
</div>
<div id="Parser.sql" class="classattr">
<div class="attr variable">
<span class="name">sql</span>
</div>
<a class="headerlink" href="#Parser.sql"></a>
</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>