Knex may be freely distributed under the MIT license.
For details and documentation:
http://knexjs.org
</code></pre></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>The "Knex" object we're exporting is just a passthrough to <code>Knex.initialize</code>.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">function</span><spanclass="nx">Knex</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">}</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Run a "raw" query, though we can't do anything with it other than put
it in a query statement.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">Knex</span><spanclass="p">.</span><spanclass="nx">raw</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">sql</span><spanclass="p">,</span><spanclass="nx">bindings</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Require the main constructors necessary for a <code>Knex</code> instance,
each of which are injected with the current instance, so they maintain
the correct client reference & grammar.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">Raw</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'./lib/raw'</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Doing it this way makes it easier to build for browserify.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">mysql</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span><spanclass="k">return</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'./lib/dialects/mysql'</span><spanclass="p">);</span><spanclass="p">};</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Require lodash.</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></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Each of the methods which may be statically chained from knex.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">QueryInterface</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'./lib/query/methods'</span><spanclass="p">);</span>
<spanclass="kd">var</span><spanclass="nx">MigrateInterface</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'./lib/migrate/methods'</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Create a new "knex" instance with the appropriate configured client.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">Knex</span><spanclass="p">.</span><spanclass="nx">initialize</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">config</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="kd">var</span><spanclass="nx">EventEmitter</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'events'</span><spanclass="p">).</span><spanclass="nx">EventEmitter</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>The object we're potentially using to kick off an
initial chain. It is assumed that <code>knex</code> isn't a
constructor, so we have no reference to 'this' just
in case it's called with <code>new</code>.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">function</span><spanclass="nx">knex</span><spanclass="p">(</span><spanclass="nx">tableName</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">if</span><spanclass="p">(</span><spanclass="nx">config</span><spanclass="p">.</span><spanclass="nx">__transactor__</span><spanclass="p">)</span><spanclass="nx">qb</span><spanclass="p">.</span><spanclass="nx">transacting</span><spanclass="p">(</span><spanclass="nx">config</span><spanclass="p">.</span><spanclass="nx">__transactor__</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Passthrough all "query" events to the knex object.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">qb</span><spanclass="p">.</span><spanclass="nx">on</span><spanclass="p">(</span><spanclass="s1">'query'</span><spanclass="p">,</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">data</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">}</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Hook up the "knex" object as an EventEmitter.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">ee</span><spanclass="o">=</span><spanclass="k">new</span><spanclass="nx">EventEmitter</span><spanclass="p">();</span>
<spanclass="p">}</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>The <code>__knex__</code> is used if you need to duck-type check whether this
is a knex builder, without a full on <code>instanceof</code> check.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">VERSION</span><spanclass="o">=</span><spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">__knex__</span><spanclass="o">=</span><spanclass="s1">'0.6.0'</span><spanclass="p">;</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Runs a new transaction, taking a container and returning a promise
for when the transaction is resolved.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">transaction</span><spanclass="o">=</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">container</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">};</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Convenience method for tearing down the pool.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">destroy</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>Allow either a callback or promise interface for destruction.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="k">if</span><spanclass="p">(</span><spanclass="nx">_</span><spanclass="p">.</span><spanclass="nx">isFunction</span><spanclass="p">(</span><spanclass="nx">callback</span><spanclass="p">))</span><spanclass="p">{</span>
<spanclass="p">}</span><spanclass="k">else</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Build the "client"</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">clientName</span><spanclass="o">=</span><spanclass="nx">config</span><spanclass="p">.</span><spanclass="nx">client</span><spanclass="p">;</span>
<spanclass="k">throw</span><spanclass="k">new</span><spanclass="nb">Error</span><spanclass="p">(</span><spanclass="nx">clientName</span><spanclass="o">+</span><spanclass="s1">' is not a valid Knex client, did you misspell it?'</span><spanclass="p">);</span>
<spanclass="p">}</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Allow chaining methods from the root object, before
any other information is specified.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">_</span><spanclass="p">.</span><spanclass="nx">each</span><spanclass="p">(</span><spanclass="nx">QueryInterface</span><spanclass="p">,</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">method</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">client</span><spanclass="o">=</span><spanclass="nx">client</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Namespaces for additional library components.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">schema</span><spanclass="o">=</span><spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">schema</span><spanclass="o">=</span><spanclass="p">{};</span>
<spanclass="kd">var</span><spanclass="nx">migrate</span><spanclass="o">=</span><spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">migrate</span><spanclass="o">=</span><spanclass="p">{};</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Attach each of the <code>Schema</code> "interface" methods directly onto to <code>knex.schema</code> namespace, e.g.:
<spanclass="kd">var</span><spanclass="nx">builder</span><spanclass="o">=</span><spanclass="k">new</span><spanclass="nx">client</span><spanclass="p">.</span><spanclass="nx">SchemaBuilder</span><spanclass="p">();</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Passthrough all "query" events to the knex object.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">builder</span><spanclass="p">.</span><spanclass="nx">on</span><spanclass="p">(</span><spanclass="s1">'query'</span><spanclass="p">,</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">data</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">});</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Attach each of the <code>Migrator</code> "interface" methods directly onto to <code>knex.migrate</code> namespace, e.g.:
<spanclass="p">});</span></div></div></div><divclass="segment"><divclass="comments "><divclass="wrapper"><p>Add a few additional misc utils.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">knex</span><spanclass="p">.</span><spanclass="nx">utils</span><spanclass="o">=</span><spanclass="nx">_</span><spanclass="p">.</span><spanclass="nx">extend</span><spanclass="p">({},</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'./lib/utils'</span><spanclass="p">));</span>