knex/docs/lib/sqlstring.html
2013-12-12 17:37:44 -05:00

105 lines
20 KiB
HTML

<!DOCTYPE html><html lang="en"><head><title>lib/sqlstring</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/sqlstring"><meta name="groc-project-path" content="lib/sqlstring.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/sqlstring.js</div></div><div id="document"><div class="segment"><div class="comments"><div class="wrapper"><h2 id="sql-string">SQL String</h2></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>A few functions taken from the node-mysql lib, so it can be easily used with any
library on the <code>toString</code> method, and on the browser.</p></div></div><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">SqlString</span> <span class="o">=</span> <span class="p">{};</span>
<span class="kd">var</span> <span class="nx">_</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;lodash&#39;</span><span class="p">);</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Send in a "sql" string, values, and an optional timeZone
and have it returned as a properly formatted SQL query.</p></div></div><div class="code"><div class="wrapper"><span class="nx">SqlString</span><span class="p">.</span><span class="nx">format</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">sql</span><span class="p">,</span> <span class="nx">values</span><span class="p">,</span> <span class="nx">timeZone</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">values</span> <span class="o">=</span> <span class="p">[].</span><span class="nx">concat</span><span class="p">(</span><span class="nx">values</span><span class="p">);</span>
<span class="k">return</span> <span class="nx">sql</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\?/g</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">match</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">values</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="k">return</span> <span class="nx">match</span><span class="p">;</span>
<span class="k">return</span> <span class="nx">SqlString</span><span class="p">.</span><span class="nx">escape</span><span class="p">(</span><span class="nx">values</span><span class="p">.</span><span class="nx">shift</span><span class="p">(),</span> <span class="nx">timeZone</span><span class="p">);</span>
<span class="p">});</span>
<span class="p">};</span>
<span class="nx">SqlString</span><span class="p">.</span><span class="nx">escape</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">val</span><span class="p">,</span> <span class="nx">timeZone</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">val</span> <span class="o">===</span> <span class="kc">undefined</span> <span class="o">||</span> <span class="nx">val</span> <span class="o">===</span> <span class="kc">null</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="s1">&#39;NULL&#39;</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">switch</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">val</span><span class="p">)</span> <span class="p">{</span>
<span class="k">case</span> <span class="s1">&#39;boolean&#39;</span><span class="o">:</span> <span class="k">return</span> <span class="p">(</span><span class="nx">val</span><span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;true&#39;</span> <span class="o">:</span> <span class="s1">&#39;false&#39;</span><span class="p">;</span>
<span class="k">case</span> <span class="s1">&#39;number&#39;</span><span class="o">:</span> <span class="k">return</span> <span class="nx">val</span><span class="o">+</span><span class="s1">&#39;&#39;</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">val</span> <span class="k">instanceof</span> <span class="nb">Date</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">val</span> <span class="o">=</span> <span class="nx">SqlString</span><span class="p">.</span><span class="nx">dateToString</span><span class="p">(</span><span class="nx">val</span><span class="p">,</span> <span class="nx">timeZone</span> <span class="o">||</span> <span class="s2">&quot;Z&quot;</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">Buffer</span> <span class="o">!==</span> <span class="s1">&#39;undefined&#39;</span> <span class="o">&amp;&amp;</span> <span class="nx">Buffer</span><span class="p">.</span><span class="nx">isBuffer</span><span class="p">(</span><span class="nx">val</span><span class="p">))</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">SqlString</span><span class="p">.</span><span class="nx">bufferToString</span><span class="p">(</span><span class="nx">val</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">_</span><span class="p">.</span><span class="nx">isArray</span><span class="p">(</span><span class="nx">val</span><span class="p">))</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">SqlString</span><span class="p">.</span><span class="nx">arrayToList</span><span class="p">(</span><span class="nx">val</span><span class="p">,</span> <span class="nx">timeZone</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="k">typeof</span> <span class="nx">val</span> <span class="o">===</span> <span class="s1">&#39;object&#39;</span><span class="p">)</span> <span class="nx">val</span> <span class="o">=</span> <span class="nx">val</span><span class="p">.</span><span class="nx">toString</span><span class="p">();</span>
<span class="nx">val</span> <span class="o">=</span> <span class="nx">val</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/[\0\n\r\b\t\\\&#39;\&quot;\x1a]/g</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">s</span><span class="p">)</span> <span class="p">{</span>
<span class="k">switch</span><span class="p">(</span><span class="nx">s</span><span class="p">)</span> <span class="p">{</span>
<span class="k">case</span> <span class="s2">&quot;\0&quot;</span><span class="o">:</span> <span class="k">return</span> <span class="s2">&quot;\\0&quot;</span><span class="p">;</span>
<span class="k">case</span> <span class="s2">&quot;\n&quot;</span><span class="o">:</span> <span class="k">return</span> <span class="s2">&quot;\\n&quot;</span><span class="p">;</span>
<span class="k">case</span> <span class="s2">&quot;\r&quot;</span><span class="o">:</span> <span class="k">return</span> <span class="s2">&quot;\\r&quot;</span><span class="p">;</span>
<span class="k">case</span> <span class="s2">&quot;\b&quot;</span><span class="o">:</span> <span class="k">return</span> <span class="s2">&quot;\\b&quot;</span><span class="p">;</span>
<span class="k">case</span> <span class="s2">&quot;\t&quot;</span><span class="o">:</span> <span class="k">return</span> <span class="s2">&quot;\\t&quot;</span><span class="p">;</span>
<span class="k">case</span> <span class="s2">&quot;\x1a&quot;</span><span class="o">:</span> <span class="k">return</span> <span class="s2">&quot;\\Z&quot;</span><span class="p">;</span>
<span class="k">default</span><span class="o">:</span> <span class="k">return</span> <span class="s2">&quot;\\&quot;</span><span class="o">+</span><span class="nx">s</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">});</span>
<span class="k">return</span> <span class="s2">&quot;&#39;&quot;</span><span class="o">+</span><span class="nx">val</span><span class="o">+</span><span class="s2">&quot;&#39;&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="nx">SqlString</span><span class="p">.</span><span class="nx">arrayToList</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">timeZone</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">array</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">v</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">Array</span><span class="p">.</span><span class="nx">isArray</span><span class="p">(</span><span class="nx">v</span><span class="p">))</span> <span class="k">return</span> <span class="s1">&#39;(&#39;</span> <span class="o">+</span> <span class="nx">SqlString</span><span class="p">.</span><span class="nx">arrayToList</span><span class="p">(</span><span class="nx">v</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;)&#39;</span><span class="p">;</span>
<span class="k">return</span> <span class="nx">SqlString</span><span class="p">.</span><span class="nx">escape</span><span class="p">(</span><span class="nx">v</span><span class="p">,</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">timeZone</span><span class="p">);</span>
<span class="p">}).</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;, &#39;</span><span class="p">);</span>
<span class="p">};</span>
<span class="nx">SqlString</span><span class="p">.</span><span class="nx">dateToString</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">date</span><span class="p">,</span> <span class="nx">timeZone</span><span class="p">)</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">dt</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="nx">date</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">timeZone</span> <span class="o">!=</span> <span class="s1">&#39;local&#39;</span><span class="p">)</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">tz</span> <span class="o">=</span> <span class="nx">convertTimezone</span><span class="p">(</span><span class="nx">timeZone</span><span class="p">);</span>
<span class="nx">dt</span><span class="p">.</span><span class="nx">setTime</span><span class="p">(</span><span class="nx">dt</span><span class="p">.</span><span class="nx">getTime</span><span class="p">()</span> <span class="o">+</span> <span class="p">(</span><span class="nx">dt</span><span class="p">.</span><span class="nx">getTimezoneOffset</span><span class="p">()</span> <span class="o">*</span> <span class="mi">60000</span><span class="p">));</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">tz</span> <span class="o">!==</span> <span class="kc">false</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">dt</span><span class="p">.</span><span class="nx">setTime</span><span class="p">(</span><span class="nx">dt</span><span class="p">.</span><span class="nx">getTime</span><span class="p">()</span> <span class="o">+</span> <span class="p">(</span><span class="nx">tz</span> <span class="o">*</span> <span class="mi">60000</span><span class="p">));</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="kd">var</span> <span class="nx">year</span> <span class="o">=</span> <span class="nx">dt</span><span class="p">.</span><span class="nx">getFullYear</span><span class="p">();</span>
<span class="kd">var</span> <span class="nx">month</span> <span class="o">=</span> <span class="nx">zeroPad</span><span class="p">(</span><span class="nx">dt</span><span class="p">.</span><span class="nx">getMonth</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">day</span> <span class="o">=</span> <span class="nx">zeroPad</span><span class="p">(</span><span class="nx">dt</span><span class="p">.</span><span class="nx">getDate</span><span class="p">());</span>
<span class="kd">var</span> <span class="nx">hour</span> <span class="o">=</span> <span class="nx">zeroPad</span><span class="p">(</span><span class="nx">dt</span><span class="p">.</span><span class="nx">getHours</span><span class="p">());</span>
<span class="kd">var</span> <span class="nx">minute</span> <span class="o">=</span> <span class="nx">zeroPad</span><span class="p">(</span><span class="nx">dt</span><span class="p">.</span><span class="nx">getMinutes</span><span class="p">());</span>
<span class="kd">var</span> <span class="nx">second</span> <span class="o">=</span> <span class="nx">zeroPad</span><span class="p">(</span><span class="nx">dt</span><span class="p">.</span><span class="nx">getSeconds</span><span class="p">());</span>
<span class="k">return</span> <span class="nx">year</span> <span class="o">+</span> <span class="s1">&#39;-&#39;</span> <span class="o">+</span> <span class="nx">month</span> <span class="o">+</span> <span class="s1">&#39;-&#39;</span> <span class="o">+</span> <span class="nx">day</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="nx">hour</span> <span class="o">+</span> <span class="s1">&#39;:&#39;</span> <span class="o">+</span> <span class="nx">minute</span> <span class="o">+</span> <span class="s1">&#39;:&#39;</span> <span class="o">+</span> <span class="nx">second</span><span class="p">;</span>
<span class="p">};</span>
<span class="nx">SqlString</span><span class="p">.</span><span class="nx">bufferToString</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">buffer</span><span class="p">)</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">hex</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">;</span>
<span class="k">try</span> <span class="p">{</span>
<span class="nx">hex</span> <span class="o">=</span> <span class="nx">buffer</span><span class="p">.</span><span class="nx">toString</span><span class="p">(</span><span class="s1">&#39;hex&#39;</span><span class="p">);</span>
<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>node v0.4.x does not support hex / throws unknown encoding error</p></div></div><div class="code"><div class="wrapper"> <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">buffer</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="kd">var</span> <span class="kr">byte</span> <span class="o">=</span> <span class="nx">buffer</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
<span class="nx">hex</span> <span class="o">+=</span> <span class="nx">zeroPad</span><span class="p">(</span><span class="kr">byte</span><span class="p">.</span><span class="nx">toString</span><span class="p">(</span><span class="mi">16</span><span class="p">));</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">return</span> <span class="s2">&quot;X&#39;&quot;</span> <span class="o">+</span> <span class="nx">hex</span><span class="o">+</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="kd">function</span> <span class="nx">zeroPad</span><span class="p">(</span><span class="nx">number</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="p">(</span><span class="nx">number</span> <span class="o">&lt;</span> <span class="mi">10</span><span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;0&#39;</span> <span class="o">+</span> <span class="nx">number</span> <span class="o">:</span> <span class="nx">number</span><span class="p">;</span>
<span class="p">}</span>
<span class="kd">function</span> <span class="nx">convertTimezone</span><span class="p">(</span><span class="nx">tz</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">tz</span> <span class="o">==</span> <span class="s2">&quot;Z&quot;</span><span class="p">)</span> <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">m</span> <span class="o">=</span> <span class="nx">tz</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="sr">/([\+\-\s])(\d\d):?(\d\d)?/</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">m</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="p">(</span><span class="nx">m</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;-&#39;</span> <span class="o">?</span> <span class="o">-</span><span class="mi">1</span> <span class="o">:</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">m</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="mi">10</span><span class="p">)</span> <span class="o">+</span> <span class="p">((</span><span class="nx">m</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">?</span> <span class="nb">parseInt</span><span class="p">(</span><span class="nx">m</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="mi">10</span><span class="p">)</span> <span class="o">:</span> <span class="mi">0</span><span class="p">)</span> <span class="o">/</span> <span class="mi">60</span><span class="p">))</span> <span class="o">*</span> <span class="mi">60</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">return</span> <span class="kc">false</span><span class="p">;</span>
<span class="p">}</span>
<span class="nx">exports</span><span class="p">.</span><span class="nx">SqlString</span> <span class="o">=</span> <span class="nx">SqlString</span><span class="p">;</span></div></div></div></div></body></html>