<spanclass="kd">var</span><spanclass="nx">baseSchemaGrammar</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'../schemagrammar'</span><spanclass="p">).</span><spanclass="nx">baseSchemaGrammar</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Grammar for the schema builder.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">exports</span><spanclass="p">.</span><spanclass="nx">schemaGrammar</span><spanclass="o">=</span><spanclass="nx">_</span><spanclass="p">.</span><spanclass="nx">defaults</span><spanclass="p">({</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>The possible column modifiers.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">modifiers</span><spanclass="o">:</span><spanclass="p">[</span><spanclass="s1">'Nullable'</span><spanclass="p">,</span><spanclass="s1">'Default'</span><spanclass="p">,</span><spanclass="s1">'Increment'</span><spanclass="p">],</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Returns the cleaned bindings for the current query.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">getBindings</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile the query to determine if a table exists.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileTableExists</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s2">"select * from sqlite_master where type = 'table' and name = ?"</span><spanclass="p">;</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile the query to determine if a column exists.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileColumnExists</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile a create table command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileCreateTable</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="kd">var</span><spanclass="nx">sql</span><spanclass="o">=</span><spanclass="s1">'create table '</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrapTable</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">' ('</span><spanclass="o">+</span><spanclass="nx">columns</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>SQLite forces primary keys to be added when the table is initially created
to the table's declaration here so they can be created on the tables.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">sql</span><spanclass="o">+=</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">addForeignKeys</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">);</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Get the foreign key syntax for a table creation statement.
are building, since SQLite needs foreign keys on the tables creation.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">addForeignKeys</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Get the primary key syntax for a table creation statement.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">addPrimaryKeys</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">if</span><spanclass="p">(</span><spanclass="nx">primary</span><spanclass="p">)</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Ensure that autoincrement columns aren't handled here, this is handled
alongside the autoincrement clause.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">primary</span><spanclass="p">.</span><spanclass="nx">columns</span><spanclass="o">=</span><spanclass="nx">_</span><spanclass="p">.</span><spanclass="nx">reduce</span><spanclass="p">(</span><spanclass="nx">primary</span><spanclass="p">.</span><spanclass="nx">columns</span><spanclass="p">,</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">memo</span><spanclass="p">,</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile alter table commands for adding columns</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileAdd</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile a unique key command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileUnique</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">,</span><spanclass="nx">command</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s1">'create unique index '</span><spanclass="o">+</span><spanclass="nx">command</span><spanclass="p">.</span><spanclass="nx">index</span><spanclass="o">+</span><spanclass="s1">' on '</span><spanclass="o">+</span><spanclass="nx">table</span><spanclass="o">+</span><spanclass="s1">' ('</span><spanclass="o">+</span><spanclass="nx">columns</span><spanclass="o">+</span><spanclass="s1">')'</span><spanclass="p">;</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile a plain index key command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileIndex</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">,</span><spanclass="nx">command</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s1">'create index '</span><spanclass="o">+</span><spanclass="nx">command</span><spanclass="p">.</span><spanclass="nx">index</span><spanclass="o">+</span><spanclass="s1">' on '</span><spanclass="o">+</span><spanclass="nx">table</span><spanclass="o">+</span><spanclass="s1">' ('</span><spanclass="o">+</span><spanclass="nx">columns</span><spanclass="o">+</span><spanclass="s1">')'</span><spanclass="p">;</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile a foreign key command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileForeign</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Handled on table creation...</p></div></div><divclass="code"><divclass="wrapper"><spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile a drop column command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileDropColumn</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="k">throw</span><spanclass="k">new</span><spanclass="nb">Error</span><spanclass="p">(</span><spanclass="s2">"Drop column not supported for SQLite."</span><spanclass="p">);</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile a drop unique key command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileDropUnique</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">,</span><spanclass="nx">command</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s1">'drop index '</span><spanclass="o">+</span><spanclass="nx">command</span><spanclass="p">.</span><spanclass="nx">index</span><spanclass="p">;</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile a rename table command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileRenameTable</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">,</span><spanclass="nx">command</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s1">'alter table '</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrapTable</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">' rename to '</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrapTable</span><spanclass="p">(</span><spanclass="nx">command</span><spanclass="p">.</span><spanclass="nx">to</span><spanclass="p">);</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile a rename column command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileRenameColumn</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">,</span><spanclass="nx">command</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Create the column definition for a integer type.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">typeInteger</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Create the column definition for a float type.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">typeFloat</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Create the column definition for a decimal type.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">typeDecimal</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Create the column definition for a boolean type.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">typeBoolean</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Create the column definition for a enum type.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">typeEnum</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Create the column definition for a date-time type.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">typeDateTime</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Create the column definition for a timestamp type.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">typeTimestamp</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">()</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Get the SQL for an auto-increment column modifier.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">modifyIncrement</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">,</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="p">{</span>