<!doctype html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sqlobject.sqlbuilder — SQLObject 3.7.0 documentation</title> <link rel="stylesheet" href="../../_static/bizstyle.css" type="text/css" /> <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> <script type="text/javascript" src="../../_static/documentation_options.js"></script> <script type="text/javascript" src="../../_static/jquery.js"></script> <script type="text/javascript" src="../../_static/underscore.js"></script> <script type="text/javascript" src="../../_static/doctools.js"></script> <script type="text/javascript" src="../../_static/bizstyle.js"></script> <link rel="index" title="Index" href="../../genindex.html" /> <link rel="search" title="Search" href="../../search.html" /> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <!--[if lt IE 9]> <script type="text/javascript" src="_static/css3-mediaqueries.js"></script> <![endif]--> </head><body> <div class="related" role="navigation" aria-label="related navigation"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../../genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > <a href="../../py-modindex.html" title="Python Module Index" >modules</a> |</li> <li class="nav-item nav-item-0"><a href="../../index.html">SQLObject 3.7.0 documentation</a> »</li> <li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li> </ul> </div> <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebarwrapper"> <div id="searchbox" style="display: none" role="search"> <h3>Quick search</h3> <div class="searchformwrapper"> <form class="search" action="../../search.html" method="get"> <input type="text" name="q" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body" role="main"> <h1>Source code for sqlobject.sqlbuilder</h1><div class="highlight"><pre> <span></span><span class="sd">"""</span> <span class="sd">sqlobject.sqlbuilder</span> <span class="sd">--------------------</span> <span class="sd">:author: Ian Bicking <ianb@colorstudy.com></span> <span class="sd">Builds SQL expressions from normal Python expressions.</span> <span class="sd">Disclaimer</span> <span class="sd">----------</span> <span class="sd">This program is free software; you can redistribute it and/or modify</span> <span class="sd">it under the terms of the GNU Lesser General Public License as</span> <span class="sd">published by the Free Software Foundation; either version 2.1 of the</span> <span class="sd">License, or (at your option any later version.</span> <span class="sd">This program is distributed in the hope that it will be useful,</span> <span class="sd">but WITHOUT ANY WARRANTY; without even the implied warranty of</span> <span class="sd">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> <span class="sd">GNU General Public License for more details.</span> <span class="sd">You should have received a copy of the GNU Lesser General Public</span> <span class="sd">License along with this program; if not, write to the Free Software</span> <span class="sd">Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,</span> <span class="sd">USA.</span> <span class="sd">Instructions</span> <span class="sd">------------</span> <span class="sd">To begin a SQL expression, you must use some sort of SQL object -- a</span> <span class="sd">field, table, or SQL statement (``SELECT``, ``INSERT``, etc.) You can</span> <span class="sd">then use normal operators, with the exception of: `and`, `or`, `not`,</span> <span class="sd">and `in`. You can use the `AND`, `OR`, `NOT`, and `IN` functions</span> <span class="sd">instead, or you can also use `&`, `|`, and `~` for `and`, `or`, and</span> <span class="sd">`not` respectively (however -- the precidence for these operators</span> <span class="sd">doesn't work as you would want, so you must use many parenthesis).</span> <span class="sd">To create a sql field, table, or constant/function, use the namespaces</span> <span class="sd">`table`, `const`, and `func`. For instance, ``table.address`` refers</span> <span class="sd">to the ``address`` table, and ``table.address.state`` refers to the</span> <span class="sd">``state`` field in the address table. ``const.NULL`` is the ``NULL``</span> <span class="sd">SQL constant, and ``func.NOW()`` is the ``NOW()`` function call</span> <span class="sd">(`const` and `func` are actually identicle, but the two names are</span> <span class="sd">provided for clarity). Once you create this object, expressions</span> <span class="sd">formed with it will produce SQL statements.</span> <span class="sd">The ``sqlrepr(obj)`` function gets the SQL representation of these</span> <span class="sd">objects, as well as the proper SQL representation of basic Python</span> <span class="sd">types (None==NULL).</span> <span class="sd">There are a number of DB-specific SQL features that this does not</span> <span class="sd">implement. There are a bunch of normal ANSI features also not present.</span> <span class="sd">See the bottom of this module for some examples, and run it (i.e.</span> <span class="sd">``python sql.py``) to see the results of those examples.</span> <span class="sd">"""</span> <span class="c1">########################################</span> <span class="c1"># Constants</span> <span class="c1">########################################</span> <span class="kn">import</span> <span class="nn">fnmatch</span> <span class="kn">import</span> <span class="nn">operator</span> <span class="kn">import</span> <span class="nn">re</span> <span class="kn">import</span> <span class="nn">threading</span> <span class="kn">import</span> <span class="nn">types</span> <span class="kn">import</span> <span class="nn">weakref</span> <span class="kn">from</span> <span class="nn">.</span> <span class="k">import</span> <span class="n">classregistry</span> <span class="kn">from</span> <span class="nn">.converters</span> <span class="k">import</span> <span class="n">registerConverter</span><span class="p">,</span> <span class="n">sqlrepr</span><span class="p">,</span> <span class="n">quote_str</span><span class="p">,</span> <span class="n">unquote_str</span> <span class="kn">from</span> <span class="nn">.compat</span> <span class="k">import</span> <span class="n">PY2</span><span class="p">,</span> <span class="n">string_type</span> <div class="viewcode-block" id="VersionError"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.VersionError">[docs]</a><span class="k">class</span> <span class="nc">VersionError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span> <span class="k">pass</span> </div> <div class="viewcode-block" id="NoDefault"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.NoDefault">[docs]</a><span class="k">class</span> <span class="nc">NoDefault</span><span class="p">:</span> <span class="k">pass</span> </div> <div class="viewcode-block" id="SQLObjectState"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLObjectState">[docs]</a><span class="k">class</span> <span class="nc">SQLObjectState</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">soObject</span><span class="p">,</span> <span class="n">connection</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">soObject</span> <span class="o">=</span> <span class="n">weakref</span><span class="o">.</span><span class="n">proxy</span><span class="p">(</span><span class="n">soObject</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span> <span class="o">=</span> <span class="n">connection</span> </div> <span class="n">safeSQLRE</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'^[a-zA-Z_][a-zA-Z0-9_\.]*$'</span><span class="p">)</span> <div class="viewcode-block" id="sqlIdentifier"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.sqlIdentifier">[docs]</a><span class="k">def</span> <span class="nf">sqlIdentifier</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span> <span class="c1"># some db drivers return unicode column names</span> <span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">string_type</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">bool</span><span class="p">(</span><span class="n">safeSQLRE</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span> </div> <div class="viewcode-block" id="execute"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.execute">[docs]</a><span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">executor</span><span class="p">):</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="s1">'execute'</span><span class="p">):</span> <span class="k">return</span> <span class="n">expr</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">executor</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">expr</span> </div> <span class="k">def</span> <span class="nf">_str_or_sqlrepr</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <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">string_type</span><span class="p">):</span> <span class="k">return</span> <span class="n">expr</span> <span class="k">return</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="c1">########################################</span> <span class="c1"># Expression generation</span> <span class="c1">########################################</span> <div class="viewcode-block" id="SQLExpression"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLExpression">[docs]</a><span class="k">class</span> <span class="nc">SQLExpression</span><span class="p">:</span> <span class="k">def</span> <span class="nf">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"+"</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__radd__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"+"</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__sub__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"-"</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__rsub__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"-"</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"*"</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"*"</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__div__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"/"</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__rdiv__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"/"</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__truediv__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"/"</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__rtruediv__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"/"</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__floordiv__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="s2">"FLOOR"</span><span class="p">)(</span><span class="n">SQLOp</span><span class="p">(</span><span class="s2">"/"</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">))</span> <span class="k">def</span> <span class="nf">__rfloordiv__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="s2">"FLOOR"</span><span class="p">)(</span><span class="n">SQLOp</span><span class="p">(</span><span class="s2">"/"</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="bp">self</span><span class="p">))</span> <span class="k">def</span> <span class="nf">__pos__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLPrefix</span><span class="p">(</span><span class="s2">"+"</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__neg__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLPrefix</span><span class="p">(</span><span class="s2">"-"</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__pow__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="s2">"POW"</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__rpow__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="s2">"POW"</span><span class="p">)(</span><span class="n">other</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__abs__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="s2">"ABS"</span><span class="p">)(</span><span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__mod__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLModulo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__rmod__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="s2">"MOD"</span><span class="p">)(</span><span class="n">other</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__lt__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"<"</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__le__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"<="</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__gt__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">">"</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__ge__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">">="</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">if</span> <span class="n">other</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="k">return</span> <span class="n">ISNULL</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"="</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">if</span> <span class="n">other</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="k">return</span> <span class="n">ISNOTNULL</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"<>"</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__and__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"AND"</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__rand__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"AND"</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__or__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"OR"</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__ror__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"OR"</span><span class="p">,</span> <span class="n">other</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__invert__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLPrefix</span><span class="p">(</span><span class="s2">"NOT"</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLCall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">try</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__sqlrepr__</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span> <span class="k">except</span> <span class="ne">AssertionError</span><span class="p">:</span> <span class="k">return</span> <span class="s1">'<</span><span class="si">%s</span><span class="s1"> </span><span class="si">%s</span><span class="s1">>'</span> <span class="o">%</span> <span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="nb">hex</span><span class="p">(</span><span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">))[</span><span class="mi">2</span><span class="p">:])</span> <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__cmp__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">raise</span> <span class="n">VersionError</span><span class="p">(</span><span class="s2">"Python 2.1+ required"</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__rcmp__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">raise</span> <span class="n">VersionError</span><span class="p">(</span><span class="s2">"Python 2.1+ required"</span><span class="p">)</span> <div class="viewcode-block" id="SQLExpression.startswith"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLExpression.startswith">[docs]</a> <span class="k">def</span> <span class="nf">startswith</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span> <span class="k">return</span> <span class="n">STARTSWITH</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span> </div> <div class="viewcode-block" id="SQLExpression.endswith"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLExpression.endswith">[docs]</a> <span class="k">def</span> <span class="nf">endswith</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span> <span class="k">return</span> <span class="n">ENDSWITH</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span> </div> <div class="viewcode-block" id="SQLExpression.contains"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLExpression.contains">[docs]</a> <span class="k">def</span> <span class="nf">contains</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span> <span class="k">return</span> <span class="n">CONTAINSSTRING</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span> </div> <div class="viewcode-block" id="SQLExpression.components"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLExpression.components">[docs]</a> <span class="k">def</span> <span class="nf">components</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="p">[]</span> </div> <div class="viewcode-block" id="SQLExpression.tablesUsed"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLExpression.tablesUsed">[docs]</a> <span class="k">def</span> <span class="nf">tablesUsed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tablesUsedSet</span><span class="p">(</span><span class="n">db</span><span class="p">)</span> </div> <div class="viewcode-block" id="SQLExpression.tablesUsedSet"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLExpression.tablesUsedSet">[docs]</a> <span class="k">def</span> <span class="nf">tablesUsedSet</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="n">tables</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tablesUsedImmediate</span><span class="p">():</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="s1">'__sqlrepr__'</span><span class="p">):</span> <span class="n">table</span> <span class="o">=</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="n">tables</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="k">for</span> <span class="n">component</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">components</span><span class="p">():</span> <span class="n">tables</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">tablesUsedSet</span><span class="p">(</span><span class="n">component</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> <span class="k">return</span> <span class="n">tables</span> </div> <div class="viewcode-block" id="SQLExpression.tablesUsedImmediate"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLExpression.tablesUsedImmediate">[docs]</a> <span class="k">def</span> <span class="nf">tablesUsedImmediate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="p">[]</span> </div></div> <span class="c1">#######################################</span> <span class="c1"># Converter for SQLExpression instances</span> <span class="c1">#######################################</span> <div class="viewcode-block" id="SQLExprConverter"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLExprConverter">[docs]</a><span class="k">def</span> <span class="nf">SQLExprConverter</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="n">value</span><span class="o">.</span><span class="n">__sqlrepr__</span><span class="p">()</span> </div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="tablesUsedSet"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.tablesUsedSet">[docs]</a><span class="k">def</span> <span class="nf">tablesUsedSet</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"tablesUsedSet"</span><span class="p">):</span> <span class="k">return</span> <span class="n">obj</span><span class="o">.</span><span class="n">tablesUsedSet</span><span class="p">(</span><span class="n">db</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="p">{}</span> </div> <span class="k">if</span> <span class="n">PY2</span><span class="p">:</span> <span class="n">div</span> <span class="o">=</span> <span class="n">operator</span><span class="o">.</span><span class="n">div</span> <span class="k">else</span><span class="p">:</span> <span class="n">div</span> <span class="o">=</span> <span class="n">operator</span><span class="o">.</span><span class="n">truediv</span> <span class="n">operatorMap</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"+"</span><span class="p">:</span> <span class="n">operator</span><span class="o">.</span><span class="n">add</span><span class="p">,</span> <span class="s2">"/"</span><span class="p">:</span> <span class="n">div</span><span class="p">,</span> <span class="s2">"-"</span><span class="p">:</span> <span class="n">operator</span><span class="o">.</span><span class="n">sub</span><span class="p">,</span> <span class="s2">"*"</span><span class="p">:</span> <span class="n">operator</span><span class="o">.</span><span class="n">mul</span><span class="p">,</span> <span class="s2">"<"</span><span class="p">:</span> <span class="n">operator</span><span class="o">.</span><span class="n">lt</span><span class="p">,</span> <span class="s2">"<="</span><span class="p">:</span> <span class="n">operator</span><span class="o">.</span><span class="n">le</span><span class="p">,</span> <span class="s2">"="</span><span class="p">:</span> <span class="n">operator</span><span class="o">.</span><span class="n">eq</span><span class="p">,</span> <span class="s2">"!="</span><span class="p">:</span> <span class="n">operator</span><span class="o">.</span><span class="n">ne</span><span class="p">,</span> <span class="s2">">="</span><span class="p">:</span> <span class="n">operator</span><span class="o">.</span><span class="n">ge</span><span class="p">,</span> <span class="s2">">"</span><span class="p">:</span> <span class="n">operator</span><span class="o">.</span><span class="n">gt</span><span class="p">,</span> <span class="s2">"IN"</span><span class="p">:</span> <span class="n">operator</span><span class="o">.</span><span class="n">contains</span><span class="p">,</span> <span class="s2">"IS"</span><span class="p">:</span> <span class="n">operator</span><span class="o">.</span><span class="n">eq</span><span class="p">,</span> <span class="p">}</span> <div class="viewcode-block" id="SQLOp"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLOp">[docs]</a><span class="k">class</span> <span class="nc">SQLOp</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op</span><span class="p">,</span> <span class="n">expr1</span><span class="p">,</span> <span class="n">expr2</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">op</span> <span class="o">=</span> <span class="n">op</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">expr1</span> <span class="o">=</span> <span class="n">expr1</span> <span class="bp">self</span><span class="o">.</span><span class="n">expr2</span> <span class="o">=</span> <span class="n">expr2</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="n">s1</span> <span class="o">=</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr1</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="n">s2</span> <span class="o">=</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr2</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="k">if</span> <span class="n">s1</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'('</span> <span class="ow">and</span> <span class="n">s1</span> <span class="o">!=</span> <span class="s1">'NULL'</span><span class="p">:</span> <span class="n">s1</span> <span class="o">=</span> <span class="s1">'('</span> <span class="o">+</span> <span class="n">s1</span> <span class="o">+</span> <span class="s1">')'</span> <span class="k">if</span> <span class="n">s2</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'('</span> <span class="ow">and</span> <span class="n">s2</span> <span class="o">!=</span> <span class="s1">'NULL'</span><span class="p">:</span> <span class="n">s2</span> <span class="o">=</span> <span class="s1">'('</span> <span class="o">+</span> <span class="n">s2</span> <span class="o">+</span> <span class="s1">')'</span> <span class="k">return</span> <span class="s2">"(</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">s1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">op</span><span class="p">,</span> <span class="n">s2</span><span class="p">)</span> <div class="viewcode-block" id="SQLOp.components"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLOp.components">[docs]</a> <span class="k">def</span> <span class="nf">components</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">expr1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">expr2</span><span class="p">]</span> </div> <div class="viewcode-block" id="SQLOp.execute"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLOp.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">executor</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">op</span> <span class="o">==</span> <span class="s2">"AND"</span><span class="p">:</span> <span class="k">return</span> <span class="n">execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr1</span><span class="p">,</span> <span class="n">executor</span><span class="p">)</span> \ <span class="ow">and</span> <span class="n">execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr2</span><span class="p">,</span> <span class="n">executor</span><span class="p">)</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">op</span> <span class="o">==</span> <span class="s2">"OR"</span><span class="p">:</span> <span class="k">return</span> <span class="n">execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr1</span><span class="p">,</span> <span class="n">executor</span><span class="p">)</span> \ <span class="ow">or</span> <span class="n">execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr2</span><span class="p">,</span> <span class="n">executor</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">operatorMap</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">op</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="n">execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr1</span><span class="p">,</span> <span class="n">executor</span><span class="p">),</span> <span class="n">execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr2</span><span class="p">,</span> <span class="n">executor</span><span class="p">))</span> </div></div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">SQLOp</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="SQLModulo"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLModulo">[docs]</a><span class="k">class</span> <span class="nc">SQLModulo</span><span class="p">(</span><span class="n">SQLOp</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr1</span><span class="p">,</span> <span class="n">expr2</span><span class="p">):</span> <span class="n">SQLOp</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">'%'</span><span class="p">,</span> <span class="n">expr1</span><span class="p">,</span> <span class="n">expr2</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">if</span> <span class="n">db</span> <span class="o">==</span> <span class="s1">'sqlite'</span><span class="p">:</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="o">.</span><span class="n">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="n">s1</span> <span class="o">=</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr1</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="n">s2</span> <span class="o">=</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr2</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="k">return</span> <span class="s2">"MOD(</span><span class="si">%s</span><span class="s2">, </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">s1</span><span class="p">,</span> <span class="n">s2</span><span class="p">)</span> </div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">SQLModulo</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="SQLCall"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLCall">[docs]</a><span class="k">class</span> <span class="nc">SQLCall</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">expr</span> <span class="o">=</span> <span class="n">expr</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="n">args</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="s2">"</span><span class="si">%s%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span> <span class="n">db</span><span class="p">),</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> <div class="viewcode-block" id="SQLCall.components"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLCall.components">[docs]</a> <span class="k">def</span> <span class="nf">components</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</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">args</span><span class="p">)</span> </div> <div class="viewcode-block" id="SQLCall.execute"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLCall.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">executor</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"I don't yet know how to locally execute functions"</span><span class="p">)</span> </div></div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">SQLCall</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="SQLPrefix"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLPrefix">[docs]</a><span class="k">class</span> <span class="nc">SQLPrefix</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</span><span class="p">,</span> <span class="n">expr</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span> <span class="o">=</span> <span class="n">prefix</span> <span class="bp">self</span><span class="o">.</span><span class="n">expr</span> <span class="o">=</span> <span class="n">expr</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="p">,</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> <div class="viewcode-block" id="SQLPrefix.components"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLPrefix.components">[docs]</a> <span class="k">def</span> <span class="nf">components</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">]</span> </div> <div class="viewcode-block" id="SQLPrefix.execute"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLPrefix.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">executor</span><span class="p">):</span> <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span> <span class="n">expr</span> <span class="o">=</span> <span class="n">execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span> <span class="n">executor</span><span class="p">)</span> <span class="k">if</span> <span class="n">prefix</span> <span class="o">==</span> <span class="s2">"+"</span><span class="p">:</span> <span class="k">return</span> <span class="n">expr</span> <span class="k">elif</span> <span class="n">prefix</span> <span class="o">==</span> <span class="s2">"-"</span><span class="p">:</span> <span class="k">return</span> <span class="o">-</span><span class="n">expr</span> <span class="k">elif</span> <span class="n">prefix</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"NOT"</span><span class="p">:</span> <span class="k">return</span> <span class="ow">not</span> <span class="n">expr</span> </div></div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">SQLPrefix</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="SQLConstant"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLConstant">[docs]</a><span class="k">class</span> <span class="nc">SQLConstant</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">const</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">const</span> <span class="o">=</span> <span class="n">const</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">const</span> <div class="viewcode-block" id="SQLConstant.execute"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLConstant.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">executor</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"I don't yet know how to execute SQL constants"</span><span class="p">)</span> </div></div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">SQLConstant</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="SQLTrueClauseClass"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLTrueClauseClass">[docs]</a><span class="k">class</span> <span class="nc">SQLTrueClauseClass</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="s2">"1 = 1"</span> <div class="viewcode-block" id="SQLTrueClauseClass.execute"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLTrueClauseClass.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">executor</span><span class="p">):</span> <span class="k">return</span> <span class="mi">1</span> </div></div> <span class="n">SQLTrueClause</span> <span class="o">=</span> <span class="n">SQLTrueClauseClass</span><span class="p">()</span> <span class="n">registerConverter</span><span class="p">(</span><span class="n">SQLTrueClauseClass</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <span class="c1">########################################</span> <span class="c1"># Namespaces</span> <span class="c1">########################################</span> <div class="viewcode-block" id="Field"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Field">[docs]</a><span class="k">class</span> <span class="nc">Field</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tableName</span><span class="p">,</span> <span class="n">fieldName</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">tableName</span> <span class="o">=</span> <span class="n">tableName</span> <span class="bp">self</span><span class="o">.</span><span class="n">fieldName</span> <span class="o">=</span> <span class="n">fieldName</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">tableName</span> <span class="o">+</span> <span class="s2">"."</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">fieldName</span> <div class="viewcode-block" id="Field.tablesUsedImmediate"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Field.tablesUsedImmediate">[docs]</a> <span class="k">def</span> <span class="nf">tablesUsedImmediate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">tableName</span><span class="p">]</span> </div> <div class="viewcode-block" id="Field.execute"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Field.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">executor</span><span class="p">):</span> <span class="k">return</span> <span class="n">executor</span><span class="o">.</span><span class="n">field</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tableName</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fieldName</span><span class="p">)</span> </div></div> <div class="viewcode-block" id="SQLObjectField"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLObjectField">[docs]</a><span class="k">class</span> <span class="nc">SQLObjectField</span><span class="p">(</span><span class="n">Field</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tableName</span><span class="p">,</span> <span class="n">fieldName</span><span class="p">,</span> <span class="n">original</span><span class="p">,</span> <span class="n">soClass</span><span class="p">,</span> <span class="n">column</span><span class="p">):</span> <span class="n">Field</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tableName</span><span class="p">,</span> <span class="n">fieldName</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">original</span> <span class="o">=</span> <span class="n">original</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span> <span class="o">=</span> <span class="n">soClass</span> <span class="bp">self</span><span class="o">.</span><span class="n">column</span> <span class="o">=</span> <span class="n">column</span> <span class="k">def</span> <span class="nf">_from_python</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">column</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">SQLExpression</span><span class="p">)</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">from_python</span><span class="p">:</span> <span class="n">value</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">from_python</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">SQLObjectState</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="p">))</span> <span class="k">return</span> <span class="n">value</span> <span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">if</span> <span class="n">other</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="k">return</span> <span class="n">ISNULL</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="n">other</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_from_python</span><span class="p">(</span><span class="n">other</span><span class="p">)</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s1">'='</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> <span class="k">if</span> <span class="n">other</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="k">return</span> <span class="n">ISNOTNULL</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="n">other</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_from_python</span><span class="p">(</span><span class="n">other</span><span class="p">)</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s1">'<>'</span><span class="p">,</span> <span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <div class="viewcode-block" id="SQLObjectField.startswith"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLObjectField.startswith">[docs]</a> <span class="k">def</span> <span class="nf">startswith</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span> <span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_from_python</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="k">return</span> <span class="n">STARTSWITH</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span> </div> <div class="viewcode-block" id="SQLObjectField.endswith"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLObjectField.endswith">[docs]</a> <span class="k">def</span> <span class="nf">endswith</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span> <span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_from_python</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="k">return</span> <span class="n">ENDSWITH</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span> </div> <div class="viewcode-block" id="SQLObjectField.contains"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLObjectField.contains">[docs]</a> <span class="k">def</span> <span class="nf">contains</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span> <span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_from_python</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="k">return</span> <span class="n">CONTAINSSTRING</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span> </div></div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">SQLObjectField</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="Table"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Table">[docs]</a><span class="k">class</span> <span class="nc">Table</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="n">FieldClass</span> <span class="o">=</span> <span class="n">Field</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tableName</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">tableName</span> <span class="o">=</span> <span class="n">tableName</span> <span class="k">def</span> <span class="nf">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span> <span class="k">if</span> <span class="n">attr</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'__'</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">AttributeError</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">FieldClass</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tableName</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="n">_str_or_sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tableName</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <div class="viewcode-block" id="Table.execute"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Table.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">executor</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Tables don't have values"</span><span class="p">)</span> </div></div> <div class="viewcode-block" id="SQLObjectTable"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLObjectTable">[docs]</a><span class="k">class</span> <span class="nc">SQLObjectTable</span><span class="p">(</span><span class="n">Table</span><span class="p">):</span> <span class="n">FieldClass</span> <span class="o">=</span> <span class="n">SQLObjectField</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">soClass</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span> <span class="o">=</span> <span class="n">soClass</span> <span class="k">assert</span> <span class="n">soClass</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">table</span><span class="p">,</span> <span class="p">(</span> <span class="s2">"Bad table name in class </span><span class="si">%r</span><span class="s2">: </span><span class="si">%r</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">soClass</span><span class="p">,</span> <span class="n">soClass</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">table</span><span class="p">))</span> <span class="n">Table</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">soClass</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">table</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span> <span class="k">if</span> <span class="n">attr</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'__'</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">AttributeError</span> <span class="k">if</span> <span class="n">attr</span> <span class="o">==</span> <span class="s1">'id'</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_getattrFromID</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span> <span class="k">elif</span> <span class="n">attr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">columns</span><span class="p">[</span><span class="n">attr</span><span class="p">]</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_getattrFromColumn</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span> <span class="k">elif</span> <span class="n">attr</span> <span class="o">+</span> <span class="s1">'ID'</span> <span class="ow">in</span> \ <span class="p">[</span><span class="n">k</span> <span class="k">for</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">columns</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="o">.</span><span class="n">foreignKey</span><span class="p">]:</span> <span class="n">attr</span> <span class="o">+=</span> <span class="s1">'ID'</span> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">columns</span><span class="p">[</span><span class="n">attr</span><span class="p">]</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_getattrFromColumn</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> instance has no attribute '</span><span class="si">%s</span><span class="s2">'"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">attr</span><span class="p">))</span> <span class="k">def</span> <span class="nf">_getattrFromID</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">FieldClass</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tableName</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">idName</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_getattrFromColumn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">FieldClass</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tableName</span><span class="p">,</span> <span class="n">column</span><span class="o">.</span><span class="n">dbName</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="p">,</span> <span class="n">column</span><span class="p">)</span> </div> <div class="viewcode-block" id="SQLObjectTableWithJoins"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLObjectTableWithJoins">[docs]</a><span class="k">class</span> <span class="nc">SQLObjectTableWithJoins</span><span class="p">(</span><span class="n">SQLObjectTable</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span> <span class="k">if</span> <span class="n">attr</span> <span class="o">+</span> <span class="s1">'ID'</span> <span class="ow">in</span> \ <span class="p">[</span><span class="n">k</span> <span class="k">for</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">columns</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="o">.</span><span class="n">foreignKey</span><span class="p">]:</span> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">columns</span><span class="p">[</span><span class="n">attr</span> <span class="o">+</span> <span class="s1">'ID'</span><span class="p">]</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_getattrFromForeignKey</span><span class="p">(</span><span class="n">column</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span> <span class="k">elif</span> <span class="n">attr</span> <span class="ow">in</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">joinMethodName</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">joins</span><span class="p">]:</span> <span class="n">join</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">joins</span> <span class="k">if</span> <span class="n">x</span><span class="o">.</span><span class="n">joinMethodName</span> <span class="o">==</span> <span class="n">attr</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_getattrFromJoin</span><span class="p">(</span><span class="n">join</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">SQLObjectTable</span><span class="o">.</span><span class="fm">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_getattrFromForeignKey</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span> <span class="n">ret</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">column</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> <span class="o">==</span> \ <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="p">,</span> <span class="s1">'_SO_class_'</span> <span class="o">+</span> <span class="n">column</span><span class="o">.</span><span class="n">foreignKey</span><span class="p">)</span><span class="o">.</span><span class="n">q</span><span class="o">.</span><span class="n">id</span> <span class="k">return</span> <span class="n">ret</span> <span class="k">def</span> <span class="nf">_getattrFromJoin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">join</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">join</span><span class="p">,</span> <span class="s1">'otherColumn'</span><span class="p">):</span> <span class="k">return</span> <span class="n">AND</span><span class="p">(</span> <span class="n">join</span><span class="o">.</span><span class="n">otherClass</span><span class="o">.</span><span class="n">q</span><span class="o">.</span><span class="n">id</span> <span class="o">==</span> <span class="n">Field</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">intermediateTable</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">otherColumn</span><span class="p">),</span> <span class="n">Field</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">intermediateTable</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">joinColumn</span><span class="p">)</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="n">q</span><span class="o">.</span><span class="n">id</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">join</span><span class="o">.</span><span class="n">otherClass</span><span class="o">.</span><span class="n">q</span><span class="p">,</span> <span class="n">join</span><span class="o">.</span><span class="n">joinColumn</span><span class="p">)</span> <span class="o">==</span> \ <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="n">q</span><span class="o">.</span><span class="n">id</span> </div> <div class="viewcode-block" id="TableSpace"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.TableSpace">[docs]</a><span class="k">class</span> <span class="nc">TableSpace</span><span class="p">:</span> <span class="n">TableClass</span> <span class="o">=</span> <span class="n">Table</span> <span class="k">def</span> <span class="nf">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span> <span class="k">if</span> <span class="n">attr</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'__'</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">AttributeError</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">TableClass</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span> </div> <div class="viewcode-block" id="ConstantSpace"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.ConstantSpace">[docs]</a><span class="k">class</span> <span class="nc">ConstantSpace</span><span class="p">:</span> <span class="k">def</span> <span class="nf">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span> <span class="k">if</span> <span class="n">attr</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'__'</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">AttributeError</span> <span class="k">return</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span> </div> <span class="c1">########################################</span> <span class="c1"># Table aliases</span> <span class="c1">########################################</span> <div class="viewcode-block" id="AliasField"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.AliasField">[docs]</a><span class="k">class</span> <span class="nc">AliasField</span><span class="p">(</span><span class="n">Field</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tableName</span><span class="p">,</span> <span class="n">fieldName</span><span class="p">,</span> <span class="n">alias</span><span class="p">,</span> <span class="n">aliasTable</span><span class="p">):</span> <span class="n">Field</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tableName</span><span class="p">,</span> <span class="n">fieldName</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span> <span class="o">=</span> <span class="n">alias</span> <span class="bp">self</span><span class="o">.</span><span class="n">aliasTable</span> <span class="o">=</span> <span class="n">aliasTable</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="n">fieldName</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fieldName</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fieldName</span><span class="p">,</span> <span class="n">SQLExpression</span><span class="p">):</span> <span class="n">fieldName</span> <span class="o">=</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="n">fieldName</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span> <span class="o">+</span> <span class="s2">"."</span> <span class="o">+</span> <span class="n">fieldName</span> <div class="viewcode-block" id="AliasField.tablesUsedImmediate"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.AliasField.tablesUsedImmediate">[docs]</a> <span class="k">def</span> <span class="nf">tablesUsedImmediate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">aliasTable</span><span class="p">]</span> </div></div> <div class="viewcode-block" id="AliasTable"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.AliasTable">[docs]</a><span class="k">class</span> <span class="nc">AliasTable</span><span class="p">(</span><span class="n">Table</span><span class="p">):</span> <span class="n">as_string</span> <span class="o">=</span> <span class="s1">''</span> <span class="c1"># set it to "AS" if your database requires it</span> <span class="n">FieldClass</span> <span class="o">=</span> <span class="n">AliasField</span> <span class="n">_alias_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span> <span class="n">_alias_counter</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="s2">"sqlmeta"</span><span class="p">):</span> <span class="n">tableName</span> <span class="o">=</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="n">table</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">table</span><span class="p">)</span> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="p">(</span><span class="n">Select</span><span class="p">,</span> <span class="n">Union</span><span class="p">)):</span> <span class="k">assert</span> <span class="n">alias</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">,</span> \ <span class="s2">"Alias name cannot be constructed from Select instances, "</span> \ <span class="s2">"please provide an 'alias' keyword."</span> <span class="n">tableName</span> <span class="o">=</span> <span class="n">Subquery</span><span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="n">table</span><span class="p">)</span> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">else</span><span class="p">:</span> <span class="n">tableName</span> <span class="o">=</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span> <span class="n">Table</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tableName</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span> <span class="k">if</span> <span class="n">alias</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_alias_lock</span><span class="o">.</span><span class="n">acquire</span><span class="p">()</span> <span class="k">try</span><span class="p">:</span> <span class="n">AliasTable</span><span class="o">.</span><span class="n">_alias_counter</span> <span class="o">+=</span> <span class="mi">1</span> <span class="n">alias</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">_alias</span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">tableName</span><span class="p">,</span> <span class="n">AliasTable</span><span class="o">.</span><span class="n">_alias_counter</span><span class="p">)</span> <span class="k">finally</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_alias_lock</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span> <span class="o">=</span> <span class="n">alias</span> <span class="k">def</span> <span class="nf">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span> <span class="k">if</span> <span class="n">attr</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'__'</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">AttributeError</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="p">:</span> <span class="n">attr</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="o">.</span><span class="n">q</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span><span class="o">.</span><span class="n">fieldName</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">FieldClass</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tableName</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tableName</span><span class="p">,</span> <span class="n">db</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">as_string</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">alias</span><span class="p">)</span> </div> <div class="viewcode-block" id="Alias"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Alias">[docs]</a><span class="k">class</span> <span class="nc">Alias</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">q</span> <span class="o">=</span> <span class="n">AliasTable</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">alias</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">q</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <div class="viewcode-block" id="Alias.components"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Alias.components">[docs]</a> <span class="k">def</span> <span class="nf">components</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">q</span><span class="p">]</span> </div></div> <div class="viewcode-block" id="Union"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Union">[docs]</a><span class="k">class</span> <span class="nc">Union</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">tables</span><span class="p">):</span> <span class="n">tabs</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">SQLExpression</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="s1">'sqlmeta'</span><span class="p">):</span> <span class="n">t</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">table</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">Alias</span><span class="p">):</span> <span class="n">t</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">q</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">Table</span><span class="p">):</span> <span class="n">t</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">tableName</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">SQLExpression</span><span class="p">):</span> <span class="n">t</span> <span class="o">=</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="n">tabs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span> <span class="o">=</span> <span class="n">tabs</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="s2">" UNION "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">sqlrepr</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">tables</span><span class="p">])</span> </div> <span class="c1">########################################</span> <span class="c1"># SQL Statements</span> <span class="c1">########################################</span> <div class="viewcode-block" id="Select"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Select">[docs]</a><span class="k">class</span> <span class="nc">Select</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">items</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">,</span> <span class="n">where</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">,</span> <span class="n">groupBy</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">,</span> <span class="n">having</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">,</span> <span class="n">orderBy</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">,</span> <span class="n">join</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">,</span> <span class="n">lazyColumns</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="nb">reversed</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">forUpdate</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">clause</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">,</span> <span class="n">staticTables</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">,</span> <span class="n">distinctOn</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">items</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">,</span> <span class="n">types</span><span class="o">.</span><span class="n">GeneratorType</span><span class="p">)):</span> <span class="n">items</span> <span class="o">=</span> <span class="p">[</span><span class="n">items</span><span class="p">]</span> <span class="k">if</span> <span class="n">clause</span> <span class="ow">is</span> <span class="n">NoDefault</span> <span class="ow">and</span> <span class="n">where</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NoDefault</span><span class="p">:</span> <span class="n">clause</span> <span class="o">=</span> <span class="n">where</span> <span class="k">if</span> <span class="n">staticTables</span> <span class="ow">is</span> <span class="n">NoDefault</span><span class="p">:</span> <span class="n">staticTables</span> <span class="o">=</span> <span class="p">[]</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'items'</span><span class="p">]</span> <span class="o">=</span> <span class="n">items</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'clause'</span><span class="p">]</span> <span class="o">=</span> <span class="n">clause</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'groupBy'</span><span class="p">]</span> <span class="o">=</span> <span class="n">groupBy</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'having'</span><span class="p">]</span> <span class="o">=</span> <span class="n">having</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'orderBy'</span><span class="p">]</span> <span class="o">=</span> <span class="n">orderBy</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'limit'</span><span class="p">]</span> <span class="o">=</span> <span class="n">limit</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'join'</span><span class="p">]</span> <span class="o">=</span> <span class="n">join</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'lazyColumns'</span><span class="p">]</span> <span class="o">=</span> <span class="n">lazyColumns</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'distinct'</span><span class="p">]</span> <span class="o">=</span> <span class="n">distinct</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'distinctOn'</span><span class="p">]</span> <span class="o">=</span> <span class="n">distinctOn</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'start'</span><span class="p">]</span> <span class="o">=</span> <span class="n">start</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'end'</span><span class="p">]</span> <span class="o">=</span> <span class="n">end</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'reversed'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">reversed</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'forUpdate'</span><span class="p">]</span> <span class="o">=</span> <span class="n">forUpdate</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'staticTables'</span><span class="p">]</span> <span class="o">=</span> <span class="n">staticTables</span> <div class="viewcode-block" id="Select.clone"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Select.clone">[docs]</a> <span class="k">def</span> <span class="nf">clone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">newOps</span><span class="p">):</span> <span class="n">ops</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="n">ops</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">newOps</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="o">**</span><span class="n">ops</span><span class="p">)</span> </div> <div class="viewcode-block" id="Select.newItems"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Select.newItems">[docs]</a> <span class="k">def</span> <span class="nf">newItems</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">items</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">clone</span><span class="p">(</span><span class="n">items</span><span class="o">=</span><span class="n">items</span><span class="p">)</span> </div> <div class="viewcode-block" id="Select.newClause"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Select.newClause">[docs]</a> <span class="k">def</span> <span class="nf">newClause</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">new_clause</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">clone</span><span class="p">(</span><span class="n">clause</span><span class="o">=</span><span class="n">new_clause</span><span class="p">)</span> </div> <div class="viewcode-block" id="Select.orderBy"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Select.orderBy">[docs]</a> <span class="k">def</span> <span class="nf">orderBy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">orderBy</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">clone</span><span class="p">(</span><span class="n">orderBy</span><span class="o">=</span><span class="n">orderBy</span><span class="p">)</span> </div> <div class="viewcode-block" id="Select.unlimited"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Select.unlimited">[docs]</a> <span class="k">def</span> <span class="nf">unlimited</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">clone</span><span class="p">(</span><span class="n">limit</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> </div> <div class="viewcode-block" id="Select.limit"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Select.limit">[docs]</a> <span class="k">def</span> <span class="nf">limit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">limit</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">clone</span><span class="p">(</span><span class="n">limit</span><span class="o">=</span><span class="n">limit</span><span class="p">)</span> </div> <div class="viewcode-block" id="Select.lazyColumns"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Select.lazyColumns">[docs]</a> <span class="k">def</span> <span class="nf">lazyColumns</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">clone</span><span class="p">(</span><span class="n">lazyColumns</span><span class="o">=</span><span class="n">value</span><span class="p">)</span> </div> <div class="viewcode-block" id="Select.reversed"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Select.reversed">[docs]</a> <span class="k">def</span> <span class="nf">reversed</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">clone</span><span class="p">(</span><span class="nb">reversed</span><span class="o">=</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'reversed'</span><span class="p">,</span> <span class="kc">False</span><span class="p">))</span> </div> <div class="viewcode-block" id="Select.distinct"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Select.distinct">[docs]</a> <span class="k">def</span> <span class="nf">distinct</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">clone</span><span class="p">(</span><span class="n">distinct</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> </div> <div class="viewcode-block" id="Select.filter"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Select.filter">[docs]</a> <span class="k">def</span> <span class="nf">filter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filter_clause</span><span class="p">):</span> <span class="k">if</span> <span class="n">filter_clause</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="c1"># None doesn't filter anything, it's just a no-op:</span> <span class="k">return</span> <span class="bp">self</span> <span class="n">clause</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'clause'</span><span class="p">]</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">clause</span><span class="p">,</span> <span class="n">string_type</span><span class="p">):</span> <span class="n">clause</span> <span class="o">=</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="s1">'(</span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="n">clause</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">newClause</span><span class="p">(</span><span class="n">AND</span><span class="p">(</span><span class="n">clause</span><span class="p">,</span> <span class="n">filter_clause</span><span class="p">))</span> </div> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="n">select</span> <span class="o">=</span> <span class="s2">"SELECT"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'distinct'</span><span class="p">]:</span> <span class="n">select</span> <span class="o">+=</span> <span class="s2">" DISTINCT"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'distinctOn'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NoDefault</span><span class="p">:</span> <span class="n">select</span> <span class="o">+=</span> <span class="s2">" ON(</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">_str_or_sqlrepr</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'distinctOn'</span><span class="p">],</span> <span class="n">db</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'lazyColumns'</span><span class="p">]:</span> <span class="n">select</span> <span class="o">+=</span> <span class="s2">" </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">_str_or_sqlrepr</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'items'</span><span class="p">]])</span> <span class="k">else</span><span class="p">:</span> <span class="n">select</span> <span class="o">+=</span> <span class="s2">" </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">_str_or_sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'items'</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">db</span><span class="p">)</span> <span class="n">join</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">join_str</span> <span class="o">=</span> <span class="s1">''</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'join'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NoDefault</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'join'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="n">_join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'join'</span><span class="p">]</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">_join</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> <span class="n">join_str</span> <span class="o">=</span> <span class="s2">" "</span> <span class="o">+</span> <span class="n">_join</span> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">_join</span><span class="p">,</span> <span class="n">SQLJoin</span><span class="p">):</span> <span class="n">join</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_join</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">join</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">_join</span><span class="p">)</span> <span class="n">tables</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'staticTables'</span><span class="p">]:</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">SQLExpression</span><span class="p">):</span> <span class="n">x</span> <span class="o">=</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="n">tables</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="n">things</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">ops</span><span class="p">[</span><span class="s1">'items'</span><span class="p">])</span> <span class="o">+</span> <span class="n">join</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'clause'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NoDefault</span><span class="p">:</span> <span class="n">things</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">ops</span><span class="p">[</span><span class="s1">'clause'</span><span class="p">])</span> <span class="k">for</span> <span class="n">thing</span> <span class="ow">in</span> <span class="n">things</span><span class="p">:</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">thing</span><span class="p">,</span> <span class="n">SQLExpression</span><span class="p">):</span> <span class="n">tables</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">tablesUsedSet</span><span class="p">(</span><span class="n">thing</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">join</span><span class="p">:</span> <span class="n">t1</span> <span class="o">=</span> <span class="n">_str_or_sqlrepr</span><span class="p">(</span><span class="n">j</span><span class="o">.</span><span class="n">table1</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="k">if</span> <span class="n">t1</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span> <span class="n">tables</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">t1</span><span class="p">)</span> <span class="n">t2</span> <span class="o">=</span> <span class="n">_str_or_sqlrepr</span><span class="p">(</span><span class="n">j</span><span class="o">.</span><span class="n">table2</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="k">if</span> <span class="n">t2</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span> <span class="n">tables</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">t2</span><span class="p">)</span> <span class="k">if</span> <span class="n">tables</span><span class="p">:</span> <span class="n">select</span> <span class="o">+=</span> <span class="s2">" FROM </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">tables</span><span class="p">))</span> <span class="k">elif</span> <span class="n">join</span><span class="p">:</span> <span class="n">select</span> <span class="o">+=</span> <span class="s2">" FROM"</span> <span class="n">tablesYet</span> <span class="o">=</span> <span class="n">tables</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">join</span><span class="p">:</span> <span class="k">if</span> <span class="n">tablesYet</span> <span class="ow">and</span> <span class="n">j</span><span class="o">.</span><span class="n">table1</span><span class="p">:</span> <span class="n">sep</span> <span class="o">=</span> <span class="s2">", "</span> <span class="k">else</span><span class="p">:</span> <span class="n">sep</span> <span class="o">=</span> <span class="s2">" "</span> <span class="n">select</span> <span class="o">+=</span> <span class="n">sep</span> <span class="o">+</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="n">tablesYet</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">join_str</span><span class="p">:</span> <span class="n">select</span> <span class="o">+=</span> <span class="n">join_str</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'clause'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NoDefault</span><span class="p">:</span> <span class="n">select</span> <span class="o">+=</span> <span class="s2">" WHERE </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">_str_or_sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'clause'</span><span class="p">],</span> <span class="n">db</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'groupBy'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NoDefault</span><span class="p">:</span> <span class="n">groupBy</span> <span class="o">=</span> <span class="n">_str_or_sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'groupBy'</span><span class="p">],</span> <span class="n">db</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'groupBy'</span><span class="p">],</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span> <span class="n">groupBy</span> <span class="o">=</span> <span class="n">groupBy</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="c1"># Remove parens</span> <span class="n">select</span> <span class="o">+=</span> <span class="s2">" GROUP BY </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">groupBy</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'having'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NoDefault</span><span class="p">:</span> <span class="n">select</span> <span class="o">+=</span> <span class="s2">" HAVING </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">_str_or_sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'having'</span><span class="p">],</span> <span class="n">db</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'orderBy'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NoDefault</span> <span class="ow">and</span> \ <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'orderBy'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> <span class="n">orderBy</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'orderBy'</span><span class="p">]</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'reversed'</span><span class="p">]:</span> <span class="n">reverser</span> <span class="o">=</span> <span class="n">DESC</span> <span class="k">else</span><span class="p">:</span> <span class="k">def</span> <span class="nf">reverser</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">orderBy</span><span class="p">,</span> <span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)):</span> <span class="n">select</span> <span class="o">+=</span> <span class="s2">" ORDER BY </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> <span class="p">[</span><span class="n">_str_or_sqlrepr</span><span class="p">(</span><span class="n">reverser</span><span class="p">(</span><span class="n">_x</span><span class="p">),</span> <span class="n">db</span><span class="p">)</span> <span class="k">for</span> <span class="n">_x</span> <span class="ow">in</span> <span class="n">orderBy</span><span class="p">])</span> <span class="k">else</span><span class="p">:</span> <span class="n">select</span> <span class="o">+=</span> <span class="s2">" ORDER BY </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">_str_or_sqlrepr</span><span class="p">(</span> <span class="n">reverser</span><span class="p">(</span><span class="n">orderBy</span><span class="p">),</span> <span class="n">db</span><span class="p">)</span> <span class="n">start</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">ops</span><span class="p">[</span><span class="s1">'start'</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'end'</span><span class="p">]</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'limit'</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NoDefault</span><span class="p">:</span> <span class="n">end</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'limit'</span><span class="p">]</span> <span class="k">if</span> <span class="n">start</span> <span class="ow">or</span> <span class="n">end</span><span class="p">:</span> <span class="kn">from</span> <span class="nn">.dbconnection</span> <span class="k">import</span> <span class="n">dbConnectionForScheme</span> <span class="n">select</span> <span class="o">=</span> <span class="n">dbConnectionForScheme</span><span class="p">(</span><span class="n">db</span><span class="p">)</span><span class="o">.</span><span class="n">_queryAddLimitOffset</span><span class="p">(</span><span class="n">select</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'forUpdate'</span><span class="p">]:</span> <span class="n">select</span> <span class="o">+=</span> <span class="s2">" FOR UPDATE"</span> <span class="k">return</span> <span class="n">select</span> </div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">Select</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="Insert"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Insert">[docs]</a><span class="k">class</span> <span class="nc">Insert</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">valueList</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">values</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">template</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="o">=</span> <span class="n">template</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span> <span class="k">if</span> <span class="n">valueList</span><span class="p">:</span> <span class="k">if</span> <span class="n">values</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">"You may only give valueList *or* values"</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">valueList</span> <span class="o">=</span> <span class="n">valueList</span> <span class="k">else</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">valueList</span> <span class="o">=</span> <span class="p">[</span><span class="n">values</span><span class="p">]</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">valueList</span><span class="p">:</span> <span class="k">return</span> <span class="s1">''</span> <span class="n">insert</span> <span class="o">=</span> <span class="s2">"INSERT INTO </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="n">allowNonDict</span> <span class="o">=</span> <span class="kc">True</span> <span class="n">template</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="k">if</span> <span class="p">(</span><span class="n">template</span> <span class="ow">is</span> <span class="n">NoDefault</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">valueList</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">dict</span><span class="p">):</span> <span class="n">template</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">valueList</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span> <span class="n">allowNonDict</span> <span class="o">=</span> <span class="kc">False</span> <span class="k">if</span> <span class="n">template</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NoDefault</span><span class="p">:</span> <span class="n">insert</span> <span class="o">+=</span> <span class="s2">" (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">template</span><span class="p">)</span> <span class="n">insert</span> <span class="o">+=</span> <span class="s2">" VALUES "</span> <span class="n">listToJoin</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">listToJoin_app</span> <span class="o">=</span> <span class="n">listToJoin</span><span class="o">.</span><span class="n">append</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">valueList</span><span class="p">:</span> <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="nb">dict</span><span class="p">):</span> <span class="k">if</span> <span class="n">template</span> <span class="ow">is</span> <span class="n">NoDefault</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s2">"You can't mix non-dictionaries with dictionaries "</span> <span class="s2">"in an INSERT if you don't provide a template (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="nb">repr</span><span class="p">(</span><span class="n">value</span><span class="p">))</span> <span class="n">value</span> <span class="o">=</span> <span class="n">dictToList</span><span class="p">(</span><span class="n">template</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="k">elif</span> <span class="ow">not</span> <span class="n">allowNonDict</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s2">"You can't mix non-dictionaries with dictionaries "</span> <span class="s2">"in an INSERT if you don't provide a template (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="nb">repr</span><span class="p">(</span><span class="n">value</span><span class="p">))</span> <span class="n">listToJoin_app</span><span class="p">(</span><span class="s2">"(</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">sqlrepr</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">value</span><span class="p">]))</span> <span class="n">insert</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">insert</span><span class="p">,</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">listToJoin</span><span class="p">))</span> <span class="k">return</span> <span class="n">insert</span> </div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">Insert</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="dictToList"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.dictToList">[docs]</a><span class="k">def</span> <span class="nf">dictToList</span><span class="p">(</span><span class="n">template</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span> <span class="nb">list</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">template</span><span class="p">:</span> <span class="nb">list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">dict</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">dict</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="n">template</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s2">"Extra entries in dictionary that aren't asked for in template "</span> <span class="s2">"(template=</span><span class="si">%s</span><span class="s2">, dict=</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">template</span><span class="p">),</span> <span class="nb">repr</span><span class="p">(</span><span class="nb">dict</span><span class="p">)))</span> <span class="k">return</span> <span class="nb">list</span> </div> <div class="viewcode-block" id="Update"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Update">[docs]</a><span class="k">class</span> <span class="nc">Update</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">template</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">,</span> <span class="n">where</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span> <span class="o">=</span> <span class="n">values</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="o">=</span> <span class="n">template</span> <span class="bp">self</span><span class="o">.</span><span class="n">whereClause</span> <span class="o">=</span> <span class="n">where</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="n">update</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sqlName</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="p">)</span> <span class="n">update</span> <span class="o">+=</span> <span class="s2">" SET"</span> <span class="n">first</span> <span class="o">=</span> <span class="kc">True</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">template</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NoDefault</span><span class="p">:</span> <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="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="p">)):</span> <span class="k">if</span> <span class="n">first</span><span class="p">:</span> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span> <span class="k">else</span><span class="p">:</span> <span class="n">update</span> <span class="o">+=</span> <span class="s2">","</span> <span class="n">update</span> <span class="o">+=</span> <span class="s2">" </span><span class="si">%s</span><span class="s2">=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">template</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">db</span><span class="p">))</span> <span class="k">else</span><span class="p">:</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">items</span><span class="p">()):</span> <span class="k">if</span> <span class="n">first</span><span class="p">:</span> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span> <span class="k">else</span><span class="p">:</span> <span class="n">update</span> <span class="o">+=</span> <span class="s2">","</span> <span class="n">update</span> <span class="o">+=</span> <span class="s2">" </span><span class="si">%s</span><span class="s2">=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">whereClause</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">NoDefault</span><span class="p">:</span> <span class="n">update</span> <span class="o">+=</span> <span class="s2">" WHERE </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">_str_or_sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">whereClause</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="k">return</span> <span class="n">update</span> <div class="viewcode-block" id="Update.sqlName"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Update.sqlName">[docs]</a> <span class="k">def</span> <span class="nf">sqlName</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="s2">"UPDATE"</span> </div></div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">Update</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="Delete"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Delete">[docs]</a><span class="k">class</span> <span class="nc">Delete</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="sd">"""To be safe, this will signal an error if there is no where clause,</span> <span class="sd"> unless you pass in where=None to the constructor."""</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">,</span> <span class="n">where</span><span class="o">=</span><span class="n">NoDefault</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="o">=</span> <span class="n">table</span> <span class="k">if</span> <span class="n">where</span> <span class="ow">is</span> <span class="n">NoDefault</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s2">"You must give a where clause or pass in None "</span> <span class="s2">"to indicate no where clause"</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">whereClause</span> <span class="o">=</span> <span class="n">where</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="n">whereClause</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">whereClause</span> <span class="k">if</span> <span class="n">whereClause</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="k">return</span> <span class="s2">"DELETE FROM </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">table</span> <span class="n">whereClause</span> <span class="o">=</span> <span class="n">_str_or_sqlrepr</span><span class="p">(</span><span class="n">whereClause</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="k">return</span> <span class="s2">"DELETE FROM </span><span class="si">%s</span><span class="s2"> WHERE </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table</span><span class="p">,</span> <span class="n">whereClause</span><span class="p">)</span> </div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">Delete</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="Replace"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Replace">[docs]</a><span class="k">class</span> <span class="nc">Replace</span><span class="p">(</span><span class="n">Update</span><span class="p">):</span> <div class="viewcode-block" id="Replace.sqlName"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Replace.sqlName">[docs]</a> <span class="k">def</span> <span class="nf">sqlName</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="s2">"REPLACE"</span> </div></div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">Replace</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <span class="c1">########################################</span> <span class="c1"># SQL Builtins</span> <span class="c1">########################################</span> <div class="viewcode-block" id="DESC"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.DESC">[docs]</a><span class="k">class</span> <span class="nc">DESC</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">expr</span> <span class="o">=</span> <span class="n">expr</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span> <span class="n">DESC</span><span class="p">):</span> <span class="k">return</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="k">return</span> <span class="s1">'</span><span class="si">%s</span><span class="s1"> DESC'</span> <span class="o">%</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> </div> <div class="viewcode-block" id="AND"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.AND">[docs]</a><span class="k">def</span> <span class="nf">AND</span><span class="p">(</span><span class="o">*</span><span class="n">ops</span><span class="p">):</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">ops</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="n">op1</span> <span class="o">=</span> <span class="n">ops</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="n">ops</span> <span class="o">=</span> <span class="n">ops</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="n">ops</span><span class="p">:</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"AND"</span><span class="p">,</span> <span class="n">op1</span><span class="p">,</span> <span class="n">AND</span><span class="p">(</span><span class="o">*</span><span class="n">ops</span><span class="p">))</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">op1</span> </div> <div class="viewcode-block" id="OR"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.OR">[docs]</a><span class="k">def</span> <span class="nf">OR</span><span class="p">(</span><span class="o">*</span><span class="n">ops</span><span class="p">):</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">ops</span><span class="p">:</span> <span class="k">return</span> <span class="kc">None</span> <span class="n">op1</span> <span class="o">=</span> <span class="n">ops</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="n">ops</span> <span class="o">=</span> <span class="n">ops</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="n">ops</span><span class="p">:</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"OR"</span><span class="p">,</span> <span class="n">op1</span><span class="p">,</span> <span class="n">OR</span><span class="p">(</span><span class="o">*</span><span class="n">ops</span><span class="p">))</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">op1</span> </div> <div class="viewcode-block" id="NOT"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.NOT">[docs]</a><span class="k">def</span> <span class="nf">NOT</span><span class="p">(</span><span class="n">op</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLPrefix</span><span class="p">(</span><span class="s2">"NOT"</span><span class="p">,</span> <span class="n">op</span><span class="p">)</span> </div> <span class="k">def</span> <span class="nf">_IN</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"IN"</span><span class="p">,</span> <span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <div class="viewcode-block" id="IN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.IN">[docs]</a><span class="k">def</span> <span class="nf">IN</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> <span class="kn">from</span> <span class="nn">.sresults</span> <span class="k">import</span> <span class="n">SelectResults</span> <span class="c1"># Import here to avoid circular import</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="n">SelectResults</span><span class="p">):</span> <span class="n">query</span> <span class="o">=</span> <span class="nb">list</span><span class="o">.</span><span class="n">queryForSelect</span><span class="p">()</span> <span class="n">query</span><span class="o">.</span><span class="n">ops</span><span class="p">[</span><span class="s1">'items'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nb">list</span><span class="o">.</span><span class="n">sourceClass</span><span class="o">.</span><span class="n">q</span><span class="o">.</span><span class="n">id</span><span class="p">]</span> <span class="nb">list</span> <span class="o">=</span> <span class="n">query</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="n">Select</span><span class="p">):</span> <span class="k">return</span> <span class="n">INSubquery</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">_IN</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> </div> <div class="viewcode-block" id="NOTIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.NOTIN">[docs]</a><span class="k">def</span> <span class="nf">NOTIN</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="nb">list</span><span class="p">,</span> <span class="n">Select</span><span class="p">):</span> <span class="k">return</span> <span class="n">NOTINSubquery</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="n">NOT</span><span class="p">(</span><span class="n">_IN</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">))</span> </div> <div class="viewcode-block" id="STARTSWITH"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.STARTSWITH">[docs]</a><span class="k">def</span> <span class="nf">STARTSWITH</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">pattern</span><span class="p">):</span> <span class="k">return</span> <span class="n">LIKE</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">_LikeQuoted</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'%'</span><span class="p">,</span> <span class="n">escape</span><span class="o">=</span><span class="s1">'</span><span class="se">\\</span><span class="s1">'</span><span class="p">)</span> </div> <div class="viewcode-block" id="ENDSWITH"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.ENDSWITH">[docs]</a><span class="k">def</span> <span class="nf">ENDSWITH</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">pattern</span><span class="p">):</span> <span class="k">return</span> <span class="n">LIKE</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="s1">'%'</span> <span class="o">+</span> <span class="n">_LikeQuoted</span><span class="p">(</span><span class="n">pattern</span><span class="p">),</span> <span class="n">escape</span><span class="o">=</span><span class="s1">'</span><span class="se">\\</span><span class="s1">'</span><span class="p">)</span> </div> <div class="viewcode-block" id="CONTAINSSTRING"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.CONTAINSSTRING">[docs]</a><span class="k">def</span> <span class="nf">CONTAINSSTRING</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">pattern</span><span class="p">):</span> <span class="k">return</span> <span class="n">LIKE</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="s1">'%'</span> <span class="o">+</span> <span class="n">_LikeQuoted</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'%'</span><span class="p">,</span> <span class="n">escape</span><span class="o">=</span><span class="s1">'</span><span class="se">\\</span><span class="s1">'</span><span class="p">)</span> </div> <div class="viewcode-block" id="ISNULL"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.ISNULL">[docs]</a><span class="k">def</span> <span class="nf">ISNULL</span><span class="p">(</span><span class="n">expr</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"IS"</span><span class="p">,</span> <span class="n">expr</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> </div> <div class="viewcode-block" id="ISNOTNULL"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.ISNOTNULL">[docs]</a><span class="k">def</span> <span class="nf">ISNOTNULL</span><span class="p">(</span><span class="n">expr</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLOp</span><span class="p">(</span><span class="s2">"IS NOT"</span><span class="p">,</span> <span class="n">expr</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> </div> <div class="viewcode-block" id="ColumnAS"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.ColumnAS">[docs]</a><span class="k">class</span> <span class="nc">ColumnAS</span><span class="p">(</span><span class="n">SQLOp</span><span class="p">):</span> <span class="sd">''' Just like SQLOp('AS', expr, name) except without the parentheses '''</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">string_type</span><span class="p">):</span> <span class="n">name</span> <span class="o">=</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="n">SQLOp</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">'AS'</span><span class="p">,</span> <span class="n">expr</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr1</span><span class="p">,</span> <span class="n">db</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">op</span><span class="p">,</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr2</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> </div> <span class="k">class</span> <span class="nc">_LikeQuoted</span><span class="p">:</span> <span class="c1"># It assumes prefix and postfix are strings; usually just a percent sign.</span> <span class="c1"># @@: I'm not sure what the quoting rules really are for all the</span> <span class="c1"># databases</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">expr</span> <span class="o">=</span> <span class="n">expr</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span> <span class="o">=</span> <span class="s1">''</span> <span class="bp">self</span><span class="o">.</span><span class="n">postfix</span> <span class="o">=</span> <span class="s1">''</span> <span class="k">def</span> <span class="nf">__radd__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span> <span class="o">=</span> <span class="n">s</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span> <span class="k">return</span> <span class="bp">self</span> <span class="k">def</span> <span class="nf">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">postfix</span> <span class="o">+=</span> <span class="n">s</span> <span class="k">return</span> <span class="bp">self</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="n">s</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expr</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">SQLExpression</span><span class="p">):</span> <span class="n">values</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="p">:</span> <span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">quote_str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> <span class="n">s</span> <span class="o">=</span> <span class="n">_quote_like_special</span><span class="p">(</span><span class="n">sqlrepr</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">db</span><span class="p">),</span> <span class="n">db</span><span class="p">)</span> <span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">postfix</span><span class="p">:</span> <span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">quote_str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">postfix</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> <span class="k">if</span> <span class="n">db</span> <span class="o">==</span> <span class="s2">"mysql"</span><span class="p">:</span> <span class="k">return</span> <span class="s2">"CONCAT(</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">values</span><span class="p">)</span> <span class="k">elif</span> <span class="n">db</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"mssql"</span><span class="p">,</span> <span class="s2">"sybase"</span><span class="p">):</span> <span class="k">return</span> <span class="s2">" + "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">values</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="s2">" || "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">values</span><span class="p">)</span> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">string_type</span><span class="p">):</span> <span class="n">s</span> <span class="o">=</span> <span class="n">_quote_like_special</span><span class="p">(</span><span class="n">unquote_str</span><span class="p">(</span><span class="n">sqlrepr</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">db</span><span class="p">)),</span> <span class="n">db</span><span class="p">)</span> <span class="k">return</span> <span class="n">quote_str</span><span class="p">(</span><span class="s2">"</span><span class="si">%s%s%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">prefix</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">postfix</span><span class="p">),</span> <span class="n">db</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s2">"expected str, unicode or SQLExpression, got </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">type</span><span class="p">(</span><span class="n">s</span><span class="p">))</span> <span class="k">def</span> <span class="nf">_quote_like_special</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">if</span> <span class="n">db</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'postgres'</span><span class="p">,</span> <span class="s1">'rdbhost'</span><span class="p">):</span> <span class="n">escape</span> <span class="o">=</span> <span class="sa">r</span><span class="s1">'</span><span class="se">\\</span><span class="s1">'</span> <span class="k">else</span><span class="p">:</span> <span class="n">escape</span> <span class="o">=</span> <span class="s1">'</span><span class="se">\\</span><span class="s1">'</span> <span class="n">s</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'</span><span class="se">\\</span><span class="s1">'</span><span class="p">,</span> <span class="sa">r</span><span class="s1">'</span><span class="se">\\</span><span class="s1">'</span><span class="p">)</span><span class="o">.</span>\ <span class="n">replace</span><span class="p">(</span><span class="s1">'%'</span><span class="p">,</span> <span class="n">escape</span> <span class="o">+</span> <span class="s1">'%'</span><span class="p">)</span><span class="o">.</span>\ <span class="n">replace</span><span class="p">(</span><span class="s1">'_'</span><span class="p">,</span> <span class="n">escape</span> <span class="o">+</span> <span class="s1">'_'</span><span class="p">)</span> <span class="k">return</span> <span class="n">s</span> <div class="viewcode-block" id="CONCAT"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.CONCAT">[docs]</a><span class="k">class</span> <span class="nc">CONCAT</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">expressions</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">sqlrepr</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span> <span class="k">if</span> <span class="n">db</span> <span class="o">==</span> <span class="s2">"mysql"</span><span class="p">:</span> <span class="k">return</span> <span class="s2">"CONCAT(</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">values</span><span class="p">)</span> <span class="k">elif</span> <span class="n">db</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"mssql"</span><span class="p">,</span> <span class="s2">"sybase"</span><span class="p">):</span> <span class="k">return</span> <span class="s2">" + "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">values</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="s2">" || "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">values</span><span class="p">)</span> </div> <span class="c1">########################################</span> <span class="c1"># SQL JOINs</span> <span class="c1">########################################</span> <div class="viewcode-block" id="SQLJoin"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLJoin">[docs]</a><span class="k">class</span> <span class="nc">SQLJoin</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">op</span><span class="o">=</span><span class="s1">','</span><span class="p">):</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="s1">'sqlmeta'</span><span class="p">):</span> <span class="n">table1</span> <span class="o">=</span> <span class="n">table1</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">table</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">table2</span><span class="p">,</span> <span class="s1">'sqlmeta'</span><span class="p">):</span> <span class="n">table2</span> <span class="o">=</span> <span class="n">table2</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">table</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> <span class="n">table1</span> <span class="o">=</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="n">table1</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table2</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> <span class="n">table2</span> <span class="o">=</span> <span class="n">SQLConstant</span><span class="p">(</span><span class="n">table2</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">table1</span> <span class="o">=</span> <span class="n">table1</span> <span class="bp">self</span><span class="o">.</span><span class="n">table2</span> <span class="o">=</span> <span class="n">table2</span> <span class="bp">self</span><span class="o">.</span><span class="n">op</span> <span class="o">=</span> <span class="n">op</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">table1</span><span class="p">:</span> <span class="k">return</span> <span class="s2">"</span><span class="si">%s%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table1</span><span class="p">,</span> <span class="n">db</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">op</span><span class="p">,</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table2</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">op</span><span class="p">,</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table2</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> </div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">SQLJoin</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="JOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.JOIN">[docs]</a><span class="k">def</span> <span class="nf">JOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="INNERJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.INNERJOIN">[docs]</a><span class="k">def</span> <span class="nf">INNERJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" INNER JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="CROSSJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.CROSSJOIN">[docs]</a><span class="k">def</span> <span class="nf">CROSSJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" CROSS JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="STRAIGHTJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.STRAIGHTJOIN">[docs]</a><span class="k">def</span> <span class="nf">STRAIGHTJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" STRAIGHT JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="LEFTJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.LEFTJOIN">[docs]</a><span class="k">def</span> <span class="nf">LEFTJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" LEFT JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="LEFTOUTERJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.LEFTOUTERJOIN">[docs]</a><span class="k">def</span> <span class="nf">LEFTOUTERJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" LEFT OUTER JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="NATURALJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.NATURALJOIN">[docs]</a><span class="k">def</span> <span class="nf">NATURALJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" NATURAL JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="NATURALLEFTJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.NATURALLEFTJOIN">[docs]</a><span class="k">def</span> <span class="nf">NATURALLEFTJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" NATURAL LEFT JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="NATURALLEFTOUTERJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.NATURALLEFTOUTERJOIN">[docs]</a><span class="k">def</span> <span class="nf">NATURALLEFTOUTERJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" NATURAL LEFT OUTER JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="RIGHTJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.RIGHTJOIN">[docs]</a><span class="k">def</span> <span class="nf">RIGHTJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" RIGHT JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="RIGHTOUTERJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.RIGHTOUTERJOIN">[docs]</a><span class="k">def</span> <span class="nf">RIGHTOUTERJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" RIGHT OUTER JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="NATURALRIGHTJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.NATURALRIGHTJOIN">[docs]</a><span class="k">def</span> <span class="nf">NATURALRIGHTJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" NATURAL RIGHT JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="NATURALRIGHTOUTERJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.NATURALRIGHTOUTERJOIN">[docs]</a><span class="k">def</span> <span class="nf">NATURALRIGHTOUTERJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" NATURAL RIGHT OUTER JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="FULLJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.FULLJOIN">[docs]</a><span class="k">def</span> <span class="nf">FULLJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" FULL JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="FULLOUTERJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.FULLOUTERJOIN">[docs]</a><span class="k">def</span> <span class="nf">FULLOUTERJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" FULL OUTER JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="NATURALFULLJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.NATURALFULLJOIN">[docs]</a><span class="k">def</span> <span class="nf">NATURALFULLJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" NATURAL FULL JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="NATURALFULLOUTERJOIN"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.NATURALFULLOUTERJOIN">[docs]</a><span class="k">def</span> <span class="nf">NATURALFULLOUTERJOIN</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoin</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">" NATURAL FULL OUTER JOIN"</span><span class="p">)</span> </div> <div class="viewcode-block" id="SQLJoinConditional"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLJoinConditional">[docs]</a><span class="k">class</span> <span class="nc">SQLJoinConditional</span><span class="p">(</span><span class="n">SQLJoin</span><span class="p">):</span> <span class="sd">"""Conditional JOIN"""</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">op</span><span class="p">,</span> <span class="n">on_condition</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">using_columns</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="sd">"""For condition you must give on_condition or using_columns</span> <span class="sd"> but not both</span> <span class="sd"> on_condition can be a string or SQLExpression, for example</span> <span class="sd"> Table1.q.col1 == Table2.q.col2</span> <span class="sd"> using_columns can be a string or a list of columns, e.g.</span> <span class="sd"> (Table1.q.col1, Table2.q.col2)</span> <span class="sd"> """</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">on_condition</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">using_columns</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">"You must give ON condition or USING columns"</span><span class="p">)</span> <span class="k">if</span> <span class="n">on_condition</span> <span class="ow">and</span> <span class="n">using_columns</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s2">"You must give ON condition or USING columns but not both"</span><span class="p">)</span> <span class="n">SQLJoin</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">op</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_condition</span> <span class="o">=</span> <span class="n">on_condition</span> <span class="bp">self</span><span class="o">.</span><span class="n">using_columns</span> <span class="o">=</span> <span class="n">using_columns</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_condition</span><span class="p">:</span> <span class="n">on_condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_condition</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">on_condition</span><span class="p">,</span> <span class="s2">"__sqlrepr__"</span><span class="p">):</span> <span class="n">on_condition</span> <span class="o">=</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="n">on_condition</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="n">join</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> ON </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">op</span><span class="p">,</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table2</span><span class="p">,</span> <span class="n">db</span><span class="p">),</span> <span class="n">on_condition</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">table1</span><span class="p">:</span> <span class="n">join</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table1</span><span class="p">,</span> <span class="n">db</span><span class="p">),</span> <span class="n">join</span><span class="p">)</span> <span class="k">return</span> <span class="n">join</span> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">using_columns</span><span class="p">:</span> <span class="n">using_columns</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">using_columns</span><span class="p">:</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="s2">"__sqlrepr__"</span><span class="p">):</span> <span class="n">col</span> <span class="o">=</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="n">col</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="n">using_columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">col</span><span class="p">)</span> <span class="n">using_columns</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">using_columns</span><span class="p">)</span> <span class="n">join</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> USING (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">op</span><span class="p">,</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table2</span><span class="p">,</span> <span class="n">db</span><span class="p">),</span> <span class="n">using_columns</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">table1</span><span class="p">:</span> <span class="n">join</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">table1</span><span class="p">,</span> <span class="n">db</span><span class="p">),</span> <span class="n">join</span><span class="p">)</span> <span class="k">return</span> <span class="n">join</span> <span class="k">else</span><span class="p">:</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="s2">"Impossible error"</span> </div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">SQLJoinConditional</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="INNERJOINConditional"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.INNERJOINConditional">[docs]</a><span class="k">def</span> <span class="nf">INNERJOINConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">using_columns</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"INNER JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <div class="viewcode-block" id="LEFTJOINConditional"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.LEFTJOINConditional">[docs]</a><span class="k">def</span> <span class="nf">LEFTJOINConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">using_columns</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"LEFT JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <div class="viewcode-block" id="LEFTOUTERJOINConditional"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.LEFTOUTERJOINConditional">[docs]</a><span class="k">def</span> <span class="nf">LEFTOUTERJOINConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">using_columns</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"LEFT OUTER JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <div class="viewcode-block" id="RIGHTJOINConditional"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.RIGHTJOINConditional">[docs]</a><span class="k">def</span> <span class="nf">RIGHTJOINConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">using_columns</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"RIGHT JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <div class="viewcode-block" id="RIGHTOUTERJOINConditional"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.RIGHTOUTERJOINConditional">[docs]</a><span class="k">def</span> <span class="nf">RIGHTOUTERJOINConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">using_columns</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"RIGHT OUTER JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <div class="viewcode-block" id="FULLJOINConditional"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.FULLJOINConditional">[docs]</a><span class="k">def</span> <span class="nf">FULLJOINConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">using_columns</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"FULL JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <div class="viewcode-block" id="FULLOUTERJOINConditional"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.FULLOUTERJOINConditional">[docs]</a><span class="k">def</span> <span class="nf">FULLOUTERJOINConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">using_columns</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinConditional</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"FULL OUTER JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <div class="viewcode-block" id="SQLJoinOn"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLJoinOn">[docs]</a><span class="k">class</span> <span class="nc">SQLJoinOn</span><span class="p">(</span><span class="n">SQLJoinConditional</span><span class="p">):</span> <span class="sd">"""Conditional JOIN ON"""</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">op</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">):</span> <span class="n">SQLJoinConditional</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">op</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">)</span> </div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">SQLJoinOn</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="SQLJoinUsing"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SQLJoinUsing">[docs]</a><span class="k">class</span> <span class="nc">SQLJoinUsing</span><span class="p">(</span><span class="n">SQLJoinConditional</span><span class="p">):</span> <span class="sd">"""Conditional JOIN USING"""</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">op</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">):</span> <span class="n">SQLJoinConditional</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">op</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <span class="n">registerConverter</span><span class="p">(</span><span class="n">SQLJoinUsing</span><span class="p">,</span> <span class="n">SQLExprConverter</span><span class="p">)</span> <div class="viewcode-block" id="INNERJOINOn"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.INNERJOINOn">[docs]</a><span class="k">def</span> <span class="nf">INNERJOINOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"INNER JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">)</span> </div> <div class="viewcode-block" id="LEFTJOINOn"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.LEFTJOINOn">[docs]</a><span class="k">def</span> <span class="nf">LEFTJOINOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"LEFT JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">)</span> </div> <div class="viewcode-block" id="LEFTOUTERJOINOn"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.LEFTOUTERJOINOn">[docs]</a><span class="k">def</span> <span class="nf">LEFTOUTERJOINOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"LEFT OUTER JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">)</span> </div> <div class="viewcode-block" id="RIGHTJOINOn"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.RIGHTJOINOn">[docs]</a><span class="k">def</span> <span class="nf">RIGHTJOINOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"RIGHT JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">)</span> </div> <div class="viewcode-block" id="RIGHTOUTERJOINOn"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.RIGHTOUTERJOINOn">[docs]</a><span class="k">def</span> <span class="nf">RIGHTOUTERJOINOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"RIGHT OUTER JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">)</span> </div> <div class="viewcode-block" id="FULLJOINOn"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.FULLJOINOn">[docs]</a><span class="k">def</span> <span class="nf">FULLJOINOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"FULL JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">)</span> </div> <div class="viewcode-block" id="FULLOUTERJOINOn"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.FULLOUTERJOINOn">[docs]</a><span class="k">def</span> <span class="nf">FULLOUTERJOINOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinOn</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"FULL OUTER JOIN"</span><span class="p">,</span> <span class="n">on_condition</span><span class="p">)</span> </div> <div class="viewcode-block" id="INNERJOINUsing"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.INNERJOINUsing">[docs]</a><span class="k">def</span> <span class="nf">INNERJOINUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"INNER JOIN"</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <div class="viewcode-block" id="LEFTJOINUsing"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.LEFTJOINUsing">[docs]</a><span class="k">def</span> <span class="nf">LEFTJOINUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"LEFT JOIN"</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <div class="viewcode-block" id="LEFTOUTERJOINUsing"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.LEFTOUTERJOINUsing">[docs]</a><span class="k">def</span> <span class="nf">LEFTOUTERJOINUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"LEFT OUTER JOIN"</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <div class="viewcode-block" id="RIGHTJOINUsing"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.RIGHTJOINUsing">[docs]</a><span class="k">def</span> <span class="nf">RIGHTJOINUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"RIGHT JOIN"</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <div class="viewcode-block" id="RIGHTOUTERJOINUsing"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.RIGHTOUTERJOINUsing">[docs]</a><span class="k">def</span> <span class="nf">RIGHTOUTERJOINUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"RIGHT OUTER JOIN"</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <div class="viewcode-block" id="FULLJOINUsing"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.FULLJOINUsing">[docs]</a><span class="k">def</span> <span class="nf">FULLJOINUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"FULL JOIN"</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <div class="viewcode-block" id="FULLOUTERJOINUsing"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.FULLOUTERJOINUsing">[docs]</a><span class="k">def</span> <span class="nf">FULLOUTERJOINUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">):</span> <span class="k">return</span> <span class="n">SQLJoinUsing</span><span class="p">(</span><span class="n">table1</span><span class="p">,</span> <span class="n">table2</span><span class="p">,</span> <span class="s2">"FULL OUTER JOIN"</span><span class="p">,</span> <span class="n">using_columns</span><span class="p">)</span> </div> <span class="c1">########################################</span> <span class="c1"># Subqueries (subselects)</span> <span class="c1">########################################</span> <div class="viewcode-block" id="OuterField"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.OuterField">[docs]</a><span class="k">class</span> <span class="nc">OuterField</span><span class="p">(</span><span class="n">SQLObjectField</span><span class="p">):</span> <div class="viewcode-block" id="OuterField.tablesUsedImmediate"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.OuterField.tablesUsedImmediate">[docs]</a> <span class="k">def</span> <span class="nf">tablesUsedImmediate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="p">[]</span> </div></div> <div class="viewcode-block" id="OuterTable"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.OuterTable">[docs]</a><span class="k">class</span> <span class="nc">OuterTable</span><span class="p">(</span><span class="n">SQLObjectTable</span><span class="p">):</span> <span class="n">FieldClass</span> <span class="o">=</span> <span class="n">OuterField</span> </div> <div class="viewcode-block" id="Outer"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Outer">[docs]</a><span class="k">class</span> <span class="nc">Outer</span><span class="p">:</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">q</span> <span class="o">=</span> <span class="n">OuterTable</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> </div> <div class="viewcode-block" id="LIKE"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.LIKE">[docs]</a><span class="k">class</span> <span class="nc">LIKE</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="n">op</span> <span class="o">=</span> <span class="s2">"LIKE"</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expr</span><span class="p">,</span> <span class="n">string</span><span class="p">,</span> <span class="n">escape</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">expr</span> <span class="o">=</span> <span class="n">expr</span> <span class="bp">self</span><span class="o">.</span><span class="n">string</span> <span class="o">=</span> <span class="n">string</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape</span> <span class="o">=</span> <span class="n">escape</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="n">escape</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">escape</span> <span class="n">like</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span> <span class="n">db</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">op</span><span class="p">,</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">string</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> <span class="k">if</span> <span class="n">escape</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="k">return</span> <span class="s2">"(</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">like</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="s2">"(</span><span class="si">%s</span><span class="s2"> ESCAPE </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">like</span><span class="p">,</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="n">escape</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> <div class="viewcode-block" id="LIKE.components"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.LIKE.components">[docs]</a> <span class="k">def</span> <span class="nf">components</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">string</span><span class="p">]</span> </div> <div class="viewcode-block" id="LIKE.execute"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.LIKE.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">executor</span><span class="p">):</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">'_regex'</span><span class="p">):</span> <span class="c1"># @@: Crude, not entirely accurate</span> <span class="n">dest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">string</span> <span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"</span><span class="si">%%</span><span class="s2">"</span><span class="p">,</span> <span class="s2">"</span><span class="se">\001</span><span class="s2">"</span><span class="p">)</span> <span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"*"</span><span class="p">,</span> <span class="s2">"</span><span class="se">\002</span><span class="s2">"</span><span class="p">)</span> <span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"%"</span><span class="p">,</span> <span class="s2">"*"</span><span class="p">)</span> <span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"</span><span class="se">\001</span><span class="s2">"</span><span class="p">,</span> <span class="s2">"%"</span><span class="p">)</span> <span class="n">dest</span> <span class="o">=</span> <span class="n">dest</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"</span><span class="se">\002</span><span class="s2">"</span><span class="p">,</span> <span class="s2">"[*]"</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_regex</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">fnmatch</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="n">dest</span><span class="p">),</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_regex</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">execute</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span> <span class="n">executor</span><span class="p">))</span> </div></div> <div class="viewcode-block" id="RLIKE"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.RLIKE">[docs]</a><span class="k">class</span> <span class="nc">RLIKE</span><span class="p">(</span><span class="n">LIKE</span><span class="p">):</span> <span class="n">op</span> <span class="o">=</span> <span class="s2">"RLIKE"</span> <span class="n">op_db</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'firebird'</span><span class="p">:</span> <span class="s1">'RLIKE'</span><span class="p">,</span> <span class="s1">'maxdb'</span><span class="p">:</span> <span class="s1">'RLIKE'</span><span class="p">,</span> <span class="s1">'mysql'</span><span class="p">:</span> <span class="s1">'RLIKE'</span><span class="p">,</span> <span class="s1">'postgres'</span><span class="p">:</span> <span class="s1">'~'</span><span class="p">,</span> <span class="s1">'rdbhost'</span><span class="p">:</span> <span class="s1">'~'</span><span class="p">,</span> <span class="s1">'sqlite'</span><span class="p">:</span> <span class="s1">'REGEXP'</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">_get_op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">op_db</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">db</span><span class="p">,</span> <span class="s1">'LIKE'</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="s2">"(</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">))"</span> <span class="o">%</span> <span class="p">(</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expr</span><span class="p">,</span> <span class="n">db</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_op</span><span class="p">(</span><span class="n">db</span><span class="p">),</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">string</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="p">)</span> <div class="viewcode-block" id="RLIKE.execute"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.RLIKE.execute">[docs]</a> <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">executor</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_op</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span> <span class="k">return</span> <span class="n">LIKE</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">executor</span><span class="p">)</span> </div></div> <div class="viewcode-block" id="INSubquery"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.INSubquery">[docs]</a><span class="k">class</span> <span class="nc">INSubquery</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="n">op</span> <span class="o">=</span> <span class="s2">"IN"</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">,</span> <span class="n">subquery</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">item</span> <span class="o">=</span> <span class="n">item</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery</span> <span class="o">=</span> <span class="n">subquery</span> <div class="viewcode-block" id="INSubquery.components"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.INSubquery.components">[docs]</a> <span class="k">def</span> <span class="nf">components</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">item</span><span class="p">]</span> </div> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">item</span><span class="p">,</span> <span class="n">db</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">op</span><span class="p">,</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subquery</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> </div> <div class="viewcode-block" id="NOTINSubquery"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.NOTINSubquery">[docs]</a><span class="k">class</span> <span class="nc">NOTINSubquery</span><span class="p">(</span><span class="n">INSubquery</span><span class="p">):</span> <span class="n">op</span> <span class="o">=</span> <span class="s2">"NOT IN"</span> </div> <div class="viewcode-block" id="Subquery"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.Subquery">[docs]</a><span class="k">class</span> <span class="nc">Subquery</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">op</span><span class="p">,</span> <span class="n">subquery</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">op</span> <span class="o">=</span> <span class="n">op</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery</span> <span class="o">=</span> <span class="n">subquery</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">op</span><span class="p">,</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subquery</span><span class="p">,</span> <span class="n">db</span><span class="p">))</span> </div> <div class="viewcode-block" id="EXISTS"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.EXISTS">[docs]</a><span class="k">def</span> <span class="nf">EXISTS</span><span class="p">(</span><span class="n">subquery</span><span class="p">):</span> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span><span class="s2">"EXISTS"</span><span class="p">,</span> <span class="n">subquery</span><span class="p">)</span> </div> <div class="viewcode-block" id="NOTEXISTS"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.NOTEXISTS">[docs]</a><span class="k">def</span> <span class="nf">NOTEXISTS</span><span class="p">(</span><span class="n">subquery</span><span class="p">):</span> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span><span class="s2">"NOT EXISTS"</span><span class="p">,</span> <span class="n">subquery</span><span class="p">)</span> </div> <div class="viewcode-block" id="SOME"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.SOME">[docs]</a><span class="k">def</span> <span class="nf">SOME</span><span class="p">(</span><span class="n">subquery</span><span class="p">):</span> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span><span class="s2">"SOME"</span><span class="p">,</span> <span class="n">subquery</span><span class="p">)</span> </div> <div class="viewcode-block" id="ANY"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.ANY">[docs]</a><span class="k">def</span> <span class="nf">ANY</span><span class="p">(</span><span class="n">subquery</span><span class="p">):</span> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span><span class="s2">"ANY"</span><span class="p">,</span> <span class="n">subquery</span><span class="p">)</span> </div> <div class="viewcode-block" id="ALL"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.ALL">[docs]</a><span class="k">def</span> <span class="nf">ALL</span><span class="p">(</span><span class="n">subquery</span><span class="p">):</span> <span class="k">return</span> <span class="n">Subquery</span><span class="p">(</span><span class="s2">"ALL"</span><span class="p">,</span> <span class="n">subquery</span><span class="p">)</span> </div> <span class="c1">####</span> <div class="viewcode-block" id="ImportProxyField"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.ImportProxyField">[docs]</a><span class="k">class</span> <span class="nc">ImportProxyField</span><span class="p">(</span><span class="n">SQLObjectField</span><span class="p">):</span> <div class="viewcode-block" id="ImportProxyField.tablesUsedImmediate"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.ImportProxyField.tablesUsedImmediate">[docs]</a> <span class="k">def</span> <span class="nf">tablesUsedImmediate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</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">tableName</span><span class="p">)]</span> </div></div> <div class="viewcode-block" id="ImportProxy"><a class="viewcode-back" href="../../api/sqlobject.sqlbuilder.html#sqlobject.include.tests.test_hashcol.ImportProxy">[docs]</a><span class="k">class</span> <span class="nc">ImportProxy</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="sd">'''Class to be used in column definitions that rely on other tables that might</span> <span class="sd"> not yet be in a classregistry.</span> <span class="sd"> '''</span> <span class="n">FieldClass</span> <span class="o">=</span> <span class="n">ImportProxyField</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">clsName</span><span class="p">,</span> <span class="n">registry</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">tableName</span> <span class="o">=</span> <span class="n">_DelayClass</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">clsName</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">sqlmeta</span> <span class="o">=</span> <span class="n">_Delay_proxy</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="n">_DelayClass</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">clsName</span><span class="p">))</span> <span class="bp">self</span><span class="o">.</span><span class="n">q</span> <span class="o">=</span> <span class="bp">self</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span> <span class="o">=</span> <span class="kc">None</span> <span class="n">classregistry</span><span class="o">.</span><span class="n">registry</span><span class="p">(</span><span class="n">registry</span><span class="p">)</span><span class="o">.</span><span class="n">addClassCallback</span><span class="p">(</span> <span class="n">clsName</span><span class="p">,</span> <span class="k">lambda</span> <span class="n">foreign</span><span class="p">,</span> <span class="n">me</span><span class="p">:</span> <span class="nb">setattr</span><span class="p">(</span><span class="n">me</span><span class="p">,</span> <span class="s1">'soClass'</span><span class="p">,</span> <span class="n">foreign</span><span class="p">),</span> <span class="bp">self</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__nonzero__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="kc">True</span> <span class="fm">__bool__</span> <span class="o">=</span> <span class="n">__nonzero__</span> <span class="k">def</span> <span class="nf">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">soClass</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="k">return</span> <span class="n">_Delay</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span> <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="n">q</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span> </div> <span class="k">class</span> <span class="nc">_Delay</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">proxy</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">attr</span> <span class="o">=</span> <span class="n">attr</span> <span class="bp">self</span><span class="o">.</span><span class="n">proxy</span> <span class="o">=</span> <span class="n">proxy</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">soClass</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> <span class="k">return</span> <span class="s1">'_DELAYED_'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">attr</span> <span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resolve</span><span class="p">()</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">SQLExpression</span><span class="p">):</span> <span class="n">val</span> <span class="o">=</span> <span class="n">sqlrepr</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">db</span><span class="p">)</span> <span class="k">return</span> <span class="n">val</span> <span class="k">def</span> <span class="nf">tablesUsedImmediate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_resolve</span><span class="p">(),</span> <span class="s1">'tablesUsedImmediate'</span><span class="p">,</span> <span class="k">lambda</span><span class="p">:</span> <span class="p">[])()</span> <span class="k">def</span> <span class="nf">components</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_resolve</span><span class="p">(),</span> <span class="s1">'components'</span><span class="p">,</span> <span class="k">lambda</span><span class="p">:</span> <span class="p">[])()</span> <span class="k">def</span> <span class="nf">_resolve</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attr</span><span class="p">)</span> <span class="c1"># For AliasTable etc</span> <span class="k">def</span> <span class="nf">fieldName</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">class</span> <span class="nc">_aliasFieldName</span><span class="p">(</span><span class="n">SQLExpression</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">proxy</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">proxy</span> <span class="o">=</span> <span class="n">proxy</span> <span class="k">def</span> <span class="nf">__sqlrepr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">_resolve</span><span class="p">()</span><span class="o">.</span><span class="n">fieldName</span> <span class="k">return</span> <span class="n">_aliasFieldName</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="n">fieldName</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">fieldName</span><span class="p">)</span> <span class="k">class</span> <span class="nc">_DelayClass</span><span class="p">(</span><span class="n">_Delay</span><span class="p">):</span> <span class="k">def</span> <span class="nf">_resolve</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="o">.</span><span class="n">soClass</span><span class="o">.</span><span class="n">sqlmeta</span><span class="o">.</span><span class="n">table</span> <span class="k">class</span> <span class="nc">_Delay_proxy</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kw</span><span class="p">)</span> <span class="c1">######</span> <span class="c1">########################################</span> <span class="c1"># Global initializations</span> <span class="c1">########################################</span> <span class="n">table</span> <span class="o">=</span> <span class="n">TableSpace</span><span class="p">()</span> <span class="n">const</span> <span class="o">=</span> <span class="n">ConstantSpace</span><span class="p">()</span> <span class="n">func</span> <span class="o">=</span> <span class="n">const</span> <span class="c1">########################################</span> <span class="c1"># Testing</span> <span class="c1">########################################</span> <span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span> <span class="n">tests</span> <span class="o">=</span> <span class="s2">"""</span> <span class="s2">>>> AND(table.address.name == "Ian Bicking", table.address.zip > 30000)</span> <span class="s2">>>> table.address.name</span> <span class="s2">>>> AND(LIKE(table.address.name, "this"), IN(table.address.zip, [100, 200, 300]))</span> <span class="s2">>>> Select([table.address.name, table.address.state], where=LIKE(table.address.name, "</span><span class="si">%i</span><span class="s2">an%"))</span> <span class="s2">>>> Select([table.user.name], where=AND(table.user.state == table.states.abbrev))</span> <span class="s2">>>> Insert(table.address, [{"name": "BOB", "address": "3049 N. 18th St."}, {"name": "TIM", "address": "409 S. 10th St."}])</span> <span class="s2">>>> Insert(table.address, [("BOB", "3049 N. 18th St."), ("TIM", "409 S. 10th St.")], template=('name', 'address'))</span> <span class="s2">>>> Delete(table.address, where="BOB"==table.address.name)</span> <span class="s2">>>> Update(table.address, {"lastModified": const.NOW()})</span> <span class="s2">>>> Replace(table.address, [("BOB", "3049 N. 18th St."), ("TIM", "409 S. 10th St.")], template=('name', 'address'))</span> <span class="s2">"""</span> <span class="c1"># noqa: allow long (> 79) lines</span> <span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">tests</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">):</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">expr</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="k">continue</span> <span class="k">if</span> <span class="n">expr</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'>>> '</span><span class="p">):</span> <span class="n">expr</span> <span class="o">=</span> <span class="n">expr</span><span class="p">[</span><span class="mi">4</span><span class="p">:]</span> </pre></div> </div> </div> </div> <div class="clearer"></div> </div> <div class="related" role="navigation" aria-label="related navigation"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../../genindex.html" title="General Index" >index</a></li> <li class="right" > <a href="../../py-modindex.html" title="Python Module Index" >modules</a> |</li> <li class="nav-item nav-item-0"><a href="../../index.html">SQLObject 3.7.0 documentation</a> »</li> <li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li> </ul> </div> <div class="footer" role="contentinfo"> © Copyright 2004-2018, Ian Bicking and contributors. Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.7.4. </div> </body> </html>