mirror of
https://github.com/knex/knex.git
synced 2025-12-17 10:09:18 +00:00
57 lines
14 KiB
HTML
57 lines
14 KiB
HTML
<!DOCTYPE html><html lang="en"><head><title>lib/dialects/sqlite3/runner</title></head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"><meta name="groc-relative-root" content="../../../"><meta name="groc-document-path" content="lib/dialects/sqlite3/runner"><meta name="groc-project-path" content="lib/dialects/sqlite3/runner.js"><link rel="stylesheet" type="text/css" media="all" href="../../../assets/style.css"><script type="text/javascript" src="../../../assets/behavior.js"></script><body><div id="meta"><div class="file-path">lib/dialects/sqlite3/runner.js</div></div><div id="document"><div class="segment"><div class="comments "><div class="wrapper"><h2 id="runner">Runner</h2></div></div></div><div class="segment"><div class="code"><div class="wrapper"><span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">client</span><span class="p">)</span> <span class="p">{</span>
|
|
|
|
<span class="kd">var</span> <span class="nx">Promise</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'../../promise'</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">Runner</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'../../runner'</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">helpers</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'../../helpers'</span><span class="p">);</span>
|
|
|
|
<span class="kd">var</span> <span class="nx">inherits</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'inherits'</span><span class="p">);</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Inherit from the <code>Runner</code> constructor's prototype,
|
|
so we can add the correct <code>then</code> method.</p></div></div><div class="code"><div class="wrapper"><span class="kd">function</span> <span class="nx">Runner_SQLite3</span><span class="p">()</span> <span class="p">{</span>
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">client</span> <span class="o">=</span> <span class="nx">client</span><span class="p">;</span>
|
|
<span class="nx">Runner</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">arguments</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="nx">inherits</span><span class="p">(</span><span class="nx">Runner_SQLite3</span><span class="p">,</span> <span class="nx">Runner</span><span class="p">);</span>
|
|
|
|
<span class="nx">Runner_SQLite3</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">_beginTransaction</span> <span class="o">=</span> <span class="s1">'begin transaction;'</span><span class="p">;</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Runs the query on the specified connection, providing the bindings and any other necessary prep work.</p></div></div><div class="code"><div class="wrapper"><span class="nx">Runner_SQLite3</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">_query</span> <span class="o">=</span> <span class="nx">Promise</span><span class="p">.</span><span class="nx">method</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">method</span> <span class="o">=</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">method</span><span class="p">;</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">isDebugging</span><span class="p">())</span> <span class="k">this</span><span class="p">.</span><span class="nx">debug</span><span class="p">(</span><span class="nx">obj</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">callMethod</span> <span class="o">=</span> <span class="p">(</span><span class="nx">method</span> <span class="o">===</span> <span class="s1">'insert'</span> <span class="o">||</span> <span class="nx">method</span> <span class="o">===</span> <span class="s1">'update'</span> <span class="o">||</span> <span class="nx">method</span> <span class="o">===</span> <span class="s1">'del'</span><span class="p">)</span> <span class="o">?</span> <span class="s1">'run'</span> <span class="o">:</span> <span class="s1">'all'</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">connection</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">connection</span><span class="p">;</span>
|
|
<span class="k">return</span> <span class="k">new</span> <span class="nx">Promise</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">resolver</span><span class="p">,</span> <span class="nx">rejecter</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">connection</span> <span class="o">||</span> <span class="o">!</span><span class="nx">connection</span><span class="p">[</span><span class="nx">callMethod</span><span class="p">])</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">rejecter</span><span class="p">(</span><span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">'Error calling '</span> <span class="o">+</span> <span class="nx">callMethod</span> <span class="o">+</span> <span class="s1">' on connection.'</span><span class="p">));</span>
|
|
<span class="p">}</span>
|
|
<span class="nx">connection</span><span class="p">[</span><span class="nx">callMethod</span><span class="p">](</span><span class="nx">obj</span><span class="p">.</span><span class="nx">sql</span><span class="p">,</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">bindings</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="k">return</span> <span class="nx">rejecter</span><span class="p">(</span><span class="nx">err</span><span class="p">);</span>
|
|
<span class="nx">obj</span><span class="p">.</span><span class="nx">response</span> <span class="o">=</span> <span class="nx">response</span><span class="p">;</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>We need the context here, as it contains
|
|
the "this.lastID" or "this.changes"</p></div></div><div class="code"><div class="wrapper"> <span class="nx">obj</span><span class="p">.</span><span class="nx">context</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span>
|
|
<span class="k">return</span> <span class="nx">resolver</span><span class="p">(</span><span class="nx">obj</span><span class="p">);</span>
|
|
<span class="p">});</span>
|
|
<span class="p">});</span>
|
|
<span class="p">});</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Sounds like .each doesn't work great for</p></div></div><div class="code"><div class="wrapper"><span class="nx">Runner_SQLite3</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">_stream</span> <span class="o">=</span> <span class="nx">Promise</span><span class="p">.</span><span class="nx">method</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">sql</span><span class="p">,</span> <span class="nx">stream</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">runner</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span>
|
|
<span class="k">return</span> <span class="k">new</span> <span class="nx">Promise</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">resolver</span><span class="p">,</span> <span class="nx">rejecter</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">stream</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">'error'</span><span class="p">,</span> <span class="nx">rejecter</span><span class="p">);</span>
|
|
<span class="nx">stream</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">'end'</span><span class="p">,</span> <span class="nx">resolver</span><span class="p">);</span>
|
|
<span class="k">return</span> <span class="nx">runner</span><span class="p">.</span><span class="nx">query</span><span class="p">().</span><span class="nx">map</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">row</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">stream</span><span class="p">.</span><span class="nx">write</span><span class="p">(</span><span class="nx">row</span><span class="p">);</span>
|
|
<span class="p">}).</span><span class="k">catch</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
|
<span class="nx">stream</span><span class="p">.</span><span class="nx">emit</span><span class="p">(</span><span class="s1">'error'</span><span class="p">);</span>
|
|
<span class="p">}).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
|
<span class="nx">stream</span><span class="p">.</span><span class="nx">end</span><span class="p">();</span>
|
|
<span class="p">});</span>
|
|
<span class="p">});</span>
|
|
<span class="p">});</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Ensures the response is returned in the same format as other clients.</p></div></div><div class="code"><div class="wrapper"><span class="nx">Runner_SQLite3</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">processResponse</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">obj</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">ctx</span> <span class="o">=</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">context</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">response</span> <span class="o">=</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">response</span><span class="p">;</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">obj</span><span class="p">.</span><span class="nx">output</span><span class="p">)</span> <span class="k">return</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">output</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">response</span><span class="p">);</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">obj</span><span class="p">.</span><span class="nx">method</span> <span class="o">===</span> <span class="s1">'select'</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">response</span> <span class="o">=</span> <span class="nx">helpers</span><span class="p">.</span><span class="nx">skim</span><span class="p">(</span><span class="nx">response</span><span class="p">);</span>
|
|
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">obj</span><span class="p">.</span><span class="nx">method</span> <span class="o">===</span> <span class="s1">'insert'</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">response</span> <span class="o">=</span> <span class="p">[</span><span class="nx">ctx</span><span class="p">.</span><span class="nx">lastID</span><span class="p">];</span>
|
|
<span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">obj</span><span class="p">.</span><span class="nx">method</span> <span class="o">===</span> <span class="s1">'del'</span> <span class="o">||</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">method</span> <span class="o">===</span> <span class="s1">'update'</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">response</span> <span class="o">=</span> <span class="nx">ctx</span><span class="p">.</span><span class="nx">changes</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
<span class="k">return</span> <span class="nx">response</span><span class="p">;</span>
|
|
<span class="p">};</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Assign the newly extended <code>Runner</code> constructor to the client object.</p></div></div><div class="code"><div class="wrapper"><span class="nx">client</span><span class="p">.</span><span class="nx">Runner</span> <span class="o">=</span> <span class="nx">Runner_SQLite3</span><span class="p">;</span>
|
|
|
|
<span class="p">};</span></div></div></div></div></body></html> |