mirror of
https://github.com/knex/knex.git
synced 2025-08-01 13:22:04 +00:00
43 lines
13 KiB
HTML
43 lines
13 KiB
HTML
<!DOCTYPE html><html lang="en"><head><title>clients/server/mysql</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="clients/server/mysql"><meta name="groc-project-path" content="clients/server/mysql.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">clients/server/mysql.js</div></div><div id="document"><div class="segment"><div class="comments"><div class="wrapper"><h2 id="mysql">MySQL</h2></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Other dependencies, including the <code>mysql</code> library,
|
|
which needs to be added as a dependency to the project
|
|
using this database.</p></div></div><div class="code"><div class="wrapper"><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>
|
|
<span class="kd">var</span> <span class="nx">mysql</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'mysql'</span><span class="p">);</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>All other local project modules needed in this scope.</p></div></div><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">ServerBase</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./base'</span><span class="p">).</span><span class="nx">ServerBase</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">'../../lib/helpers'</span><span class="p">).</span><span class="nx">Helpers</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">'../../lib/promise'</span><span class="p">).</span><span class="nx">Promise</span><span class="p">;</span>
|
|
|
|
<span class="kd">var</span> <span class="nx">grammar</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./mysql/grammar'</span><span class="p">).</span><span class="nx">grammar</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">schemaGrammar</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./mysql/schemagrammar'</span><span class="p">).</span><span class="nx">schemaGrammar</span><span class="p">;</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Constructor for the MySQLClient.</p></div></div><div class="code"><div class="wrapper"><span class="nx">exports</span><span class="p">.</span><span class="nx">Client</span> <span class="o">=</span> <span class="nx">ServerBase</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span>
|
|
|
|
<span class="nx">dialect</span><span class="o">:</span> <span class="s1">'mysql'</span><span class="p">,</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Attach the appropriate grammar definitions onto the current client.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">attachGrammars</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">grammar</span> <span class="o">=</span> <span class="nx">grammar</span><span class="p">;</span>
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">schemaGrammar</span> <span class="o">=</span> <span class="nx">schemaGrammar</span><span class="p">;</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">runQuery</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">connection</span><span class="p">,</span> <span class="nx">sql</span><span class="p">,</span> <span class="nx">bindings</span><span class="p">,</span> <span class="nx">builder</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">Promise</span><span class="p">.</span><span class="nx">bind</span><span class="p">(</span><span class="k">this</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="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">connection</span><span class="p">)</span> <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span><span class="p">(</span><span class="s1">'No database connection exists for the query'</span><span class="p">);</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">builder</span><span class="p">.</span><span class="nx">flags</span><span class="p">.</span><span class="nx">options</span><span class="p">)</span> <span class="nx">sql</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">({</span><span class="nx">sql</span><span class="o">:</span> <span class="nx">sql</span><span class="p">},</span> <span class="nx">builder</span><span class="p">.</span><span class="nx">flags</span><span class="p">.</span><span class="nx">options</span><span class="p">);</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">builder</span><span class="p">.</span><span class="nx">_source</span> <span class="o">===</span> <span class="s1">'SchemaBuilder'</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">advancedQuery</span><span class="p">(</span><span class="nx">connection</span><span class="p">,</span> <span class="nx">sql</span><span class="p">,</span> <span class="nx">builder</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="k">return</span> <span class="nx">sql</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="nx">sql</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">Promise</span><span class="p">.</span><span class="nx">promisify</span><span class="p">(</span><span class="nx">connection</span><span class="p">.</span><span class="nx">query</span><span class="p">,</span> <span class="nx">connection</span><span class="p">)(</span><span class="nx">sql</span><span class="p">,</span> <span class="nx">bindings</span><span class="p">);</span>
|
|
<span class="p">}).</span><span class="nx">bind</span><span class="p">();</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Get a raw connection, called by the <code>pool</code> whenever a new
|
|
connection needs to be added to the pool.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">getRawConnection</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">connection</span> <span class="o">=</span> <span class="nx">mysql</span><span class="p">.</span><span class="nx">createConnection</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">connectionSettings</span><span class="p">);</span>
|
|
<span class="k">return</span> <span class="nx">Promise</span><span class="p">.</span><span class="nx">promisify</span><span class="p">(</span><span class="nx">connection</span><span class="p">.</span><span class="nx">connect</span><span class="p">,</span> <span class="nx">connection</span><span class="p">)().</span><span class="nx">yield</span><span class="p">(</span><span class="nx">connection</span><span class="p">);</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="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><div class="code"><div class="wrapper"> <span class="nx">destroyRawConnection</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">connection</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">connection</span><span class="p">.</span><span class="nx">end</span><span class="p">();</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Used to check if there is a conditional query needed to complete the next one.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">advancedQuery</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">connection</span><span class="p">,</span> <span class="nx">sql</span><span class="p">,</span> <span class="nx">builder</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">sql</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="s1">'alter table'</span><span class="p">)</span> <span class="o">===</span> <span class="mi">0</span> <span class="o">&&</span> <span class="nx">sql</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="s1">'__datatype__'</span><span class="p">)</span> <span class="o">===</span> <span class="p">(</span><span class="nx">sql</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">12</span><span class="p">))</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">newSql</span> <span class="o">=</span> <span class="nx">sql</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="s1">'alter table'</span><span class="p">,</span> <span class="s1">'show fields from'</span><span class="p">).</span><span class="nx">split</span><span class="p">(</span><span class="s1">'change'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s1">' where field = ?'</span><span class="p">;</span>
|
|
<span class="k">return</span> <span class="nx">Promise</span><span class="p">.</span><span class="nx">promisify</span><span class="p">(</span><span class="nx">connection</span><span class="p">.</span><span class="nx">query</span><span class="p">,</span> <span class="nx">connection</span><span class="p">)(</span><span class="nx">newSql</span><span class="p">,</span> <span class="p">[</span><span class="nx">builder</span><span class="p">.</span><span class="nx">commands</span><span class="p">[</span><span class="nx">builder</span><span class="p">.</span><span class="nx">currentIndex</span><span class="p">].</span><span class="nx">from</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="nx">resp</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">column</span> <span class="o">=</span> <span class="nx">resp</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Set to the datatype we're looking to change it to...</p></div></div><div class="code"><div class="wrapper"> <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="s1">'__datatype__'</span><span class="p">,</span> <span class="nx">column</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">Type</span><span class="p">);</span>
|
|
<span class="p">});</span>
|
|
<span class="p">}</span>
|
|
<span class="k">return</span> <span class="nx">sql</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="p">});</span></div></div></div></div></body></html> |