using this database.</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">sqlite3</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'sqlite3'</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>All other local project modules needed in this scope.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">ServerBase</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'./base'</span><spanclass="p">).</span><spanclass="nx">ServerBase</span><spanclass="p">;</span>
<spanclass="kd">var</span><spanclass="nx">schemaGrammar</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'./sqlite3/schemagrammar'</span><spanclass="p">).</span><spanclass="nx">schemaGrammar</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Constructor for the SQLite3Client.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">SQLite3Client</span><spanclass="o">=</span><spanclass="nx">exports</span><spanclass="p">.</span><spanclass="nx">Client</span><spanclass="o">=</span><spanclass="nx">ServerBase</span><spanclass="p">.</span><spanclass="nx">extend</span><spanclass="p">({</span>
<spanclass="nx">dialect</span><spanclass="o">:</span><spanclass="s1">'sqlite3'</span><spanclass="p">,</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Attach the appropriate grammar definitions onto the current client.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">attachGrammars</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>Runs the query on the specified connection, providing the bindings
and any other necessary prep work.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">runQuery</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">connection</span><spanclass="p">,</span><spanclass="nx">sql</span><spanclass="p">,</span><spanclass="nx">bindings</span><spanclass="p">,</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">if</span><spanclass="p">(</span><spanclass="o">!</span><spanclass="nx">connection</span><spanclass="p">)</span><spanclass="k">throw</span><spanclass="k">new</span><spanclass="nb">Error</span><spanclass="p">(</span><spanclass="s1">'No database connection exists for the query'</span><spanclass="p">);</span>
<spanclass="nx">builder</span><spanclass="p">.</span><spanclass="nx">type</span><spanclass="o">===</span><spanclass="s1">'update'</span><spanclass="o">||</span><spanclass="nx">builder</span><spanclass="p">.</span><spanclass="nx">type</span><spanclass="o">===</span><spanclass="s1">'delete'</span><spanclass="p">)</span><spanclass="o">?</span><spanclass="s1">'run'</span><spanclass="o">:</span><spanclass="s1">'all'</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Call the querystring and then release the client</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">dfd</span><spanclass="o">=</span><spanclass="nx">Promise</span><spanclass="p">.</span><spanclass="nx">pending</span><spanclass="p">();</span>
<spanclass="k">if</span><spanclass="p">(</span><spanclass="nx">err</span><spanclass="p">)</span><spanclass="k">return</span><spanclass="nx">dfd</span><spanclass="p">.</span><spanclass="nx">reject</span><spanclass="p">(</span><spanclass="nx">err</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>We need the context here, because it has the "this.lastID" or "this.changes"</p></div></div><divclass="code"><divclass="wrapper"><spanclass="k">return</span><spanclass="nx">dfd</span><spanclass="p">.</span><spanclass="nx">fulfill</span><spanclass="p">([</span><spanclass="nx">resp</span><spanclass="p">,</span><spanclass="k">this</span><spanclass="p">]);</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Used to explicitly close a connection, called internally by the pool
when a connection times out or the pool is shutdown.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">destroyRawConnection</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>Begins a transaction statement on the instance,
resolving with the connection of the current transaction.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">startTransaction</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>Finishes the transaction statement on the instance.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">finishTransaction</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">type</span><spanclass="p">,</span><spanclass="nx">transaction</span><spanclass="p">,</span><spanclass="nx">msg</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>This needs to be refactored... badly.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">alterSchema</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">,</span><spanclass="nx">trx</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="nx">query</span><spanclass="p">(</span><spanclass="s1">'SELECT name, sql FROM sqlite_master WHERE type="table" AND name="'</span><spanclass="o">+</span><spanclass="nx">builder</span><spanclass="p">.</span><spanclass="nx">table</span><spanclass="o">+</span><spanclass="s1">'"'</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 column '</span><spanclass="o">+</span><spanclass="nx">command</span><spanclass="p">.</span><spanclass="nx">from</span><spanclass="o">+</span><spanclass="s1">' is not in the current table'</span><spanclass="p">);</span>
<spanclass="k">return</span><spanclass="nx">trx</span><spanclass="p">.</span><spanclass="nx">reject</span><spanclass="p">(</span><spanclass="s1">'Unable to find the column to change'</span><spanclass="p">);</span>
<spanclass="nx">query</span><spanclass="p">(</span><spanclass="s1">'SELECT * FROM "__migrate__'</span><spanclass="o">+</span><spanclass="nx">sql</span><spanclass="p">.</span><spanclass="nx">name</span><spanclass="o">+</span><spanclass="s1">'"'</span><spanclass="p">),</span>