mirror of
https://github.com/knex/knex.git
synced 2025-12-18 10:38:40 +00:00
105 lines
25 KiB
HTML
105 lines
25 KiB
HTML
<!DOCTYPE html><html lang="en"><head><title>lib/schema/columncompiler</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/columncompiler"><meta name="groc-project-path" content="lib/schema/columncompiler.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/columncompiler.js</div></div><div id="document"><div class="segment"><div class="comments "><div class="wrapper"><p>Column Compiler
|
|
Used for designating column definitions</p>
|
|
|
|
<h2 id="during-the-table-create--alter-statements">during the table "create" / "alter" statements.</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">var</span> <span class="nx">Raw</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'../raw'</span><span class="p">);</span>
|
|
|
|
<span class="kd">function</span> <span class="nx">ColumnCompiler</span><span class="p">(</span><span class="nx">tableCompiler</span><span class="p">,</span> <span class="nx">columnBuilder</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">tableCompiler</span> <span class="o">=</span> <span class="nx">tableCompiler</span><span class="p">;</span>
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">args</span> <span class="o">=</span> <span class="nx">columnBuilder</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">type</span> <span class="o">=</span> <span class="nx">columnBuilder</span><span class="p">.</span><span class="nx">_type</span><span class="p">;</span>
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">grouped</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">groupBy</span><span class="p">(</span><span class="nx">columnBuilder</span><span class="p">.</span><span class="nx">_statements</span><span class="p">,</span> <span class="s1">'grouping'</span><span class="p">);</span>
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">modified</span> <span class="o">=</span> <span class="nx">columnBuilder</span><span class="p">.</span><span class="nx">_modifiers</span><span class="p">;</span>
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">isIncrements</span> <span class="o">=</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">toLowerCase</span><span class="p">().</span><span class="nx">indexOf</span><span class="p">(</span><span class="s1">'increments'</span><span class="p">)</span> <span class="o">!==</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span>
|
|
<span class="k">this</span><span class="p">.</span><span class="nx">initCompiler</span><span class="p">();</span>
|
|
<span class="p">}</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>To convert to sql, we first go through and build the
|
|
column as it would be in the insert statement</p></div></div><div class="code"><div class="wrapper"><span class="nx">ColumnCompiler</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">this</span><span class="p">.</span><span class="nx">pushQuery</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">compileColumn</span><span class="p">());</span>
|
|
<span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">sequence</span><span class="p">;</span>
|
|
<span class="p">};</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Compiles a column.</p></div></div><div class="code"><div class="wrapper"><span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">compileColumn</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">formatter</span><span class="p">.</span><span class="nx">wrap</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">getColumnName</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">getColumnType</span><span class="p">()</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">getModifiers</span><span class="p">();</span>
|
|
<span class="p">};</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><p>Assumes the autoincrementing key is named <code>id</code> if not otherwise specified.</p></div></div><div class="code"><div class="wrapper"><span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">getColumnName</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">value</span> <span class="o">=</span> <span class="nx">_</span><span class="p">.</span><span class="nx">first</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">args</span><span class="p">);</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">value</span><span class="p">)</span> <span class="k">return</span> <span class="nx">value</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">isIncrements</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="s1">'id'</span><span class="p">;</span>
|
|
<span class="p">}</span> <span class="k">else</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">'You did not specify a column name for the '</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">type</span> <span class="o">+</span> <span class="s1">'column.'</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">getColumnType</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">type</span> <span class="o">=</span> <span class="k">this</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">toLowerCase</span><span class="p">()];</span>
|
|
<span class="k">return</span> <span class="nx">_</span><span class="p">.</span><span class="nx">isFunction</span><span class="p">(</span><span class="nx">type</span><span class="p">)</span> <span class="o">?</span> <span class="nx">type</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">_</span><span class="p">.</span><span class="nx">rest</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">args</span><span class="p">))</span> <span class="o">:</span> <span class="nx">type</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">getModifiers</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">modifiers</span> <span class="o">=</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">type</span><span class="p">.</span><span class="nx">indexOf</span><span class="p">(</span><span class="s1">'increments'</span><span class="p">)</span> <span class="o">===</span> <span class="o">-</span><span class="mi">1</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="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">modified</span><span class="p">,</span> <span class="nx">modifier</span><span class="p">))</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">val</span> <span class="o">=</span> <span class="k">this</span><span class="p">[</span><span class="nx">modifier</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="k">this</span><span class="p">.</span><span class="nx">modified</span><span class="p">[</span><span class="nx">modifier</span><span class="p">]);</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">val</span><span class="p">)</span> <span class="nx">modifiers</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">val</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="p">}</span>
|
|
<span class="p">}</span>
|
|
<span class="k">return</span> <span class="nx">modifiers</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="s1">' '</span> <span class="o">+</span> <span class="nx">modifiers</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</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"><h2 id="types">Types</h2></div></div></div><div class="segment"><div class="code"><div class="wrapper"><span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">increments</span> <span class="o">=</span> <span class="s1">'integer not null primary key autoincrement'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">bigincrements</span> <span class="o">=</span> <span class="s1">'integer not null primary key autoincrement'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">integer</span> <span class="o">=</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">smallint</span> <span class="o">=</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">mediumint</span> <span class="o">=</span> <span class="s1">'integer'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">biginteger</span> <span class="o">=</span> <span class="s1">'bigint'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">varchar</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">length</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="s1">'varchar('</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">_num</span><span class="p">(</span><span class="nx">length</span><span class="p">,</span> <span class="mi">255</span><span class="p">)</span> <span class="o">+</span> <span class="s1">')'</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">text</span> <span class="o">=</span> <span class="s1">'text'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">tinyint</span> <span class="o">=</span> <span class="s1">'tinyint'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">floating</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">precision</span><span class="p">,</span> <span class="nx">scale</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="s1">'float('</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">_num</span><span class="p">(</span><span class="nx">precision</span><span class="p">,</span> <span class="mi">8</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">_num</span><span class="p">(</span><span class="nx">scale</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="s1">')'</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">decimal</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">precision</span><span class="p">,</span> <span class="nx">scale</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="s1">'decimal('</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">_num</span><span class="p">(</span><span class="nx">precision</span><span class="p">,</span> <span class="mi">8</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">_num</span><span class="p">(</span><span class="nx">scale</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="s1">')'</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">binary</span> <span class="o">=</span> <span class="s1">'blob'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">bool</span> <span class="o">=</span> <span class="s1">'boolean'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">date</span> <span class="o">=</span> <span class="s1">'date'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">datetime</span> <span class="o">=</span> <span class="s1">'datetime'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">time</span> <span class="o">=</span> <span class="s1">'time'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">timestamp</span> <span class="o">=</span> <span class="s1">'timestamp'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">enu</span> <span class="o">=</span> <span class="s1">'varchar'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">bit</span> <span class="o">=</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">json</span> <span class="o">=</span> <span class="s1">'text'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">uuid</span> <span class="o">=</span> <span class="s1">'char(36)'</span><span class="p">;</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">specificType</span> <span class="o">=</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="k">return</span> <span class="nx">type</span><span class="p">;</span>
|
|
<span class="p">};</span></div></div></div><div class="segment"><div class="comments "><div class="wrapper"><h2 id="modifiers">Modifiers</h2></div></div></div><div class="segment"><div class="code"><div class="wrapper"><span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">nullable</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">nullable</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">nullable</span> <span class="o">===</span> <span class="kc">false</span> <span class="o">?</span> <span class="s1">'not null'</span> <span class="o">:</span> <span class="s1">'null'</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">notNullable</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">nullable</span><span class="p">(</span><span class="kc">false</span><span class="p">);</span>
|
|
<span class="p">};</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">defaultTo</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="k">void</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="s1">''</span><span class="p">;</span>
|
|
<span class="p">}</span> <span class="k">else</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="p">{</span>
|
|
<span class="nx">value</span> <span class="o">=</span> <span class="nx">value</span><span class="p">.</span><span class="nx">toQuery</span><span class="p">();</span>
|
|
<span class="p">}</span> <span class="k">else</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">'bool'</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="s1">'false'</span><span class="p">)</span> <span class="nx">value</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
|
|
<span class="nx">value</span> <span class="o">=</span> <span class="p">(</span><span class="nx">value</span> <span class="o">?</span> <span class="mi">1</span> <span class="o">:</span> <span class="mi">0</span><span class="p">);</span>
|
|
<span class="p">}</span> <span class="k">else</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="nx">value</span> <span class="o">=</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">else</span> <span class="p">{</span>
|
|
<span class="nx">value</span> <span class="o">=</span> <span class="s2">"'"</span> <span class="o">+</span> <span class="nx">value</span> <span class="o">+</span> <span class="s2">"'"</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
<span class="k">return</span> <span class="s1">'default '</span> <span class="o">+</span> <span class="nx">value</span><span class="p">;</span>
|
|
<span class="p">};</span>
|
|
<span class="nx">ColumnCompiler</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">_num</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">fallback</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">null</span><span class="p">)</span> <span class="k">return</span> <span class="nx">fallback</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">number</span> <span class="o">=</span> <span class="nb">parseInt</span><span class="p">(</span><span class="nx">val</span><span class="p">,</span> <span class="mi">10</span><span class="p">);</span>
|
|
<span class="k">return</span> <span class="nb">isNaN</span><span class="p">(</span><span class="nx">number</span><span class="p">)</span> <span class="o">?</span> <span class="nx">fallback</span> <span class="o">:</span> <span class="nx">number</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">ColumnCompiler</span><span class="p">;</span></div></div></div></div></body></html> |