<!DOCTYPE html><htmllang="en"><head><title>clients/server/mysql</title></head><metahttp-equiv="Content-Type"content="text/html; charset=utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"><metaname="groc-relative-root"content="../../"><metaname="groc-document-path"content="clients/server/mysql"><metaname="groc-project-path"content="clients/server/mysql.js"><linkrel="stylesheet"type="text/css"media="all"href="../../assets/style.css"><scripttype="text/javascript"src="../../assets/behavior.js"></script><body><divid="meta"><divclass="file-path">clients/server/mysql.js</div></div><divid="document"><divclass="segment"><divclass="comments"><divclass="wrapper"><h2id="mysql">MySQL</h2></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>All of the "when.js" promise components needed in this module.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">when</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'when'</span><spanclass="p">);</span>
<spanclass="kd">var</span><spanclass="nx">nodefn</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'when/node/function'</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Other dependencies, including the <code>mysql</code> library,
which needs to be added as a dependency to the project
using this database.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">_</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'underscore'</span><spanclass="p">);</span>
<spanclass="kd">var</span><spanclass="nx">mysql</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'mysql'</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>All other local project modules needed in this scope.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">ServerBase</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'./base'</span><spanclass="p">).</span><spanclass="nx">ServerBase</span><spanclass="p">;</span>
<spanclass="kd">var</span><spanclass="nx">Helpers</span><spanclass="o">=</span><spanclass="nx">require</span><spanclass="p">(</span><spanclass="s1">'../../lib/helpers'</span><spanclass="p">).</span><spanclass="nx">Helpers</span><spanclass="p">;</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Constructor for the MySQLClient.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">exports</span><spanclass="p">.</span><spanclass="nx">Client</span><spanclass="o">=</span><spanclass="nx">ServerBase</span><spanclass="p">.</span><spanclass="nx">extend</span><spanclass="p">({</span>
<spanclass="nx">dialect</span><spanclass="o">:</span><spanclass="s1">'mysql'</span><spanclass="p">,</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Runs the query on the specified connection, providing the bindings
and any other necessary prep work.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">runQuery</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">connection</span><spanclass="p">,</span><spanclass="nx">sql</span><spanclass="p">,</span><spanclass="nx">bindings</span><spanclass="p">,</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">if</span><spanclass="p">(</span><spanclass="o">!</span><spanclass="nx">connection</span><spanclass="p">)</span><spanclass="k">throw</span><spanclass="k">new</span><spanclass="nb">Error</span><spanclass="p">(</span><spanclass="s1">'No database connection exists for the query'</span><spanclass="p">);</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Get a raw connection, called by the <code>pool</code> whenever a new
connection needs to be added to the pool.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">getRawConnection</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>Used to explicitly close a connection, called internally by the pool
when a connection times out or the pool is shutdown.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">destroyRawConnection</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">connection</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Used to check if there is a conditional query needed to complete the next one.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">advancedQuery</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">connection</span><spanclass="p">,</span><spanclass="nx">sql</span><spanclass="p">,</span><spanclass="nx">bindings</span><spanclass="p">,</span><spanclass="nx">builder</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="kd">var</span><spanclass="nx">newSql</span><spanclass="o">=</span><spanclass="nx">sql</span><spanclass="p">.</span><spanclass="nx">replace</span><spanclass="p">(</span><spanclass="s1">'alter table'</span><spanclass="p">,</span><spanclass="s1">'show fields from'</span><spanclass="p">).</span><spanclass="nx">split</span><spanclass="p">(</span><spanclass="s1">'change'</span><spanclass="p">)[</span><spanclass="mi">0</span><spanclass="p">]</span><spanclass="o">+</span><spanclass="s1">' where field = ?'</span><spanclass="p">;</span>
<spanclass="kd">var</span><spanclass="nx">column</span><spanclass="o">=</span><spanclass="nx">resp</span><spanclass="p">[</span><spanclass="mi">0</span><spanclass="p">];</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Set to the datatype we're looking to change it to...</p></div></div><divclass="code"><divclass="wrapper"><spanclass="k">return</span><spanclass="nx">sql</span><spanclass="p">.</span><spanclass="nx">replace</span><spanclass="p">(</span><spanclass="s1">'__datatype__'</span><spanclass="p">,</span><spanclass="nx">column</span><spanclass="p">[</span><spanclass="mi">0</span><spanclass="p">].</span><spanclass="nx">Type</span><spanclass="p">);</span>
<spanclass="p">});</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Extends the standard sql grammar.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">grammar</span><spanclass="o">=</span><spanclass="nx">exports</span><spanclass="p">.</span><spanclass="nx">grammar</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 keyword identifier wrapper format.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">wrapValue</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">value</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Parses the response, according to the way mySQL works...</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">handleResponse</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">,</span><spanclass="nx">response</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span><spanclass="nx">baseGrammar</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="kd">var</span><spanclass="nx">schemaGrammar</span><spanclass="o">=</span><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">'Unsigned'</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><spanclass="s1">'After'</span><spanclass="p">,</span><spanclass="s1">'Comment'</span><spanclass="p">],</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Handle response for the schema.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">handleResponse</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">builder</span><spanclass="p">,</span><spanclass="nx">resp</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">blueprint</span><spanclass="p">,</span><spanclass="nx">command</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">if</span><spanclass="p">(</span><spanclass="nx">conn</span><spanclass="p">.</span><spanclass="nx">charset</span><spanclass="p">)</span><spanclass="nx">sql</span><spanclass="o">+=</span><spanclass="s1">' default character set '</span><spanclass="o">+</span><spanclass="nx">conn</span><spanclass="p">.</span><spanclass="nx">charset</span><spanclass="p">;</span>
<spanclass="p">}</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Checks if the table is commented</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">isCommented</span><spanclass="o">=</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">getCommandByName</span><spanclass="p">(</span><spanclass="nx">blueprint</span><spanclass="p">,</span><spanclass="s1">'comment'</span><spanclass="p">);</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>TODO: Handle max comment length.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">maxTableCommentLength</span><spanclass="o">=</span><spanclass="mi">60</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="nx">blueprint</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s1">'select * from information_schema.tables where table_schema = ? and table_name = ?'</span><spanclass="p">;</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile a 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">blueprint</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s1">'show columns from '</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrapTable</span><spanclass="p">(</span><spanclass="nx">blueprint</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">' like ?'</span><spanclass="p">;</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile an add command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileAdd</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">blueprint</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Compile a primary key command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compilePrimary</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">blueprint</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>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">blueprint</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>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">blueprint</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>Compile an index creation command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileKey</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">blueprint</span><spanclass="p">,</span><spanclass="nx">command</span><spanclass="p">,</span><spanclass="nx">type</span><spanclass="p">)</span><spanclass="p">{</span>
<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="nx">blueprint</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>Compile a drop primary key command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileDropPrimary</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">blueprint</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">blueprint</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">' drop primary key'</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">blueprint</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>Compile a drop index command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileDropIndex</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">blueprint</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">blueprint</span><spanclass="p">)</span><spanclass="o">+</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 drop foreign key command.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileDropForeign</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">blueprint</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">blueprint</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s2">" drop foreign key "</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">blueprint</span><spanclass="p">,</span><spanclass="nx">command</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s1">'rename table '</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrapTable</span><spanclass="p">(</span><spanclass="nx">blueprint</span><spanclass="p">)</span><spanclass="o">+</span><spanclass="s1">' 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">blueprint</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>Compiles the comment on the table.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">compileComment</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">blueprint</span><spanclass="p">,</span><spanclass="nx">command</span><spanclass="p">)</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Handled on create table...</p></div></div><divclass="code"><divclass="wrapper"><spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Create the column definition for a text type.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">typeText</span><spanclass="o">:</span><spanclass="kd">function</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>Create the column type definition for a bigint type.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">typeBigInteger</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 integer type.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">typeInteger</span><spanclass="o">:</span><spanclass="kd">function</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>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="nx">column</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="nx">column</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="nx">column</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>Create the column definition for a bit type.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">typeBit</span><spanclass="o">:</span><spanclass="kd">function</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>Get the SQL for an unsigned column modifier.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">modifyUnsigned</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">blueprint</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>Get the SQL for a default column modifier.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">modifyDefault</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">blueprint</span><spanclass="p">,</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>TODO - no default on blob/text</p></div></div><divclass="code"><divclass="wrapper"><spanclass="k">if</span><spanclass="p">(</span><spanclass="nx">column</span><spanclass="p">.</span><spanclass="nx">defaultValue</span><spanclass="o">!=</span><spanclass="k">void</span><spanclass="mi">0</span><spanclass="o">&&</span><spanclass="nx">column</span><spanclass="p">.</span><spanclass="nx">type</span><spanclass="o">!=</span><spanclass="s1">'blob'</span><spanclass="o">&&</span><spanclass="nx">column</span><spanclass="p">.</span><spanclass="nx">type</span><spanclass="p">.</span><spanclass="nx">indexOf</span><spanclass="p">(</span><spanclass="s1">'text'</span><spanclass="p">)</span><spanclass="o">===</span><spanclass="o">-</span><spanclass="mi">1</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">blueprint</span><spanclass="p">,</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s1">' not null auto_increment primary key'</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 "after" column modifier.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">modifyAfter</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">blueprint</span><spanclass="p">,</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="p">{</span>
<spanclass="k">return</span><spanclass="s1">' after '</span><spanclass="o">+</span><spanclass="k">this</span><spanclass="p">.</span><spanclass="nx">wrap</span><spanclass="p">(</span><spanclass="nx">column</span><spanclass="p">.</span><spanclass="nx">isAfter</span><spanclass="p">);</span>
<spanclass="p">}</span>
<spanclass="p">},</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>Get the SQL for a comment column modifier.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="nx">modifyComment</span><spanclass="o">:</span><spanclass="kd">function</span><spanclass="p">(</span><spanclass="nx">blueprint</span><spanclass="p">,</span><spanclass="nx">column</span><spanclass="p">)</span><spanclass="p">{</span></div></div></div><divclass="segment"><divclass="comments"><divclass="wrapper"><p>TODO: Look into limiting this length.</p></div></div><divclass="code"><divclass="wrapper"><spanclass="kd">var</span><spanclass="nx">maxColumnCommentLength</span><spanclass="o">=</span><spanclass="mi">255</span><spanclass="p">;</span>