<spanclass="s2">"use strict"</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The "Grammar" is a collection of functions
which help to reliably compile the various pieces
of SQL into a valid, escaped query. These functions
are combined with dialect specific "Grammar" functions
to keep the interface database agnostic.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">define</span><spanclass="p">(</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">require</span><spanclass="p">,</span><spanclass="nx">exports</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="kd">var</span><spanclass="nx">push</span><spanclass="o">=</span><spanclass="p">[].</span><spanclass="nx">push</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The list of different components</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">components</span><spanclass="o">=</span><spanclass="p">[</span>
<spanclass="nx">exports</span><spanclass="p">.</span><spanclass="nx">baseGrammar</span><spanclass="o">=</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles the current query builder.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">toSql</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Gets the cleaned bindings.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">getBindings</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles the <code>select</code> statement, or nested sub-selects
by calling each of the component compilers, trimming out
the empties, and returning a generated query string.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileSelect</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">}</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>If there is a transaction, and we have either <code>forUpdate</code> or <code>forShare</code> specified,
call the appropriate additions to the select statement.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="k">if</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">.</span><spanclass="nx">transaction</span><spanclass="o">&&</span><spanclass="nx">qb</span><spanclass="p">.</span><spanclass="nx">flags</span><spanclass="p">.</span><spanclass="nx">selectMode</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles the columns with aggregate functions.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileAggregates</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">if</span><spanclass="p">(</span><spanclass="nx">aggregate</span><spanclass="p">.</span><spanclass="nx">columns</span><spanclass="p">.</span><spanclass="nx">toLowerCase</span><spanclass="p">().</span><spanclass="nx">indexOf</span><spanclass="p">(</span><spanclass="s1">' as '</span><spanclass="p">)</span><spanclass="o">!==</span><spanclass="o">-</span><spanclass="mi">1</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="nx">sql</span><spanclass="p">.</span><spanclass="nx">push</span><spanclass="p">(</span><spanclass="nx">aggregate</span><spanclass="p">.</span><spanclass="nx">type</span><spanclass="o">+</span><spanclass="s1">'('</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrap</span><spanclass="p">(</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">')'</span><spanclass="o">+</span><spanclass="p">(</span><spanclass="nx">segments</span><spanclass="o">?</span><spanclass="s1">' as '</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrap</span><spanclass="p">(</span><spanclass="nx">segments</span><spanclass="p">[</span><spanclass="mi">2</span><spanclass="p">])</span><spanclass="o">:</span><spanclass="s1">''</span><spanclass="p">));</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles the columns in the query, specifying if an item was distinct.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileColumns</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">columns</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles the <code>from</code> tableName portion of the query.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileFrom</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">table</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles all each of the <code>join</code> clauses on the query,
including any nested join queries.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileJoins</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">joins</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="nx">sql</span><spanclass="p">.</span><spanclass="nx">push</span><spanclass="p">(</span><spanclass="nx">join</span><spanclass="p">.</span><spanclass="nx">joinType</span><spanclass="o">+</span><spanclass="s1">' join '</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrapTable</span><spanclass="p">(</span><spanclass="nx">join</span><spanclass="p">.</span><spanclass="nx">table</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">' on '</span><spanclass="o">+</span><spanclass="nx">clauses</span><spanclass="p">.</span><spanclass="nx">join</span><spanclass="p">(</span><spanclass="s1">''</span><spanclass="p">));</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles all <code>where</code> statements on the query.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileWheres</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile the "union" queries attached to the main query.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileUnions</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="nx">sql</span><spanclass="o">+=</span><spanclass="p">(</span><spanclass="nx">union</span><spanclass="p">.</span><spanclass="nx">all</span><spanclass="o">?</span><spanclass="s1">'union all '</span><spanclass="o">:</span><spanclass="s1">'union '</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">compileSelect</span><spanclass="p">(</span><spanclass="nx">union</span><spanclass="p">.</span><spanclass="nx">query</span><spanclass="p">);</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles a nested where clause.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">whereNested</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">where</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles a nested where clause.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">whereSub</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">where</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles a basic where clause.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">whereBasic</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">where</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles a basic exists clause.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">whereExists</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">where</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles a basic not exists clause.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">whereNotExists</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">where</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles a where in clause.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">whereIn</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">where</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrap</span><spanclass="p">(</span><spanclass="nx">where</span><spanclass="p">.</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">' in ('</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">parameterize</span><spanclass="p">(</span><spanclass="nx">where</span><spanclass="p">.</span><spanclass="nx">value</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">')'</span><spanclass="p">;</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles a where not in clause.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">whereNotIn</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">where</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrap</span><spanclass="p">(</span><spanclass="nx">where</span><spanclass="p">.</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">' not in ('</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">parameterize</span><spanclass="p">(</span><spanclass="nx">where</span><spanclass="p">.</span><spanclass="nx">value</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">')'</span><spanclass="p">;</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles a sub-where in clause.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">whereInSub</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">where</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrap</span><spanclass="p">(</span><spanclass="nx">where</span><spanclass="p">.</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">' in ('</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">compileSelect</span><spanclass="p">(</span><spanclass="nx">where</span><spanclass="p">.</span><spanclass="nx">query</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">')'</span><spanclass="p">;</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles a sub-where not in clause.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">whereNotInSub</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">where</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrap</span><spanclass="p">(</span><spanclass="nx">where</span><spanclass="p">.</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">' not in ('</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">compileSelect</span><spanclass="p">(</span><spanclass="nx">where</span><spanclass="p">.</span><spanclass="nx">query</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">')'</span><spanclass="p">;</span>
<spanclass="k">return</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrap</span><spanclass="p">(</span><spanclass="nx">where</span><spanclass="p">.</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">' between ? and ?'</span><spanclass="p">;</span>
<spanclass="k">return</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrap</span><spanclass="p">(</span><spanclass="nx">where</span><spanclass="p">.</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">' is null'</span><spanclass="p">;</span>
<spanclass="k">return</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrap</span><spanclass="p">(</span><spanclass="nx">where</span><spanclass="p">.</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">' is not null'</span><spanclass="p">;</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles the <code>group by</code> columns.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileGroups</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">groups</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s1">'group by '</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">columnize</span><spanclass="p">(</span><spanclass="nx">groups</span><spanclass="p">);</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles the <code>having</code> statements.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileHavings</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">havings</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles the <code>order by</code> statements.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileOrders</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">orders</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s1">'order by '</span><spanclass="o">+</span><spanclass="nx">orders</span><spanclass="p">.</span><spanclass="nx">map</span><spanclass="p">(</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">order</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles the <code>limit</code> statements.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileLimit</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">limit</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles an <code>offset</code> statement on the query.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileOffset</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">,</span><spanclass="nx">offset</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles an <code>insert</code> query, allowing for multiple
inserts using a single query statement.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileInsert</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="kd">var</span><spanclass="nx">paramBlocks</span><spanclass="o">=</span><spanclass="p">[];</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>If there are any "where" clauses, we need to omit
any bindings that may have been associated with them.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="k">if</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">.</span><spanclass="nx">wheres</span><spanclass="p">.</span><spanclass="nx">length</span><spanclass="o">></span><spanclass="mi">0</span><spanclass="p">)</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">clearWhereBindings</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">);</span>
<spanclass="k">return</span><spanclass="s2">"insert into "</span><spanclass="o">+</span><spanclass="nx">table</span><spanclass="o">+</span><spanclass="s2">" ("</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">columnize</span><spanclass="p">(</span><spanclass="nx">columns</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s2">") values "</span><spanclass="o">+</span><spanclass="nx">paramBlocks</span><spanclass="p">.</span><spanclass="nx">join</span><spanclass="p">(</span><spanclass="s1">', '</span><spanclass="p">);</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Depending on the type of <code>where</code> clause, this will appropriately
remove any binding caused by "where" constraints, allowing the same
query to be used for <code>insert</code> and <code>update</code> without issue.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">clearWhereBindings</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles an <code>update</code> query.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileUpdate</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s1">'update '</span><spanclass="o">+</span><spanclass="nx">table</span><spanclass="o">+</span><spanclass="s1">' set '</span><spanclass="o">+</span><spanclass="nx">columns</span><spanclass="p">.</span><spanclass="nx">join</span><spanclass="p">(</span><spanclass="s1">', '</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">''</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">compileWheres</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">);</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles a <code>delete</code> query.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileDelete</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s1">'delete from '</span><spanclass="o">+</span><spanclass="nx">table</span><spanclass="o">+</span><spanclass="s1">''</span><spanclass="o">+</span><spanclass="nx">where</span><spanclass="p">;</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compiles a <code>truncate</code> query.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileTruncate</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">qb</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Adds a <code>for update</code> clause to the query, relevant with transactions.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileForUpdate</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Adds a <code>for share</code> clause to the query, relevant with transactions.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileForShare</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Puts the appropriate wrapper around a value depending on the database
engine, unless it's a knex.raw value, in which case it's left alone.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">wrap</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">value</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">if</span><spanclass="p">(</span><spanclass="nx">value</span><spanclass="p">.</span><spanclass="nx">toLowerCase</span><spanclass="p">().</span><spanclass="nx">indexOf</span><spanclass="p">(</span><spanclass="s1">' as '</span><spanclass="p">)</span><spanclass="o">!==</span><spanclass="o">-</span><spanclass="mi">1</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrap</span><spanclass="p">(</span><spanclass="nx">segments</span><spanclass="p">[</span><spanclass="mi">0</span><spanclass="p">])</span><spanclass="o">+</span><spanclass="s1">' as '</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrap</span><spanclass="p">(</span><spanclass="nx">segments</span><spanclass="p">[</span><spanclass="mi">2</span><spanclass="p">]);</span>