mirror of
https://github.com/knex/knex.git
synced 2025-08-05 15:22:06 +00:00
156 lines
41 KiB
HTML
156 lines
41 KiB
HTML
<!DOCTYPE html><html lang="en"><head><title>clients/base/schemagrammar</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/base/schemagrammar"><meta name="groc-project-path" content="clients/base/schemagrammar.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/base/schemagrammar.js</div></div><div id="document"><div class="segment"><div class="comments"><div class="wrapper"><h2 id="schemagrammar">SchemaGrammar</h2></div></div></div><div class="segment"><div class="code"><div class="wrapper"><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">define</span><span class="p">)</span> <span class="p">{</span>
|
|
|
|
<span class="s2">"use strict"</span><span class="p">;</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>The "SchemaGrammar" is a layer which helps in compiling
|
|
valid data definition language (DDL) statements in
|
|
to create, alter, or destroy the various tables, columns,
|
|
and metadata in our database schema. These functions
|
|
are combined with dialect specific "SchemaGrammar"
|
|
functions to keep the interface database agnostic.</p></div></div><div class="code"><div class="wrapper"><span class="nx">define</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">require</span><span class="p">,</span> <span class="nx">exports</span><span class="p">)</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>
|
|
|
|
<span class="kd">var</span> <span class="nx">baseGrammar</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./grammar'</span><span class="p">).</span><span class="nx">baseGrammar</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">SchemaBuilder</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'../../lib/schemabuilder'</span><span class="p">).</span><span class="nx">SchemaBuilder</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">Raw</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'../../lib/raw'</span><span class="p">).</span><span class="nx">Raw</span><span class="p">;</span>
|
|
|
|
<span class="nx">exports</span><span class="p">.</span><span class="nx">baseSchemaGrammar</span> <span class="o">=</span> <span class="p">{</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>The toSql on the "schema" is different than that on the "builder",
|
|
it produces an array of sql statements to be used in the creation
|
|
or modification of the query, which are each run in sequence
|
|
on the same connection.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">toSql</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></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Clone the builder, before we go about working with the columns & commands.
|
|
TODO: Clean this up.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">builder</span> <span class="o">=</span> <span class="nx">builder</span><span class="p">.</span><span class="nx">clone</span><span class="p">();</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Add the commands that are implied by the blueprint.</p></div></div><div class="code"><div class="wrapper"> <span class="k">if</span> <span class="p">(</span><span class="nx">builder</span><span class="p">.</span><span class="nx">columns</span><span class="p">.</span><span class="nx">length</span> <span class="o">></span> <span class="mi">0</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">builder</span><span class="p">.</span><span class="nx">creating</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">unshift</span><span class="p">({</span><span class="nx">name</span><span class="o">:</span> <span class="s1">'add'</span><span class="p">});</span>
|
|
<span class="p">}</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Add an "additional" command, for any extra dialect-specific logic.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">builder</span><span class="p">.</span><span class="nx">commands</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span><span class="nx">name</span><span class="o">:</span> <span class="s1">'additional'</span><span class="p">});</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Add indicies</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">l</span> <span class="o">=</span> <span class="nx">builder</span><span class="p">.</span><span class="nx">columns</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="nx">l</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="nx">column</span> <span class="o">=</span> <span class="nx">builder</span><span class="p">.</span><span class="nx">columns</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">indices</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'primary'</span><span class="p">,</span> <span class="s1">'unique'</span><span class="p">,</span> <span class="s1">'index'</span><span class="p">,</span> <span class="s1">'foreign'</span><span class="p">];</span>
|
|
|
|
<span class="nx">continueIndex</span><span class="o">:</span>
|
|
<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i2</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">l2</span> <span class="o">=</span> <span class="nx">indices</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i2</span> <span class="o"><</span> <span class="nx">l2</span><span class="p">;</span> <span class="nx">i2</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">index</span> <span class="o">=</span> <span class="nx">indices</span><span class="p">[</span><span class="nx">i2</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">indexVar</span> <span class="o">=</span> <span class="s1">'is'</span> <span class="o">+</span> <span class="nx">Helpers</span><span class="p">.</span><span class="nx">capitalize</span><span class="p">(</span><span class="nx">index</span><span class="p">);</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>If the index has been specified on the given column, but is simply
|
|
equal to "true" (boolean), no name has been specified for this
|
|
index, so we will simply call the index methods without one.</p></div></div><div class="code"><div class="wrapper"> <span class="k">if</span> <span class="p">(</span><span class="nx">column</span><span class="p">[</span><span class="nx">indexVar</span><span class="p">]</span> <span class="o">===</span> <span class="kc">true</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">builder</span><span class="p">[</span><span class="nx">index</span><span class="p">](</span><span class="nx">column</span><span class="p">,</span> <span class="kc">null</span><span class="p">);</span>
|
|
<span class="k">continue</span> <span class="nx">continueIndex</span><span class="p">;</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>If the index has been specified on the column and it is something
|
|
other than boolean true, we will assume a name was provided on
|
|
the index specification, and pass in the name to the method.</p></div></div><div class="code"><div class="wrapper"> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">_</span><span class="p">.</span><span class="nx">has</span><span class="p">(</span><span class="nx">column</span><span class="p">,</span> <span class="nx">indexVar</span><span class="p">))</span> <span class="p">{</span>
|
|
<span class="nx">builder</span><span class="p">[</span><span class="nx">index</span><span class="p">](</span><span class="nx">column</span><span class="p">.</span><span class="nx">name</span><span class="p">,</span> <span class="nx">column</span><span class="p">[</span><span class="nx">indexVar</span><span class="p">],</span> <span class="nx">column</span><span class="p">);</span>
|
|
<span class="k">continue</span> <span class="nx">continueIndex</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
<span class="p">}</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="kd">var</span> <span class="nx">statements</span> <span class="o">=</span> <span class="p">[];</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Each type of command has a corresponding compiler function on the schema
|
|
grammar which is used to build the necessary SQL statements to build
|
|
the blueprint element, so we'll just call that compilers function.</p></div></div><div class="code"><div class="wrapper"> <span class="k">for</span> <span class="p">(</span><span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">l</span> <span class="o">=</span> <span class="nx">builder</span><span class="p">.</span><span class="nx">commands</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="nx">l</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="nx">command</span> <span class="o">=</span> <span class="nx">builder</span><span class="p">.</span><span class="nx">commands</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">method</span> <span class="o">=</span> <span class="s1">'compile'</span> <span class="o">+</span> <span class="nx">Helpers</span><span class="p">.</span><span class="nx">capitalize</span><span class="p">(</span><span class="nx">command</span><span class="p">.</span><span class="nx">name</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">has</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">method</span><span class="p">))</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">sql</span> <span class="o">=</span> <span class="k">this</span><span class="p">[</span><span class="nx">method</span><span class="p">](</span><span class="nx">builder</span><span class="p">,</span> <span class="nx">command</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">statements</span> <span class="o">=</span> <span class="nx">statements</span><span class="p">.</span><span class="nx">concat</span><span class="p">(</span><span class="nx">sql</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="k">return</span> <span class="nx">statements</span><span class="p">;</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Compile a foreign key command.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">compileForeign</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">,</span> <span class="nx">command</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">sql</span><span class="p">;</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">command</span><span class="p">.</span><span class="nx">foreignTable</span> <span class="o">&&</span> <span class="nx">command</span><span class="p">.</span><span class="nx">foreignColumn</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">table</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">wrapTable</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">column</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">columnize</span><span class="p">(</span><span class="nx">command</span><span class="p">.</span><span class="nx">columns</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">foreignTable</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">wrapTable</span><span class="p">(</span><span class="nx">command</span><span class="p">.</span><span class="nx">foreignTable</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">foreignColumn</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">columnize</span><span class="p">(</span><span class="nx">command</span><span class="p">.</span><span class="nx">foreignColumn</span><span class="p">);</span>
|
|
|
|
<span class="nx">sql</span> <span class="o">=</span> <span class="s2">"alter table "</span> <span class="o">+</span> <span class="nx">table</span> <span class="o">+</span> <span class="s2">" add constraint "</span> <span class="o">+</span> <span class="nx">command</span><span class="p">.</span><span class="nx">index</span> <span class="o">+</span> <span class="s2">" "</span><span class="p">;</span>
|
|
<span class="nx">sql</span> <span class="o">+=</span> <span class="s2">"foreign key ("</span> <span class="o">+</span> <span class="nx">column</span> <span class="o">+</span> <span class="s2">") references "</span> <span class="o">+</span> <span class="nx">foreignTable</span> <span class="o">+</span> <span class="s2">" ("</span> <span class="o">+</span> <span class="nx">foreignColumn</span> <span class="o">+</span> <span class="s2">")"</span><span class="p">;</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Once we have the basic foreign key creation statement constructed we can
|
|
build out the syntax for what should happen on an update or delete of
|
|
the affected columns, which will get something like "cascade", etc.</p></div></div><div class="code"><div class="wrapper"> <span class="k">if</span> <span class="p">(</span><span class="nx">command</span><span class="p">.</span><span class="nx">commandOnDelete</span><span class="p">)</span> <span class="nx">sql</span> <span class="o">+=</span> <span class="s2">" on delete "</span> <span class="o">+</span> <span class="nx">command</span><span class="p">.</span><span class="nx">commandOnDelete</span><span class="p">;</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">command</span><span class="p">.</span><span class="nx">commandOnUpdate</span><span class="p">)</span> <span class="nx">sql</span> <span class="o">+=</span> <span class="s2">" on update "</span> <span class="o">+</span> <span class="nx">command</span><span class="p">.</span><span class="nx">commandOnUpdate</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></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Each of the column types have their own compiler functions which are
|
|
responsible for turning the column definition into its SQL format
|
|
for the platform. Then column modifiers are compiled and added.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">getColumns</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">columns</span> <span class="o">=</span> <span class="p">[];</span>
|
|
<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">l</span> <span class="o">=</span> <span class="nx">blueprint</span><span class="p">.</span><span class="nx">columns</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="nx">l</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="nx">column</span> <span class="o">=</span> <span class="nx">blueprint</span><span class="p">.</span><span class="nx">columns</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">sql</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">wrap</span><span class="p">(</span><span class="nx">column</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' '</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">getType</span><span class="p">(</span><span class="nx">column</span><span class="p">,</span> <span class="nx">blueprint</span><span class="p">);</span>
|
|
<span class="nx">columns</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">addModifiers</span><span class="p">(</span><span class="nx">sql</span><span class="p">,</span> <span class="nx">blueprint</span><span class="p">,</span> <span class="nx">column</span><span class="p">));</span>
|
|
<span class="p">}</span>
|
|
<span class="k">return</span> <span class="nx">columns</span><span class="p">;</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Add the column modifiers to the definition.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">addModifiers</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">blueprint</span><span class="p">,</span> <span class="nx">column</span><span class="p">)</span> <span class="p">{</span>
|
|
<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">l</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">modifiers</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="nx">l</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="nx">modifier</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">modifiers</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
|
|
<span class="kd">var</span> <span class="nx">method</span> <span class="o">=</span> <span class="s2">"modify"</span> <span class="o">+</span> <span class="nx">modifier</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">has</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">method</span><span class="p">))</span> <span class="p">{</span>
|
|
<span class="nx">sql</span> <span class="o">+=</span> <span class="k">this</span><span class="p">[</span><span class="nx">method</span><span class="p">](</span><span class="nx">blueprint</span><span class="p">,</span> <span class="nx">column</span><span class="p">)</span> <span class="o">||</span> <span class="s1">''</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></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Get the SQL for the column data type.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">getType</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="nx">blueprint</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="s1">'type'</span> <span class="o">+</span> <span class="nx">Helpers</span><span class="p">.</span><span class="nx">capitalize</span><span class="p">(</span><span class="nx">column</span><span class="p">.</span><span class="nx">type</span><span class="p">)](</span><span class="nx">column</span><span class="p">,</span> <span class="nx">blueprint</span><span class="p">);</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Add a prefix to an array of values, utilized in the client libs.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">prefixArray</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">prefix</span><span class="p">,</span> <span class="nx">values</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">_</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="nx">values</span><span class="p">,</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">return</span> <span class="nx">prefix</span> <span class="o">+</span> <span class="s1">' '</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>Wrap a table in keyword identifiers.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">wrapTable</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">table</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">table</span> <span class="k">instanceof</span> <span class="nx">SchemaBuilder</span><span class="p">)</span> <span class="nx">table</span> <span class="o">=</span> <span class="nx">table</span><span class="p">.</span><span class="nx">table</span><span class="p">;</span>
|
|
<span class="k">return</span> <span class="nx">baseGrammar</span><span class="p">.</span><span class="nx">wrapTable</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">table</span><span class="p">);</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Wrap a value in keyword identifiers.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">wrap</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="nx">value</span> <span class="o">&&</span> <span class="nx">value</span><span class="p">.</span><span class="nx">name</span><span class="p">)</span> <span class="nx">value</span> <span class="o">=</span> <span class="nx">value</span><span class="p">.</span><span class="nx">name</span><span class="p">;</span>
|
|
<span class="k">return</span> <span class="nx">baseGrammar</span><span class="p">.</span><span class="nx">wrap</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">value</span><span class="p">);</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Format a value so that it can be used in "default" clauses.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">getDefaultValue</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="nx">value</span> <span class="k">instanceof</span> <span class="nx">Raw</span><span class="p">)</span> <span class="k">return</span> <span class="nx">value</span><span class="p">.</span><span class="nx">sql</span><span class="p">;</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">value</span> <span class="o">===</span> <span class="kc">true</span> <span class="o">||</span> <span class="nx">value</span> <span class="o">===</span> <span class="kc">false</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nb">parseInt</span><span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="mi">10</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="k">return</span> <span class="s1">''</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>Get the primary key command if it exists on the blueprint.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">getCommandByName</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">,</span> <span class="nx">name</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">commands</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getCommandsByName</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">,</span> <span class="nx">name</span><span class="p">);</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">commands</span><span class="p">.</span><span class="nx">length</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="k">return</span> <span class="nx">commands</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Get all of the commands with a given name.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">getCommandsByName</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">,</span> <span class="nx">name</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">_</span><span class="p">.</span><span class="nx">filter</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">.</span><span class="nx">commands</span><span class="p">,</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">return</span> <span class="nx">value</span><span class="p">.</span><span class="nx">name</span> <span class="o">==</span> <span class="nx">name</span><span class="p">;</span> <span class="p">})</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>Used to compile any database specific items.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">compileAdditional</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Compile a create table command.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">compileCreateTable</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">columns</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">getColumns</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s1">', '</span><span class="p">);</span>
|
|
<span class="k">return</span> <span class="s1">'create table '</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">wrapTable</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' ('</span> <span class="o">+</span> <span class="nx">columns</span> <span class="o">+</span> <span class="s1">')'</span><span class="p">;</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Compile a drop table command.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">compileDropTable</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="s1">'drop table '</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">wrapTable</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">);</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Compile a drop table (if exists) command.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">compileDropTableIfExists</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="s1">'drop table if exists '</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">wrapTable</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">);</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Compile a drop index command.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">compileDropIndex</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">,</span> <span class="nx">command</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="s1">'drop index '</span> <span class="o">+</span> <span class="nx">command</span><span class="p">.</span><span class="nx">index</span><span class="p">;</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Default for a biginteger type in database in other databases.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">typeBigInteger</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="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">typeInteger</span><span class="p">(</span><span class="nx">column</span><span class="p">);</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Create the column definition for a string type.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">typeString</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="k">return</span> <span class="s2">"varchar("</span> <span class="o">+</span> <span class="nx">column</span><span class="p">.</span><span class="nx">length</span> <span class="o">+</span> <span class="s2">")"</span><span class="p">;</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Create the column definition for a text type.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">typeText</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="s1">'text'</span><span class="p">;</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Create the column definition for a tiny integer type.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">typeTinyInteger</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="s1">'tinyint'</span><span class="p">;</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Create the column definition for a time type.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">typeTime</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="s1">'time'</span><span class="p">;</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Create the column definition for a date type.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">typeDate</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="s1">'date'</span><span class="p">;</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Create the column definition for a binary type.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">typeBinary</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="s1">'blob'</span><span class="p">;</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Create the column definition for a json type.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">typeJson</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="s1">'text'</span><span class="p">;</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Create the column definition for a uuid type.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">typeUuid</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="s1">'char(36)'</span><span class="p">;</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Create a specific type</p></div></div><div class="code"><div class="wrapper"> <span class="nx">typeSpecificType</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="k">return</span> <span class="nx">column</span><span class="p">.</span><span class="nx">specific</span><span class="p">;</span>
|
|
<span class="p">},</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Get the SQL for a nullable column modifier.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">modifyNullable</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">,</span> <span class="nx">column</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">column</span><span class="p">.</span><span class="nx">isNullable</span> <span class="o">===</span> <span class="kc">false</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="s1">' not null'</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>Get the SQL for a default column modifier.</p></div></div><div class="code"><div class="wrapper"> <span class="nx">modifyDefault</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">blueprint</span><span class="p">,</span> <span class="nx">column</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">column</span><span class="p">.</span><span class="nx">defaultValue</span> <span class="o">!=</span> <span class="k">void</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="s2">" default '"</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">getDefaultValue</span><span class="p">(</span><span class="nx">column</span><span class="p">.</span><span class="nx">defaultValue</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"'"</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="p">};</span>
|
|
|
|
<span class="p">});</span>
|
|
|
|
<span class="p">})(</span>
|
|
<span class="k">typeof</span> <span class="nx">define</span> <span class="o">===</span> <span class="s1">'function'</span> <span class="o">&&</span> <span class="nx">define</span><span class="p">.</span><span class="nx">amd</span> <span class="o">?</span> <span class="nx">define</span> <span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">factory</span><span class="p">)</span> <span class="p">{</span> <span class="nx">factory</span><span class="p">(</span><span class="nx">require</span><span class="p">,</span> <span class="nx">exports</span><span class="p">,</span> <span class="nx">module</span><span class="p">);</span> <span class="p">}</span>
|
|
<span class="p">);</span></div></div></div></div></body></html> |