mirror of
https://github.com/knex/knex.git
synced 2025-12-16 17:48:31 +00:00
196 lines
28 KiB
HTML
196 lines
28 KiB
HTML
|
|
<!DOCTYPE html><html lang="en"><head><title>lib/schema/tablebuilder</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/schema/tablebuilder"><meta name="groc-project-path" content="lib/schema/tablebuilder.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/schema/tablebuilder.js</div></div><div id="document"><div class="segment"><div class="comments "><div class="wrapper"><p>TableBuilder</p></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Takes the function passed to the "createTable" or "table/editTable"
|
||
|
|
functions and calls it with the "TableBuilder" as both the context and
|
||
|
|
the first argument. Inside this function we can specify what happens to the
|
||
|
|
method, pushing everything we want to do onto the "allStatements" array,</p>
|
||
|
|
|
||
|
|
<h2 id="which-is-then-compiled-into-sql">which is then compiled into sql.</h2></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">function</span> <span class="nx">TableBuilder</span><span class="p">(</span><span class="nx">method</span><span class="p">,</span> <span class="nx">tableName</span><span class="p">,</span> <span class="nx">fn</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">_fn</span> <span class="o">=</span> <span class="nx">fn</span><span class="p">;</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">_method</span> <span class="o">=</span> <span class="nx">method</span><span class="p">;</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">_tableName</span> <span class="o">=</span> <span class="nx">tableName</span><span class="p">;</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">_statements</span> <span class="o">=</span> <span class="p">[];</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">_single</span> <span class="o">=</span> <span class="p">{};</span>
|
||
|
|
<span class="p">}</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Convert the current tableBuilder object "toSQL"
|
||
|
|
giving us additional methods if we're altering
|
||
|
|
rather than creating the table.</p></div></div><div class="code"><div class="wrapper"><span class="nx">TableBuilder</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">toSQL</span> <span class="o">=</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="k">this</span><span class="p">.</span><span class="nx">_method</span> <span class="o">===</span> <span class="s1">'alter'</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">AlterMethods</span><span class="p">);</span>
|
||
|
|
<span class="p">}</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">_fn</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="k">this</span><span class="p">);</span>
|
||
|
|
<span class="kd">var</span> <span class="nx">TableCompiler</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">client</span><span class="p">.</span><span class="nx">TableCompiler</span><span class="p">;</span>
|
||
|
|
<span class="k">return</span> <span class="k">new</span> <span class="nx">TableCompiler</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">toSQL</span><span class="p">();</span>
|
||
|
|
<span class="p">};</span>
|
||
|
|
|
||
|
|
<span class="kd">var</span> <span class="nx">AlterMethods</span> <span class="o">=</span> <span class="p">{</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Renames the current column <code>from</code> the current
|
||
|
|
TODO: this.column(from).rename(to)</p></div></div><div class="code"><div class="wrapper"> <span class="nx">renameColumn</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">from</span><span class="p">,</span> <span class="nx">to</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">_statements</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span>
|
||
|
|
<span class="nx">grouping</span><span class="o">:</span> <span class="s1">'alterTable'</span><span class="p">,</span>
|
||
|
|
<span class="nx">method</span><span class="o">:</span> <span class="s1">'renameColumn'</span><span class="p">,</span>
|
||
|
|
<span class="nx">args</span><span class="o">:</span> <span class="p">[</span><span class="nx">from</span><span class="p">,</span> <span class="nx">to</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="p">},</span>
|
||
|
|
|
||
|
|
<span class="nx">dropTimestamps</span><span class="o">:</span> <span class="kd">function</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">dropColumns</span><span class="p">([</span><span class="s1">'created_at'</span><span class="p">,</span> <span class="s1">'updated_at'</span><span class="p">]);</span>
|
||
|
|
<span class="p">}</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>TODO: changeType</p></div></div><div class="code"><div class="wrapper"><span class="p">};</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Drop a column from the current table.
|
||
|
|
TODO: Enable this.column(columnName).drop();</p></div></div><div class="code"><div class="wrapper"><span class="nx">AlterMethods</span><span class="p">.</span><span class="nx">dropColumn</span> <span class="o">=</span>
|
||
|
|
<span class="nx">AlterMethods</span><span class="p">.</span><span class="nx">dropColumns</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">_statements</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span>
|
||
|
|
<span class="nx">grouping</span><span class="o">:</span> <span class="s1">'alterTable'</span><span class="p">,</span>
|
||
|
|
<span class="nx">method</span><span class="o">:</span> <span class="s1">'dropColumn'</span><span class="p">,</span>
|
||
|
|
<span class="nx">args</span><span class="o">:</span> <span class="nx">_</span><span class="p">.</span><span class="nx">toArray</span><span class="p">(</span><span class="nx">arguments</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="p">};</span>
|
||
|
|
|
||
|
|
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">([</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Each of the index methods can be called individually, with the
|
||
|
|
column name to be used, e.g. table.unique('column').</p></div></div><div class="code"><div class="wrapper"> <span class="s1">'index'</span><span class="p">,</span> <span class="s1">'primary'</span><span class="p">,</span> <span class="s1">'unique'</span><span class="p">,</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Key specific</p></div></div><div class="code"><div class="wrapper"> <span class="s1">'dropPrimary'</span><span class="p">,</span> <span class="s1">'dropUnique'</span><span class="p">,</span> <span class="s1">'dropIndex'</span><span class="p">,</span> <span class="s1">'dropForeign'</span>
|
||
|
|
|
||
|
|
<span class="p">],</span> <span class="kd">function</span><span class="p">(</span><span class="nx">method</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="nx">TableBuilder</span><span class="p">.</span><span class="nx">prototype</span><span class="p">[</span><span class="nx">method</span><span class="p">]</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">_statements</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span>
|
||
|
|
<span class="nx">grouping</span><span class="o">:</span> <span class="s1">'alterTable'</span><span class="p">,</span>
|
||
|
|
<span class="nx">method</span><span class="o">:</span> <span class="nx">method</span><span class="p">,</span>
|
||
|
|
<span class="nx">args</span><span class="o">:</span> <span class="nx">_</span><span class="p">.</span><span class="nx">toArray</span><span class="p">(</span><span class="nx">arguments</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="p">};</span>
|
||
|
|
<span class="p">});</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Warn if we're not in MySQL, since that's the only time these
|
||
|
|
three are supported.</p></div></div><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">specialMethods</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'engine'</span><span class="p">,</span> <span class="s1">'charset'</span><span class="p">,</span> <span class="s1">'collate'</span><span class="p">];</span>
|
||
|
|
<span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">specialMethods</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">method</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="nx">TableBuilder</span><span class="p">.</span><span class="nx">prototype</span><span class="p">[</span><span class="nx">method</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="k">if</span> <span class="p">(</span><span class="kc">false</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="nx">warn</span><span class="p">(</span><span class="s1">'Knex only supports '</span> <span class="o">+</span> <span class="nx">method</span> <span class="o">+</span> <span class="s1">' statement with mysql.'</span><span class="p">);</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">__method</span> <span class="o">===</span> <span class="s1">'alter'</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="nx">warn</span><span class="p">(</span><span class="s1">'Knex does not support altering the '</span> <span class="o">+</span> <span class="nx">method</span> <span class="o">+</span> <span class="s1">' outside of the create table, please use knex.raw statement.'</span><span class="p">);</span>
|
||
|
|
<span class="p">}</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">_single</span><span class="p">[</span><span class="nx">method</span><span class="p">]</span> <span class="o">=</span> <span class="nx">value</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>Each of the column types that we can add, we create a new ColumnBuilder
|
||
|
|
instance and push it onto the statements array.</p></div></div><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">columnTypes</span> <span class="o">=</span> <span class="p">[</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Numeric</p></div></div><div class="code"><div class="wrapper"> <span class="s1">'tinyint'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'smallint'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'mediumint'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'int'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'bigint'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'decimal'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'float'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'double'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'real'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'bit'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'boolean'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'serial'</span><span class="p">,</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Date / Time</p></div></div><div class="code"><div class="wrapper"> <span class="s1">'date'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'datetime'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'timestamp'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'time'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'year'</span><span class="p">,</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>String</p></div></div><div class="code"><div class="wrapper"> <span class="s1">'char'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'varchar'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'tinytext'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'tinyText'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'text'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'mediumtext'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'mediumText'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'longtext'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'longText'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'binary'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'varbinary'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'tinyblob'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'tinyBlob'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'mediumblob'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'mediumBlob'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'blob'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'longblob'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'longBlob'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'enum'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'set'</span><span class="p">,</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Increments, Aliases, and Additional</p></div></div><div class="code"><div class="wrapper"> <span class="s1">'bool'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'dateTime'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'increments'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'bigincrements'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'bigIncrements'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'integer'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'biginteger'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'bigInteger'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'string'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'timestamps'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'json'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'uuid'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'enu'</span><span class="p">,</span>
|
||
|
|
<span class="s1">'specificType'</span>
|
||
|
|
<span class="p">];</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>For each of the column methods, create a new "ColumnBuilder" interface,
|
||
|
|
push it onto the "allStatements" stack, and then return the interface,
|
||
|
|
with which we can add indexes, etc.</p></div></div><div class="code"><div class="wrapper"><span class="nx">_</span><span class="p">.</span><span class="nx">each</span><span class="p">(</span><span class="nx">columnTypes</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">type</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="nx">TableBuilder</span><span class="p">.</span><span class="nx">prototype</span><span class="p">[</span><span class="nx">type</span><span class="p">]</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">args</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">toArray</span><span class="p">(</span><span class="nx">arguments</span><span class="p">);</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>The "timestamps" call is really a compound call to set the
|
||
|
|
<code>created_at</code> and <code>updated_at</code> columns.</p></div></div><div class="code"><div class="wrapper"> <span class="k">if</span> <span class="p">(</span><span class="nx">type</span> <span class="o">===</span> <span class="s1">'timestamps'</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">===</span> <span class="kc">true</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">timestamp</span><span class="p">(</span><span class="s1">'created_at'</span><span class="p">);</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">timestamp</span><span class="p">(</span><span class="s1">'updated_at'</span><span class="p">);</span>
|
||
|
|
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">datetime</span><span class="p">(</span><span class="s1">'created_at'</span><span class="p">);</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">datetime</span><span class="p">(</span><span class="s1">'updated_at'</span><span class="p">);</span>
|
||
|
|
<span class="p">}</span>
|
||
|
|
<span class="k">return</span><span class="p">;</span>
|
||
|
|
<span class="p">}</span>
|
||
|
|
<span class="kd">var</span> <span class="nx">ColumnBuilder</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">client</span><span class="p">.</span><span class="nx">ColumnBuilder</span><span class="p">;</span>
|
||
|
|
<span class="kd">var</span> <span class="nx">builder</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ColumnBuilder</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">type</span><span class="p">,</span> <span class="nx">args</span><span class="p">);</span>
|
||
|
|
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">_statements</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span>
|
||
|
|
<span class="nx">grouping</span><span class="o">:</span> <span class="s1">'columns'</span><span class="p">,</span>
|
||
|
|
<span class="nx">builder</span><span class="o">:</span> <span class="nx">builder</span>
|
||
|
|
<span class="p">});</span>
|
||
|
|
<span class="k">return</span> <span class="nx">builder</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>Set the comment value for a table, they're only allowed to be called
|
||
|
|
once per table.</p></div></div><div class="code"><div class="wrapper"><span class="nx">TableBuilder</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">comment</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">_single</span><span class="p">.</span><span class="nx">comment</span> <span class="o">=</span> <span class="nx">value</span><span class="p">;</span>
|
||
|
|
<span class="p">};</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Set a foreign key on the table, calling
|
||
|
|
`table.foreign('column_name').references('column').on('table').onDelete()...
|
||
|
|
Also called from the ColumnBuilder context when chaining.</p></div></div><div class="code"><div class="wrapper"><span class="nx">TableBuilder</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">foreign</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">column</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="kd">var</span> <span class="nx">foreignData</span> <span class="o">=</span> <span class="p">{</span><span class="nx">column</span><span class="o">:</span> <span class="nx">column</span><span class="p">};</span>
|
||
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">_statements</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span>
|
||
|
|
<span class="nx">grouping</span><span class="o">:</span> <span class="s1">'alterTable'</span><span class="p">,</span>
|
||
|
|
<span class="nx">method</span><span class="o">:</span> <span class="s1">'foreign'</span><span class="p">,</span>
|
||
|
|
<span class="nx">args</span><span class="o">:</span> <span class="p">[</span><span class="nx">foreignData</span><span class="p">]</span>
|
||
|
|
<span class="p">});</span>
|
||
|
|
<span class="kd">var</span> <span class="nx">returnObj</span> <span class="o">=</span> <span class="p">{</span>
|
||
|
|
<span class="nx">references</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">tableColumn</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="kd">var</span> <span class="nx">pieces</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">isString</span><span class="p">(</span><span class="nx">tableColumn</span><span class="p">))</span> <span class="p">{</span>
|
||
|
|
<span class="nx">pieces</span> <span class="o">=</span> <span class="nx">tableColumn</span><span class="p">.</span><span class="nx">split</span><span class="p">(</span><span class="s1">'.'</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">pieces</span> <span class="o">||</span> <span class="nx">pieces</span><span class="p">.</span><span class="nx">length</span> <span class="o">===</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="nx">foreignData</span><span class="p">.</span><span class="nx">references</span> <span class="o">=</span> <span class="nx">pieces</span> <span class="o">?</span> <span class="nx">pieces</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">:</span> <span class="nx">tableColumn</span><span class="p">;</span>
|
||
|
|
<span class="k">return</span> <span class="p">{</span>
|
||
|
|
<span class="nx">on</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">tableName</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="nx">foreignData</span><span class="p">.</span><span class="nx">inTable</span> <span class="o">=</span> <span class="nx">tableName</span><span class="p">;</span>
|
||
|
|
<span class="k">return</span> <span class="nx">returnObj</span><span class="p">;</span>
|
||
|
|
<span class="p">},</span>
|
||
|
|
<span class="nx">inTable</span><span class="o">:</span> <span class="kd">function</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">on</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="p">};</span>
|
||
|
|
<span class="p">}</span>
|
||
|
|
<span class="nx">foreignData</span><span class="p">.</span><span class="nx">inTable</span> <span class="o">=</span> <span class="nx">pieces</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
|
||
|
|
<span class="nx">foreignData</span><span class="p">.</span><span class="nx">references</span> <span class="o">=</span> <span class="nx">pieces</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
|
||
|
|
<span class="k">return</span> <span class="nx">returnObj</span><span class="p">;</span>
|
||
|
|
<span class="p">},</span>
|
||
|
|
<span class="nx">onUpdate</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">statement</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="nx">foreignData</span><span class="p">.</span><span class="nx">onUpdate</span> <span class="o">=</span> <span class="nx">statement</span><span class="p">;</span>
|
||
|
|
<span class="k">return</span> <span class="nx">returnObj</span><span class="p">;</span>
|
||
|
|
<span class="p">},</span>
|
||
|
|
<span class="nx">onDelete</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">statement</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="nx">foreignData</span><span class="p">.</span><span class="nx">onDelete</span> <span class="o">=</span> <span class="nx">statement</span><span class="p">;</span>
|
||
|
|
<span class="k">return</span> <span class="nx">returnObj</span><span class="p">;</span>
|
||
|
|
<span class="p">},</span>
|
||
|
|
<span class="nx">_columnBuilder</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">builder</span><span class="p">)</span> <span class="p">{</span>
|
||
|
|
<span class="nx">_</span><span class="p">.</span><span class="nx">extend</span><span class="p">(</span><span class="nx">builder</span><span class="p">,</span> <span class="nx">returnObj</span><span class="p">);</span>
|
||
|
|
<span class="nx">returnObj</span> <span class="o">=</span> <span class="nx">builder</span><span class="p">;</span>
|
||
|
|
<span class="k">return</span> <span class="nx">builder</span><span class="p">;</span>
|
||
|
|
<span class="p">}</span>
|
||
|
|
<span class="p">};</span>
|
||
|
|
<span class="k">return</span> <span class="nx">returnObj</span><span class="p">;</span>
|
||
|
|
<span class="p">};</span>
|
||
|
|
|
||
|
|
<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="nx">TableBuilder</span><span class="p">;</span></div></div></div></div></body></html>
|