mirror of
https://github.com/knex/knex.git
synced 2025-07-31 12:52:02 +00:00
105 lines
20 KiB
HTML
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">'lodash'</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">'NULL'</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">'boolean'</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">'true'</span> <span class="o">:</span> <span class="s1">'false'</span><span class="p">;</span>
|
|
<span class="k">case</span> <span class="s1">'number'</span><span class="o">:</span> <span class="k">return</span> <span class="nx">val</span><span class="o">+</span><span class="s1">''</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">"Z"</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">'undefined'</span> <span class="o">&&</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">'object'</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\\\'\"\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">"\0"</span><span class="o">:</span> <span class="k">return</span> <span class="s2">"\\0"</span><span class="p">;</span>
|
|
<span class="k">case</span> <span class="s2">"\n"</span><span class="o">:</span> <span class="k">return</span> <span class="s2">"\\n"</span><span class="p">;</span>
|
|
<span class="k">case</span> <span class="s2">"\r"</span><span class="o">:</span> <span class="k">return</span> <span class="s2">"\\r"</span><span class="p">;</span>
|
|
<span class="k">case</span> <span class="s2">"\b"</span><span class="o">:</span> <span class="k">return</span> <span class="s2">"\\b"</span><span class="p">;</span>
|
|
<span class="k">case</span> <span class="s2">"\t"</span><span class="o">:</span> <span class="k">return</span> <span class="s2">"\\t"</span><span class="p">;</span>
|
|
<span class="k">case</span> <span class="s2">"\x1a"</span><span class="o">:</span> <span class="k">return</span> <span class="s2">"\\Z"</span><span class="p">;</span>
|
|
<span class="k">default</span><span class="o">:</span> <span class="k">return</span> <span class="s2">"\\"</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">"'"</span><span class="o">+</span><span class="nx">val</span><span class="o">+</span><span class="s2">"'"</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">'('</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">')'</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">', '</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">'local'</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">'-'</span> <span class="o">+</span> <span class="nx">month</span> <span class="o">+</span> <span class="s1">'-'</span> <span class="o">+</span> <span class="nx">day</span> <span class="o">+</span> <span class="s1">' '</span> <span class="o">+</span> <span class="nx">hour</span> <span class="o">+</span> <span class="s1">':'</span> <span class="o">+</span> <span class="nx">minute</span> <span class="o">+</span> <span class="s1">':'</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">''</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">'hex'</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"><</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">"X'"</span> <span class="o">+</span> <span class="nx">hex</span><span class="o">+</span> <span class="s2">"'"</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"><</span> <span class="mi">10</span><span class="p">)</span> <span class="o">?</span> <span class="s1">'0'</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">"Z"</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">'-'</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> |