<!DOCTYPE html><htmllang="en"><head><title>lib/common</title></head><metahttp-equiv="Content-Type"content="text/html; charset=utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"><metaname="groc-relative-root"content="../"><metaname="groc-document-path"content="lib/common"><metaname="groc-project-path"content="lib/common.js"><linkrel="stylesheet"type="text/css"media="all"href="../assets/style.css"><scripttype="text/javascript"src="../assets/behavior.js"></script><body><divid="meta"><divclass="file-path">lib/common.js</div></div><divid="document"><divclass="segment"><divclass="comments"><divclass="wrapper"><h2id="common">Common</h2></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Some functions which are common to both the
<code>Builder</code> and <code>SchemaBuilder</code> classes.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">_</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'lodash'</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>Methods common to both the <code>Grammar</code> and <code>SchemaGrammar</code> interfaces,
used to generate the sql in one form or another.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">exports</span><spanclass="p">.</span><spanclass="nx">Common</span><spanclass="o">=</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Creates a new instance of the current <code>Builder</code> or <code>SchemaBuilder</code>,
with the correct current <code>knex</code> instance.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">instance</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>Sets the flag, so that when this object is passed into the
client adapter, we know to <code>log</code> the query.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">debug</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>Sets <code>options</code> which are passed along to the database client.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">options</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">opts</span><spanclass="p">)</span><spanclass="p">{</span>
after the last block.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">exec</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">callback</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The promise interface for the query builder.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">then</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">onFulfilled</span><spanclass="p">,</span><spanclass="nx">onRejected</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Passthrough to the convenient <code>tap</code> mechanism of when.js</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">tap</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">handler</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Returns an array of query strings filled out with the
correct values based on bindings, etc. Useful for debugging.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">toString</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>TODO: get rid of the need to clone the object here...</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">builder</span><spanclass="o">=</span><spanclass="k">this</span><spanclass="p">,</span><spanclass="nx">data</span><spanclass="o">=</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">clone</span><spanclass="p">().</span><spanclass="nx">toSql</span><spanclass="p">();</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Converts the current statement to a sql string</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">toSql</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>Explicitly sets the connection.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">connection</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">connection</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The connection the current query is being run on, optionally
specified by the <code>connection</code> method.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">usingConnection</span><spanclass="o">:</span><spanclass="kc">false</span><spanclass="p">,</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Default handler for a response is to pass it along.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">handleResponse</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">resp</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Sets the "type" of the current query, so we can potentially place
and have it come out fine.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">_setType</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">type</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">throw</span><spanclass="k">new</span><spanclass="nb">Error</span><spanclass="p">(</span><spanclass="s1">'The query type has already been set to '</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">type</span><spanclass="p">);</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Returns all bindings excluding the <code>Knex.Raw</code> types.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">getBindings</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>Sets the current Builder connection to that of the
the currently running transaction</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">transacting</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">t</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">if</span><spanclass="p">(</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">transaction</span><spanclass="p">)</span><spanclass="k">throw</span><spanclass="k">new</span><spanclass="nb">Error</span><spanclass="p">(</span><spanclass="s1">'A transaction has already been set for the current query chain'</span><spanclass="p">);</span>
<spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">usingConnection</span><spanclass="o">=</span><spanclass="nx">t</span><spanclass="p">.</span><spanclass="nx">connection</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Add "forUpdate" and "forShare" here, since these are only relevant
within the context of a transaction.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">forUpdate</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>