loopback-datasource-juggler/coverage.html

58 lines
83 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/js/google-code-prettify/prettify.css">
<style>
code { background: none; color: none; border: none; };
li code { white-space: pre-wrap; margin: 0; padding: 0; border: 0; border-radius: 0; line-height: 18px }
.covered { background: #cfc; }
.uncovered { background: #fcc; }
a, a:visited { color:black; font-size:14pt; }
pre li .hits {
float: right;
margin-left: 10px;
padding: 2px 4px;
background: linear-gradient(#222, #666);
background: -webkit-gradient(linear, 0 0, 0 bottom, from(#222), to(#666));
background: -moz-linear-gradient(#222, #666);
background: linear-gradient(#222, #666);
color: white;
font-family: Helvetica, "Helvetica Neue", Arial, sans-serif;
font-size: 10px;
font-weight: bold;
text-align: center;
border-radius: 3px;
line-height: 10px;
}
pre {
border: none;
background: none;
}
.S{color:red}
.func{color:blue}
.C{color:orange}
.kwrd{font-weight:bold}
.R{color:gray}
</style>
<script>
function init() {
var id = location.href.split('#')[1];
if (id)
document.getElementById(id).style.display = '';
}
document.addEventListener('DOMContentLoaded', init);
</script>
</head>
<body>
<div class="container">
<div class="row"><div class="span5"><a href="#lib-adapters-postgres-js" class="filename" name="lib-adapters-postgres-js" onclick="var el = document.getElementById('lib-adapters-postgres-js'); el.style.display = el.style.display ? '' : 'none';">lib/adapters/postgres.js</a></div><div class="span6"><div class="progress progress-danger"> <div class="bar" style="width: 30%"><strong>30%</strong> [281/548]</div></div></div></div><div id="lib-adapters-postgres-js" style="display:none;"><pre><ol><li class="covered"><code><span class="kwrd">var</span> safeRequire = <span class="func">require</span>(<span class="S">'../utils'</span>).safeRequire;</code></li><li class=""><code></code></li><li class=""><code><span class="C">/**</span></code></li><li class=""><code><span class="C"> * Module dependencies</span></code></li><li class=""><code><span class="C"> */</span></code></li><li class="covered"><code><span class="kwrd">var</span> pg = <span class="func">safeRequire</span>(<span class="S">'pg'</span>);</code><span class="hits">1</span></li><li class="covered"><code><span class="kwrd">var</span> BaseSQL = <span class="func">require</span>(<span class="S">'../sql'</span>);</code><span class="hits">1</span></li><li class="covered"><code><span class="kwrd">var</span> util = <span class="func">require</span>(<span class="S">'util'</span>);</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>exports.initialize = <span class="kwrd">function</span> <span class="func">initializeSchema</span>(schema, callback) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">if</span> (!pg) <span class="kwrd">return</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class="covered"><code> <span class="kwrd">var</span> Client = pg.Client;</code><span class="hits">1</span></li><li class="covered"><code> <span class="kwrd">var</span> s = schema.settings;</code><span class="hits">1</span></li><li class=""><code> schema.client = <span class="kwrd">new</span> <span class="func">Client</span>(s.url ? s.url : <span class="gly">{</span></code></li><li class=""><code> host: s.host <span class="gly">|</span><span class="gly">|</span> <span class="S">'localhost'</span>,</code></li><li class=""><code> port: s.port <span class="gly">|</span><span class="gly">|</span> 5432,</code></li><li class=""><code> user: s.username,</code></li><li class=""><code> password: s.password,</code></li><li class=""><code> database: s.database,</code></li><li class=""><code> debug: s.debug</code></li><li class="covered"><code> <span class="gly">}</span>);</code><span class="hits">1</span></li><li class="covered"><code> schema.adapter = <span class="kwrd">new</span> <span class="func">PG</span>(schema.client);</code><span class="hits">1</span></li><li class=""><code></code></li><li class="covered"><code> schema.adapter.<span class="func">connect</span>(callback);</code><span class="hits">1</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">PG</span>(client) <span class="gly">{</span></code></li><li class="covered"><code> this._models = <span class="gly">{</span><span class="gly">}</span>;</code><span class="hits">1</span></li><li class="covered"><code> this.client = client;</code><span class="hits">1</span></li><li class=""><code><span class="gly">}</span></code></li><li class=""><code></code></li><li class="covered"><code><span class="func">require</span>(<span class="S">'util'</span>).<span class="func">inherits</span>(PG, BaseSQL);</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>PG.prototype.connect = <span class="kwrd">function</span> (callback) <span class="gly">{</span></code></li><li class=""><code> this.client.<span class="func">connect</span>(<span class="kwrd">function</span> (err) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (!err)<span class="gly">{</span></code></li><li class="covered"><code> <span class="func">callback</span>();</code><span class="hits">1</span></li><li class=""><code> <span class="gly">}</span>else<span class="gly">{</span></code></li><li class="uncovered"><code> console.<span class="func">error</span>(err);</code></li><li class="uncovered"><code> throw err;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="covered"><code> <span class="gly">}</span>);</code><span class="hits">1</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>PG.prototype.query = <span class="kwrd">function</span> (sql, callback) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">var</span> time = Date.<span class="func">now</span>();</code><span class="hits">8</span></li><li class="covered"><code> <span class="kwrd">var</span> log = this.log;</code><span class="hits">8</span></li><li class=""><code> this.client.<span class="func">query</span>(sql, <span class="kwrd">function</span> (err, data) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">if</span> (log) <span class="func">log</span>(sql, time);</code><span class="hits">8</span></li><li class="covered"><code> <span class="func">callback</span>(err, data ? data.rows : null);</code><span class="hits">8</span></li><li class="covered"><code> <span class="gly">}</span>);</code><span class="hits">8</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="C">/**</span></code></li><li class=""><code><span class="C"> * Must invoke callback(err, id)</span></code></li><li class=""><code><span class="C"> */</span></code></li><li class=""><code>PG.prototype.create = <span class="kwrd">function</span> (model, data, callback) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">var</span> fields = this.<span class="func">toFields</span>(model, data, true);</code><span class="hits">4</span></li><li class="covered"><code> <span class="kwrd">var</span> sql = <span class="S">'INSERT INTO '</span> + this.<span class="func">tableEscaped</span>(model) + <span class="S">''</span>;</code><span class="hits">4</span></li><li class=""><code> <span class="kwrd">if</span> (fields) <span class="gly">{</span></code></li><li class="covered"><code> sql += <span class="S">' '</span> + fields;</code><span class="hits">4</span></li><li class=""><code> <span class="gly">}</span> else <span class="gly">{</span></code></li><li class="uncovered"><code> sql += <span class="S">' VALUES ()'</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="covered"><code> sql += <span class="S">' RETURNING id'</span>;</code><span class="hits">4</span></li><li class=""><code> this.<span class="func">query</span>(sql, <span class="kwrd">function</span> (err, info) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">if</span> (err) <span class="kwrd">return</span> <span class="func">callback</span>(err);</code><span class="hits">4</span></li><li class="covered"><code> <span class="func">callback</span>(err, info &amp;&amp; info<span class="gly">[</span>0<span class="gly">]</span> &amp;&amp; info<span class="gly">[</span>0<span class="gly">]</span>.id);</code><span class="hits">4</span></li><li class="covered"><code> <span class="gly">}</span>);</code><span class="hits">4</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>PG.prototype.updateOrCreate = <span class="kwrd">function</span> (model, data, callback) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> pg = this;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> fieldsNames = <span class="gly">[</span><span class="gly">]</span>;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> fieldValues = <span class="gly">[</span><span class="gly">]</span>;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> combined = <span class="gly">[</span><span class="gly">]</span>;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> props = this._models<span class="gly">[</span>model<span class="gly">]</span>.properties;</code></li><li class=""><code> Object.<span class="func">keys</span>(data).<span class="func">forEach</span>(<span class="kwrd">function</span> (key) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (props<span class="gly">[</span>key<span class="gly">]</span> <span class="gly">|</span><span class="gly">|</span> key === <span class="S">'id'</span>) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> k = <span class="S">'"'</span> + key + <span class="S">'"'</span>;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> v;</code></li><li class=""><code> <span class="kwrd">if</span> (key !== <span class="S">'id'</span>) <span class="gly">{</span></code></li><li class="uncovered"><code> v = pg.<span class="func">toDatabase</span>(props<span class="gly">[</span>key<span class="gly">]</span>, data<span class="gly">[</span>key<span class="gly">]</span>);</code></li><li class=""><code> <span class="gly">}</span> else <span class="gly">{</span></code></li><li class="uncovered"><code> v = data<span class="gly">[</span>key<span class="gly">]</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> fieldsNames.<span class="func">push</span>(k);</code></li><li class="uncovered"><code> fieldValues.<span class="func">push</span>(v);</code></li><li class="uncovered"><code> <span class="kwrd">if</span> (key !== <span class="S">'id'</span>) combined.<span class="func">push</span>(k + <span class="S">' = '</span> + v);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class=""><code></code></li><li class="uncovered"><code> <span class="kwrd">var</span> sql = <span class="S">'UPDATE '</span> + this.<span class="func">tableEscaped</span>(model);</code></li><li class="uncovered"><code> sql += <span class="S">' SET '</span> + combined + <span class="S">' WHERE id = '</span> + data.id + <span class="S">';'</span>;</code></li><li class="uncovered"><code> sql += <span class="S">' INSERT INTO '</span> + this.<span class="func">tableEscaped</span>(model);</code></li><li class="uncovered"><code> sql += <span class="S">' ('</span> + fieldsNames.jo<span class="kwrd">in</span>(<span class="S">', '</span>) + <span class="S">')'</span>;</code></li><li class=""><code> sql += <span class="S">' SELECT '</span> + fieldValues.jo<span class="kwrd">in</span>(<span class="S">', '</span>)</code></li><li class="uncovered"><code> sql += <span class="S">' WHERE NOT EXISTS (SELECT 1 FROM '</span> + this.<span class="func">tableEscaped</span>(model);</code></li><li class="uncovered"><code> sql += <span class="S">' WHERE id = '</span> + data.id + <span class="S">') RETURNING id'</span>;</code></li><li class=""><code></code></li><li class=""><code> this.<span class="func">query</span>(sql, <span class="kwrd">function</span> (err, info) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (!err &amp;&amp; info &amp;&amp; info<span class="gly">[</span>0<span class="gly">]</span> &amp;&amp; info<span class="gly">[</span>0<span class="gly">]</span>.id) <span class="gly">{</span></code></li><li class="uncovered"><code> data.id = info<span class="gly">[</span>0<span class="gly">]</span>.id;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="func">callback</span>(err, data);</code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>PG.prototype.toFields = <span class="kwrd">function</span> (model, data, forCreate) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">var</span> fields = <span class="gly">[</span><span class="gly">]</span>;</code><span class="hits">4</span></li><li class="covered"><code> <span class="kwrd">var</span> props = this._models<span class="gly">[</span>model<span class="gly">]</span>.properties;</code><span class="hits">4</span></li><li class=""><code> </code></li><li class=""><code> <span class="kwrd">if</span>(forCreate)<span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">var</span> columns = <span class="gly">[</span><span class="gly">]</span>;</code><span class="hits">4</span></li><li class=""><code> Object.<span class="func">keys</span>(data).<span class="func">forEach</span>(<span class="kwrd">function</span> (key) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (props<span class="gly">[</span>key<span class="gly">]</span>) <span class="gly">{</span></code></li><li class="covered"><code> columns.<span class="func">push</span>(<span class="S">'"'</span> + key + <span class="S">'"'</span>);</code><span class="hits">8</span></li><li class="covered"><code> fields.<span class="func">push</span>(this.<span class="func">toDatabase</span>(props<span class="gly">[</span>key<span class="gly">]</span>, data<span class="gly">[</span>key<span class="gly">]</span>));</code><span class="hits">8</span></li><li class=""><code> <span class="gly">}</span></code></li><li class="covered"><code> <span class="gly">}</span>.<span class="func">bind</span>(this));</code><span class="hits">4</span></li><li class="covered"><code> <span class="kwrd">return</span> <span class="S">'('</span> + columns.jo<span class="kwrd">in</span>(<span class="S">','</span>) + <span class="S">') VALUES ('</span>+fields.jo<span class="kwrd">in</span>(<span class="S">','</span>)+<span class="S">')'</span>;</code><span class="hits">4</span></li><li class=""><code> <span class="gly">}</span>else<span class="gly">{</span></code></li><li class=""><code> Object.<span class="func">keys</span>(data).<span class="func">forEach</span>(<span class="kwrd">function</span> (key) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (props<span class="gly">[</span>key<span class="gly">]</span>) <span class="gly">{</span></code></li><li class="uncovered"><code> fields.<span class="func">push</span>(<span class="S">'"'</span> + key + <span class="S">'" = '</span> + this.<span class="func">toDatabase</span>(props<span class="gly">[</span>key<span class="gly">]</span>, data<span class="gly">[</span>key<span class="gly">]</span>));</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="gly">}</span>.<span class="func">bind</span>(this));</code></li><li class="uncovered"><code> <span class="kwrd">return</span> fields.jo<span class="kwrd">in</span>(<span class="S">','</span>);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">dateToPostgres</span>(val) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">return</span> <span class="gly">[</span></code></li><li class=""><code> val.<span class="func">getUTCFullYear</span>(),</code></li><li class=""><code> <span class="func">fz</span>(val.<span class="func">getUTCMonth</span>() + 1),</code></li><li class=""><code> <span class="func">fz</span>(val.<span class="func">getUTCDate</span>())</code></li><li class=""><code> <span class="gly">]</span>.jo<span class="kwrd">in</span>(<span class="S">'-'</span>) + <span class="S">' '</span> + <span class="gly">[</span></code></li><li class=""><code> <span class="func">fz</span>(val.<span class="func">getUTCHours</span>()),</code></li><li class=""><code> <span class="func">fz</span>(val.<span class="func">getUTCMinutes</span>()),</code></li><li class=""><code> <span class="func">fz</span>(val.<span class="func">getUTCSeconds</span>())</code></li><li class="uncovered"><code> <span class="gly">]</span>.jo<span class="kwrd">in</span>(<span class="S">':'</span>);</code></li><li class=""><code></code></li><li class=""><code> <span class="kwrd">function</span> <span class="func">fz</span>(v) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span> v &lt; 10 ? <span class="S">'0'</span> + v : v;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code><span class="gly">}</span></code></li><li class=""><code></code></li><li class=""><code>PG.prototype.toDatabase = <span class="kwrd">function</span> (prop, val) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (val === null) <span class="gly">{</span></code></li><li class=""><code> // Postgres complains with NULLs <span class="kwrd">in</span> not null columns</code></li><li class=""><code> // <span class="kwrd">If</span> we have an autoincrement value, <span class="kwrd">return</span> DEFAULT instead</code></li><li class=""><code> <span class="kwrd">if</span>( prop.autoIncrement ) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span> <span class="S">'DEFAULT'</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> else <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span> <span class="S">'NULL'</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> <span class="kwrd">if</span> (val.constructor.name === <span class="S">'Object'</span>) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">var</span> operator = Object.<span class="func">keys</span>(val)<span class="gly">[</span>0<span class="gly">]</span></code></li><li class="uncovered"><code> val = val<span class="gly">[</span>operator<span class="gly">]</span>;</code></li><li class=""><code> <span class="kwrd">if</span> (operator === <span class="S">'between'</span>) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span> this.<span class="func">toDatabase</span>(prop, val<span class="gly">[</span>0<span class="gly">]</span>) + <span class="S">' AND '</span> + this.<span class="func">toDatabase</span>(prop, val<span class="gly">[</span>1<span class="gly">]</span>);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> <span class="gly">}</span></code></li><li class="covered"><code> <span class="kwrd">if</span> (prop.type.name === <span class="S">'Number'</span>) <span class="kwrd">return</span> val;</code><span class="hits">4</span></li><li class=""><code> <span class="kwrd">if</span> (prop.type.name === <span class="S">'Date'</span>) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (!val) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span>( prop.autoIncrement ) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span> <span class="S">'DEFAULT'</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> else <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span> <span class="S">'NULL'</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> <span class="kwrd">if</span> (!val.toUTCString) <span class="gly">{</span></code></li><li class="uncovered"><code> val = <span class="kwrd">new</span> <span class="func">Date</span>(val);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span> <span class="func">escape</span>(<span class="func">dateToPostgres</span>(val));</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="covered"><code> <span class="kwrd">return</span> <span class="func">escape</span>(val.<span class="func">toString</span>());</code><span class="hits">4</span></li><li class=""><code></code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>PG.prototype.fromDatabase = <span class="kwrd">function</span> (model, data) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">if</span> (!data) <span class="kwrd">return</span> null;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> props = this._models<span class="gly">[</span>model<span class="gly">]</span>.properties;</code></li><li class=""><code> Object.<span class="func">keys</span>(data).<span class="func">forEach</span>(<span class="kwrd">function</span> (key) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> val = data<span class="gly">[</span>key<span class="gly">]</span>;</code></li><li class="uncovered"><code> data<span class="gly">[</span>key<span class="gly">]</span> = val;</code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="uncovered"><code> <span class="kwrd">return</span> data;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>PG.prototype.escapeName = <span class="kwrd">function</span> (name) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">return</span> <span class="S">'"'</span> + name.<span class="func">replace</span>(/\./g, <span class="S">'"."'</span>) + <span class="S">'"'</span>;</code><span class="hits">6</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>PG.prototype.all = <span class="kwrd">function</span> <span class="func">all</span>(model, filter, callback) <span class="gly">{</span></code></li><li class=""><code> this.<span class="func">query</span>(<span class="S">'SELECT * FROM '</span> + this.<span class="func">tableEscaped</span>(model) + <span class="S">' '</span> + this.<span class="func">toFilter</span>(model, filter), <span class="kwrd">function</span> (err, data) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (err) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span> <span class="func">callback</span>(err, <span class="gly">[</span><span class="gly">]</span>);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="func">callback</span>(err, data);</code></li><li class="uncovered"><code> <span class="gly">}</span>.<span class="func">bind</span>(this));</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>PG.prototype.toFilter = <span class="kwrd">function</span> (model, filter) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (filter &amp;&amp; <span class="kwrd">typeof</span> filter.where === <span class="S">'function'</span>) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span> <span class="func">filter</span>();</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="kwrd">if</span> (!filter) <span class="kwrd">return</span> <span class="S">''</span>;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> props = this._models<span class="gly">[</span>model<span class="gly">]</span>.properties;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> out = <span class="S">''</span>;</code></li><li class=""><code> <span class="kwrd">if</span> (filter.where) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> fields = <span class="gly">[</span><span class="gly">]</span>;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> conds = filter.where;</code></li><li class=""><code> Object.<span class="func">keys</span>(conds).<span class="func">forEach</span>(<span class="kwrd">function</span> (key) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (filter.where<span class="gly">[</span>key<span class="gly">]</span> &amp;&amp; filter.where<span class="gly">[</span>key<span class="gly">]</span>.constructor.name === <span class="S">'RegExp'</span>) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> <span class="kwrd">if</span> (props<span class="gly">[</span>key<span class="gly">]</span>) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> filterValue = this.<span class="func">toDatabase</span>(props<span class="gly">[</span>key<span class="gly">]</span>, filter.where<span class="gly">[</span>key<span class="gly">]</span>);</code></li><li class=""><code> <span class="kwrd">if</span> (filterValue === <span class="S">'NULL'</span>) <span class="gly">{</span></code></li><li class="uncovered"><code> fields.<span class="func">push</span>(<span class="S">'"'</span> + key + <span class="S">'" IS '</span> + filterValue);</code></li><li class=""><code> <span class="gly">}</span> else <span class="kwrd">if</span> (conds<span class="gly">[</span>key<span class="gly">]</span>.constructor.name === <span class="S">'Object'</span>) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> condType = Object.<span class="func">keys</span>(conds<span class="gly">[</span>key<span class="gly">]</span>)<span class="gly">[</span>0<span class="gly">]</span>;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> sqlCond = key;</code></li><li class=""><code> <span class="kwrd">switch</span> (condType) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">case</span> <span class="S">'gt'</span>:</code></li><li class="uncovered"><code> sqlCond += <span class="S">' &gt; '</span>;</code></li><li class="uncovered"><code> <span class="kwrd">break</span>;</code></li><li class=""><code> <span class="kwrd">case</span> <span class="S">'gte'</span>:</code></li><li class="uncovered"><code> sqlCond += <span class="S">' &gt;= '</span>;</code></li><li class="uncovered"><code> <span class="kwrd">break</span>;</code></li><li class=""><code> <span class="kwrd">case</span> <span class="S">'lt'</span>:</code></li><li class="uncovered"><code> sqlCond += <span class="S">' &lt; '</span>;</code></li><li class="uncovered"><code> <span class="kwrd">break</span>;</code></li><li class=""><code> <span class="kwrd">case</span> <span class="S">'lte'</span>:</code></li><li class="uncovered"><code> sqlCond += <span class="S">' &lt;= '</span>;</code></li><li class="uncovered"><code> <span class="kwrd">break</span>;</code></li><li class=""><code> <span class="kwrd">case</span> <span class="S">'between'</span>:</code></li><li class="uncovered"><code> sqlCond += <span class="S">' BETWEEN '</span>;</code></li><li class="uncovered"><code> <span class="kwrd">break</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> sqlCond += filterValue;</code></li><li class="uncovered"><code> fields.<span class="func">push</span>(sqlCond);</code></li><li class=""><code> <span class="gly">}</span> else <span class="gly">{</span></code></li><li class="uncovered"><code> fields.<span class="func">push</span>(<span class="S">'"'</span> + key + <span class="S">'" = '</span> + filterValue);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="gly">}</span>.<span class="func">bind</span>(this));</code></li><li class=""><code> <span class="kwrd">if</span> (fields.length) <span class="gly">{</span></code></li><li class="uncovered"><code> out += <span class="S">' WHERE '</span> + fields.jo<span class="kwrd">in</span>(<span class="S">' AND '</span>);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code></code></li><li class=""><code> <span class="kwrd">if</span> (filter.order) <span class="gly">{</span></code></li><li class="uncovered"><code> out += <span class="S">' ORDER BY '</span> + filter.order;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code></code></li><li class=""><code> <span class="kwrd">if</span> (filter.limit) <span class="gly">{</span></code></li><li class="uncovered"><code> out += <span class="S">' LIMIT '</span> + filter.limit + <span class="S">' '</span> + (filter.offset <span class="gly">|</span><span class="gly">|</span> <span class="S">''</span>);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code></code></li><li class="uncovered"><code> <span class="kwrd">return</span> out;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">getTableStatus</span>(model, cb)<span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">function</span> <span class="func">decoratedCallback</span>(err, data)<span class="gly">{</span></code></li><li class=""><code> data.<span class="func">forEach</span>(<span class="kwrd">function</span>(field)<span class="gly">{</span></code></li><li class="uncovered"><code> field.Type = <span class="func">mapPostgresDatatypes</span>(field.Type);</code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="uncovered"><code> <span class="func">cb</span>(err, data);</code></li><li class="uncovered"><code> <span class="gly">}</span>;</code></li><li class="uncovered"><code> this.<span class="func">query</span>(<span class="S">'SELECT column_name as "Field", udt_name as "Type", is_nullable as "Null", column_default as "Default" FROM information_schema.COLUMNS WHERE table_name = \''</span> + this.<span class="func">table</span>(model) + <span class="S">'\''</span>, decoratedCallback);</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>PG.prototype.autoupdate = <span class="kwrd">function</span> (cb) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> self = this;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> wait = 0;</code></li><li class=""><code> Object.<span class="func">keys</span>(this._models).<span class="func">forEach</span>(<span class="kwrd">function</span> (model) <span class="gly">{</span></code></li><li class="uncovered"><code> wait += 1;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> fields;</code></li><li class=""><code> getTableStatus.<span class="func">call</span>(self, model, <span class="kwrd">function</span>(err, fields)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">if</span>(err) console.<span class="func">log</span>(err);</code></li><li class="uncovered"><code> self.<span class="func">alterTable</span>(model, fields, done);</code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class=""><code></code></li><li class=""><code> <span class="kwrd">function</span> <span class="func">done</span>(err) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (err) <span class="gly">{</span></code></li><li class="uncovered"><code> console.<span class="func">log</span>(err);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> <span class="kwrd">if</span> (--wait === 0 &amp;&amp; cb) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="func">cb</span>();</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="gly">}</span>;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>PG.prototype.isActual = <span class="kwrd">function</span>(cb) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> self = this;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> wait = 0;</code></li><li class="uncovered"><code> changes = <span class="gly">[</span><span class="gly">]</span>;</code></li><li class=""><code> Object.<span class="func">keys</span>(this._models).<span class="func">forEach</span>(<span class="kwrd">function</span> (model) <span class="gly">{</span></code></li><li class="uncovered"><code> wait += 1;</code></li><li class=""><code> getTableStatus.<span class="func">call</span>(self, model, <span class="kwrd">function</span>(err, fields)<span class="gly">{</span></code></li><li class="uncovered"><code> changes = changes.<span class="func">concat</span>(getPendingChanges.<span class="func">call</span>(self, model, fields));</code></li><li class="uncovered"><code> <span class="func">done</span>(err, changes);</code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class=""><code></code></li><li class=""><code> <span class="kwrd">function</span> <span class="func">done</span>(err, fields) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (err) <span class="gly">{</span></code></li><li class="uncovered"><code> console.<span class="func">log</span>(err);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> <span class="kwrd">if</span> (--wait === 0 &amp;&amp; cb) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> actual = (changes.length === 0);</code></li><li class="uncovered"><code> <span class="func">cb</span>(null, actual);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="gly">}</span>;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>PG.prototype.alterTable = <span class="kwrd">function</span> (model, actualFields, done) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> self = this;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> pendingChanges = getPendingChanges.<span class="func">call</span>(self, model, actualFields);</code></li><li class="uncovered"><code> applySqlChanges.<span class="func">call</span>(self, model, pendingChanges, done);</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">getPendingChanges</span>(model, actualFields)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> sql = <span class="gly">[</span><span class="gly">]</span>;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> self = this;</code></li><li class="uncovered"><code> sql = sql.<span class="func">concat</span>(getColumnsToAdd.<span class="func">call</span>(self, model, actualFields));</code></li><li class="uncovered"><code> sql = sql.<span class="func">concat</span>(getPropertiesToModify.<span class="func">call</span>(self, model, actualFields));</code></li><li class="uncovered"><code> sql = sql.<span class="func">concat</span>(getColumnsToDrop.<span class="func">call</span>(self, model, actualFields));</code></li><li class="uncovered"><code> <span class="kwrd">return</span> sql;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">getColumnsToAdd</span>(model, actualFields)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> self = this;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> m = self._models<span class="gly">[</span>model<span class="gly">]</span>;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> propNames = Object.<span class="func">keys</span>(m.properties);</code></li><li class="uncovered"><code> <span class="kwrd">var</span> sql = <span class="gly">[</span><span class="gly">]</span>;</code></li><li class=""><code> propNames.<span class="func">forEach</span>(<span class="kwrd">function</span> (propName) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> found = searchForPropertyInActual.<span class="func">call</span>(self, propName, actualFields);</code></li><li class=""><code> <span class="kwrd">if</span>(!found &amp;&amp; propertyHasNotBeenDeleted.<span class="func">call</span>(self, model, propName))<span class="gly">{</span></code></li><li class="uncovered"><code> sql.<span class="func">push</span>(addPropertyToActual.<span class="func">call</span>(self, model, propName));</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="uncovered"><code> <span class="kwrd">return</span> sql;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">addPropertyToActual</span>(model, propName)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> self = this;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> p = self._models<span class="gly">[</span>model<span class="gly">]</span>.properties<span class="gly">[</span>propName<span class="gly">]</span>;</code></li><li class="uncovered"><code> sqlCommand = <span class="S">'ADD COLUMN "'</span> + propName + <span class="S">'" '</span> + <span class="func">datatype</span>(p) + <span class="S">" "</span> + (propertyCanBeNull.<span class="func">call</span>(self, model, propName) ? <span class="S">""</span> : <span class="S">" NOT NULL"</span>);</code></li><li class="uncovered"><code> <span class="kwrd">return</span> sqlCommand;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">searchForPropertyInActual</span>(propName, actualFields)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> found = false;</code></li><li class=""><code> actualFields.<span class="func">forEach</span>(<span class="kwrd">function</span> (f) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (f.Field === propName) <span class="gly">{</span></code></li><li class="uncovered"><code> found = f;</code></li><li class="uncovered"><code> <span class="kwrd">return</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="uncovered"><code> <span class="kwrd">return</span> found;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">getPropertiesToModify</span>(model, actualFields)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> self = this;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> sql = <span class="gly">[</span><span class="gly">]</span>;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> m = self._models<span class="gly">[</span>model<span class="gly">]</span>;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> propNames = Object.<span class="func">keys</span>(m.properties);</code></li><li class="uncovered"><code> <span class="kwrd">var</span> found;</code></li><li class=""><code> propNames.<span class="func">forEach</span>(<span class="kwrd">function</span> (propName) <span class="gly">{</span></code></li><li class="uncovered"><code> found = searchForPropertyInActual.<span class="func">call</span>(self, propName, actualFields);</code></li><li class=""><code> <span class="kwrd">if</span>(found &amp;&amp; propertyHasNotBeenDeleted.<span class="func">call</span>(self, model, propName))<span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (<span class="func">datatypeChanged</span>(propName, found)) <span class="gly">{</span></code></li><li class="uncovered"><code> sql.<span class="func">push</span>(modifyDatatypeInActual.<span class="func">call</span>(self, model, propName));</code></li><li class=""><code> <span class="gly">}</span> </code></li><li class=""><code> <span class="kwrd">if</span> (<span class="func">nullabilityChanged</span>(propName, found))<span class="gly">{</span></code></li><li class="uncovered"><code> sql.<span class="func">push</span>(modifyNullabilityInActual.<span class="func">call</span>(self, model, propName));</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class=""><code></code></li><li class="uncovered"><code> <span class="kwrd">return</span> sql;</code></li><li class=""><code></code></li><li class=""><code> <span class="kwrd">function</span> <span class="func">datatypeChanged</span>(propName, oldSettings)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> newSettings = m.properties<span class="gly">[</span>propName<span class="gly">]</span>;</code></li><li class="uncovered"><code> <span class="kwrd">if</span>(!newSettings) <span class="kwrd">return</span> false;</code></li><li class="uncovered"><code> <span class="kwrd">return</span> oldSettings.Type.toLower<span class="kwrd">Case</span>() !== <span class="func">datatype</span>(newSettings);</code></li><li class="uncovered"><code> <span class="gly">}</span>;</code></li><li class=""><code></code></li><li class=""><code> <span class="kwrd">function</span> <span class="func">nullabilityChanged</span>(propName, oldSettings)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> newSettings = m.properties<span class="gly">[</span>propName<span class="gly">]</span>;</code></li><li class="uncovered"><code> <span class="kwrd">if</span>(!newSettings) <span class="kwrd">return</span> false;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> changed = false;</code></li><li class="uncovered"><code> <span class="kwrd">if</span> (oldSettings.Null === <span class="S">'YES'</span> &amp;&amp; (newSettings.allowNull === false <span class="gly">|</span><span class="gly">|</span> newSettings.null === false)) changed = true;</code></li><li class="uncovered"><code> <span class="kwrd">if</span> (oldSettings.Null === <span class="S">'NO'</span> &amp;&amp; !(newSettings.allowNull === false <span class="gly">|</span><span class="gly">|</span> newSettings.null === false)) changed = true;</code></li><li class="uncovered"><code> <span class="kwrd">return</span> changed;</code></li><li class="uncovered"><code> <span class="gly">}</span>;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">modifyDatatypeInActual</span>(model, propName) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> self = this;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> sqlCommand = <span class="S">'ALTER COLUMN "'</span> + propName + <span class="S">'" TYPE '</span> + <span class="func">datatype</span>(self._models<span class="gly">[</span>model<span class="gly">]</span>.properties<span class="gly">[</span>propName<span class="gly">]</span>);</code></li><li class="uncovered"><code> <span class="kwrd">return</span> sqlCommand;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">modifyNullabilityInActual</span>(model, propName) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> self = this;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> sqlCommand = <span class="S">'ALTER COLUMN "'</span> + propName + <span class="S">'" '</span>;</code></li><li class=""><code> <span class="kwrd">if</span>(propertyCanBeNull.<span class="func">call</span>(self, model, propName))<span class="gly">{</span></code></li><li class="uncovered"><code> sqlCommand = sqlCommand + <span class="S">"DROP "</span>;</code></li><li class=""><code> <span class="gly">}</span> else <span class="gly">{</span></code></li><li class="uncovered"><code> sqlCommand = sqlCommand + <span class="S">"SET "</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> sqlCommand = sqlCommand + <span class="S">"NOT NULL"</span>;</code></li><li class="uncovered"><code> <span class="kwrd">return</span> sqlCommand;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">getColumnsToDrop</span>(model, actualFields)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> self = this;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> sql = <span class="gly">[</span><span class="gly">]</span>;</code></li><li class=""><code> actualFields.<span class="func">forEach</span>(<span class="kwrd">function</span> (actualField) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">if</span> (actualField.Field === <span class="S">'id'</span>) <span class="kwrd">return</span>;</code></li><li class=""><code> <span class="kwrd">if</span> (<span class="func">actualFieldNotPresentInModel</span>(actualField, model)) <span class="gly">{</span></code></li><li class="uncovered"><code> sql.<span class="func">push</span>(<span class="S">'DROP COLUMN "'</span> + actualField.Field + <span class="S">'"'</span>);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="uncovered"><code> <span class="kwrd">return</span> sql;</code></li><li class=""><code></code></li><li class=""><code> <span class="kwrd">function</span> <span class="func">actualFieldNotPresentInModel</span>(actualField, model)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span> !(self._models<span class="gly">[</span>model<span class="gly">]</span>.properties<span class="gly">[</span>actualField.Field<span class="gly">]</span>);</code></li><li class="uncovered"><code> <span class="gly">}</span>;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">applySqlChanges</span>(model, pendingChanges, done)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> self = this;</code></li><li class=""><code> <span class="kwrd">if</span> (pendingChanges.length) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> thisQuery = <span class="S">'ALTER TABLE '</span> + self.<span class="func">tableEscaped</span>(model);</code></li><li class="uncovered"><code> <span class="kwrd">var</span> ranOnce = false;</code></li><li class=""><code> pendingChanges.<span class="func">forEach</span>(<span class="kwrd">function</span>(change)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">if</span>(ranOnce) thisQuery = thisQuery + <span class="S">','</span>;</code></li><li class="uncovered"><code> thisQuery = thisQuery + <span class="S">' '</span> + change;</code></li><li class="uncovered"><code> ranOnce = true;</code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="uncovered"><code> thisQuery = thisQuery + <span class="S">';'</span>;</code></li><li class="uncovered"><code> self.<span class="func">query</span>(thisQuery, callback);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code></code></li><li class=""><code> <span class="kwrd">function</span> <span class="func">callback</span>(err, data)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">if</span>(err) console.<span class="func">log</span>(err);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code></code></li><li class="uncovered"><code> <span class="func">done</span>();</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>PG.prototype.propertiesSQL = <span class="kwrd">function</span> (model) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">var</span> self = this;</code><span class="hits">1</span></li><li class="covered"><code> <span class="kwrd">var</span> sql = <span class="gly">[</span><span class="S">'"id" SERIAL PRIMARY KEY'</span><span class="gly">]</span>;</code><span class="hits">1</span></li><li class=""><code> Object.<span class="func">keys</span>(this._models<span class="gly">[</span>model<span class="gly">]</span>.properties).<span class="func">forEach</span>(<span class="kwrd">function</span> (prop) <span class="gly">{</span></code></li><li class="covered"><code> sql.<span class="func">push</span>(<span class="S">'"'</span> + prop + <span class="S">'" '</span> + self.<span class="func">propertySettingsSQL</span>(model, prop));</code><span class="hits">2</span></li><li class="covered"><code> <span class="gly">}</span>);</code><span class="hits">1</span></li><li class="covered"><code> <span class="kwrd">return</span> sql.jo<span class="kwrd">in</span>(<span class="S">',\n '</span>);</code><span class="hits">1</span></li><li class=""><code></code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>PG.prototype.propertySettingsSQL = <span class="kwrd">function</span> (model, propName) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">var</span> self = this;</code><span class="hits">2</span></li><li class="covered"><code> <span class="kwrd">var</span> p = self._models<span class="gly">[</span>model<span class="gly">]</span>.properties<span class="gly">[</span>propName<span class="gly">]</span>;</code><span class="hits">2</span></li><li class=""><code> <span class="kwrd">var</span> result = <span class="func">datatype</span>(p) + <span class="S">' '</span>; </code></li><li class="covered"><code> <span class="kwrd">if</span>(!propertyCanBeNull.<span class="func">call</span>(self, model, propName)) result = result + <span class="S">'NOT NULL '</span>;</code><span class="hits">2</span></li><li class="covered"><code> <span class="kwrd">return</span> result;</code><span class="hits">2</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">propertyCanBeNull</span>(model, propName)<span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">var</span> p = this._models<span class="gly">[</span>model<span class="gly">]</span>.properties<span class="gly">[</span>propName<span class="gly">]</span>;</code><span class="hits">2</span></li><li class="covered"><code> <span class="kwrd">return</span> !(p.allowNull === false <span class="gly">|</span><span class="gly">|</span> p<span class="gly">[</span><span class="S">'null'</span><span class="gly">]</span> === false);</code><span class="hits">2</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">escape</span>(val) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (val === undefined <span class="gly">|</span><span class="gly">|</span> val === null) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span> <span class="S">'NULL'</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code></code></li><li class=""><code> <span class="kwrd">switch</span> (<span class="kwrd">typeof</span> val) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">case</span> <span class="S">'boolean'</span>: <span class="kwrd">return</span> (val) ? <span class="S">'true'</span> : <span class="S">'false'</span>;</code></li><li class="uncovered"><code> <span class="kwrd">case</span> <span class="S">'number'</span>: <span class="kwrd">return</span> val+<span class="S">''</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code></code></li><li class=""><code> <span class="kwrd">if</span> (<span class="kwrd">typeof</span> val === <span class="S">'object'</span>) <span class="gly">{</span></code></li><li class=""><code> val = (<span class="kwrd">typeof</span> val.toISOString === <span class="S">'function'</span>)</code></li><li class=""><code> ? val.<span class="func">toISOString</span>()</code></li><li class="uncovered"><code> : val.<span class="func">toString</span>();</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code></code></li><li class=""><code> val = val.<span class="func">replace</span>(/<span class="gly">[</span>\0\n\r\b\t\\\'\"\x1a<span class="gly">]</span>/g, <span class="kwrd">function</span>(s) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">switch</span>(s) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">case</span> <span class="S">"\0"</span>: <span class="kwrd">return</span> <span class="S">"\\0"</span>;</code></li><li class="uncovered"><code> <span class="kwrd">case</span> <span class="S">"\n"</span>: <span class="kwrd">return</span> <span class="S">"\\n"</span>;</code></li><li class="uncovered"><code> <span class="kwrd">case</span> <span class="S">"\r"</span>: <span class="kwrd">return</span> <span class="S">"\\r"</span>;</code></li><li class="uncovered"><code> <span class="kwrd">case</span> <span class="S">"\b"</span>: <span class="kwrd">return</span> <span class="S">"\\b"</span>;</code></li><li class="uncovered"><code> <span class="kwrd">case</span> <span class="S">"\t"</span>: <span class="kwrd">return</span> <span class="S">"\\t"</span>;</code></li><li class="uncovered"><code> <span class="kwrd">case</span> <span class="S">"\x1a"</span>: <span class="kwrd">return</span> <span class="S">"\\Z"</span>;</code></li><li class="uncovered"><code> default: <span class="kwrd">return</span> <span class="S">"\\"</span>+s;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="covered"><code> <span class="gly">}</span>);</code><span class="hits">4</span></li><li class="covered"><code> <span class="kwrd">return</span> <span class="S">"'"</span>+val+<span class="S">"'"</span>;</code><span class="hits">4</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">datatype</span>(p) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">switch</span> (p.type.name) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">case</span> <span class="S">'String'</span>:</code></li><li class="covered"><code> <span class="kwrd">return</span> <span class="S">'varchar'</span>;</code><span class="hits">1</span></li><li class=""><code> <span class="kwrd">case</span> <span class="S">'Text'</span>:</code></li><li class="uncovered"><code> <span class="kwrd">return</span> <span class="S">'text'</span>;</code></li><li class=""><code> <span class="kwrd">case</span> <span class="S">'Number'</span>:</code></li><li class="covered"><code> <span class="kwrd">return</span> <span class="S">'integer'</span>;</code><span class="hits">1</span></li><li class=""><code> <span class="kwrd">case</span> <span class="S">'Date'</span>:</code></li><li class="uncovered"><code> <span class="kwrd">return</span> <span class="S">'timestamp'</span>;</code></li><li class=""><code> <span class="kwrd">case</span> <span class="S">'Boolean'</span>:</code></li><li class="uncovered"><code> <span class="kwrd">return</span> <span class="S">'boolean'</span>;</code></li><li class=""><code> default:</code></li><li class="uncovered"><code> console.<span class="func">log</span>(<span class="S">"Warning: postgres adapter does not explicitly handle type '"</span> + p.type.name +<span class="S">"'"</span>);</code></li><li class="uncovered"><code> <span class="kwrd">return</span> p.type.toLower<span class="kwrd">Case</span>();</code></li><li class=""><code> //TO<span class="kwrd">DO</span> a default <span class="kwrd">case</span> might not be the safest thing here... postgres has a fair number of extra types though</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">mapPostgresDatatypes</span>(typeName) <span class="gly">{</span></code></li><li class=""><code> //TO<span class="kwrd">DO</span> there are a lot of synonymous type names that should go here-- this is just what i've run into so far</code></li><li class=""><code> <span class="kwrd">switch</span> (typeName)<span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">case</span> <span class="S">'int4'</span>:</code></li><li class="uncovered"><code> <span class="kwrd">return</span> <span class="S">'integer'</span>;</code></li><li class=""><code> default:</code></li><li class="uncovered"><code> <span class="kwrd">return</span> typeName;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">propertyHasNotBeenDeleted</span>(model, propName)<span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span> !!this._models<span class="gly">[</span>model<span class="gly">]</span>.properties<span class="gly">[</span>propName<span class="gly">]</span>;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li></ol></pre></div>
<div class="row"><div class="span5"><a href="#lib-sql-js" class="filename" name="lib-sql-js" onclick="var el = document.getElementById('lib-sql-js'); el.style.display = el.style.display ? '' : 'none';">lib/sql.js</a></div><div class="span6"><div class="progress progress-warning"> <div class="bar" style="width: 49%"><strong>49%</strong> [77/161]</div></div></div></div><div id="lib-sql-js" style="display:none;"><pre><ol><li class="covered"><code>module.exports = BaseSQL;</code></li><li class=""><code></code></li><li class=""><code><span class="C">/**</span></code></li><li class=""><code><span class="C"> * Base SQL class</span></code></li><li class=""><code><span class="C"> */</span></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">BaseSQL</span>() <span class="gly">{</span></code></li><li class=""><code><span class="gly">}</span></code></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.query = <span class="kwrd">function</span> () <span class="gly">{</span></code></li><li class="uncovered"><code> throw <span class="kwrd">new</span> <span class="func">Error</span>(<span class="S">'query method should be declared in adapter'</span>);</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.command = <span class="kwrd">function</span> (sql, callback) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">return</span> this.<span class="func">query</span>(sql, callback);</code><span class="hits">2</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.queryOne = <span class="kwrd">function</span> (sql, callback) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">return</span> this.<span class="func">query</span>(sql, <span class="kwrd">function</span> (err, data) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">if</span> (err) <span class="kwrd">return</span> <span class="func">callback</span>(err);</code></li><li class="uncovered"><code> <span class="func">callback</span>(err, data<span class="gly">[</span>0<span class="gly">]</span>);</code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.table = <span class="kwrd">function</span> (model) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">return</span> this._models<span class="gly">[</span>model<span class="gly">]</span>.model.schema.<span class="func">tableName</span>(model);</code><span class="hits">6</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.escapeName = <span class="kwrd">function</span> (name) <span class="gly">{</span></code></li><li class="uncovered"><code> throw <span class="kwrd">new</span> <span class="func">Error</span>(<span class="S">'escapeName method should be declared in adapter'</span>);</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.tableEscaped = <span class="kwrd">function</span> (model) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">return</span> this.<span class="func">escapeName</span>(this.<span class="func">table</span>(model));</code><span class="hits">6</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.define = <span class="kwrd">function</span> (descr) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">if</span> (!descr.settings) descr.settings = <span class="gly">{</span><span class="gly">}</span>;</code><span class="hits">1</span></li><li class="covered"><code> this._models<span class="gly">[</span>descr.model.modelName<span class="gly">]</span> = descr;</code><span class="hits">1</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.defineProperty = <span class="kwrd">function</span> (model, prop, params) <span class="gly">{</span></code></li><li class="uncovered"><code> this._models<span class="gly">[</span>model<span class="gly">]</span>.properties<span class="gly">[</span>prop<span class="gly">]</span> = params;</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.save = <span class="kwrd">function</span> (model, data, callback) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> sql = <span class="S">'UPDATE '</span> + this.<span class="func">tableEscaped</span>(model) + <span class="S">' SET '</span> + this.<span class="func">toFields</span>(model, data) + <span class="S">' WHERE '</span> + this.<span class="func">escapeName</span>(<span class="S">'id'</span>) + <span class="S">' = '</span> + data.id;</code></li><li class=""><code></code></li><li class=""><code> this.<span class="func">query</span>(sql, <span class="kwrd">function</span> (err) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="func">callback</span>(err);</code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.exists = <span class="kwrd">function</span> (model, id, callback) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">var</span> sql = <span class="S">'SELECT 1 FROM '</span> +</code></li><li class="uncovered"><code> this.<span class="func">tableEscaped</span>(model) + <span class="S">' WHERE '</span> + this.<span class="func">escapeName</span>(<span class="S">'id'</span>) + <span class="S">' = '</span> + id + <span class="S">' LIMIT 1'</span>;</code></li><li class=""><code></code></li><li class=""><code> this.<span class="func">query</span>(sql, <span class="kwrd">function</span> (err, data) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">if</span> (err) <span class="kwrd">return</span> <span class="func">callback</span>(err);</code></li><li class="uncovered"><code> <span class="func">callback</span>(null, data.length === 1);</code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.find = <span class="kwrd">function</span> <span class="func">find</span>(model, id, callback) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">var</span> sql = <span class="S">'SELECT * FROM '</span> +</code></li><li class="uncovered"><code> this.<span class="func">tableEscaped</span>(model) + <span class="S">' WHERE '</span> + this.<span class="func">escapeName</span>(<span class="S">'id'</span>) + <span class="S">' = '</span> + id + <span class="S">' LIMIT 1'</span>;</code></li><li class=""><code></code></li><li class=""><code> this.<span class="func">query</span>(sql, <span class="kwrd">function</span> (err, data) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (data &amp;&amp; data.length === 1) <span class="gly">{</span></code></li><li class="uncovered"><code> data<span class="gly">[</span>0<span class="gly">]</span>.id = id;</code></li><li class=""><code> <span class="gly">}</span> else <span class="gly">{</span></code></li><li class="uncovered"><code> data = <span class="gly">[</span>null<span class="gly">]</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="func">callback</span>(err, this.<span class="func">fromDatabase</span>(model, data<span class="gly">[</span>0<span class="gly">]</span>));</code></li><li class="uncovered"><code> <span class="gly">}</span>.<span class="func">bind</span>(this));</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.destroy = <span class="kwrd">function</span> <span class="func">destroy</span>(model, id, callback) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">var</span> sql = <span class="S">'DELETE FROM '</span> +</code></li><li class="uncovered"><code> this.<span class="func">tableEscaped</span>(model) + <span class="S">' WHERE '</span> + this.<span class="func">escapeName</span>(<span class="S">'id'</span>) + <span class="S">' = '</span> + id;</code></li><li class=""><code></code></li><li class=""><code> this.<span class="func">command</span>(sql, <span class="kwrd">function</span> (err) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="func">callback</span>(err);</code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.destroyAll = <span class="kwrd">function</span> <span class="func">destroyAll</span>(model, callback) <span class="gly">{</span></code></li><li class=""><code> this.<span class="func">command</span>(<span class="S">'DELETE FROM '</span> + this.<span class="func">tableEscaped</span>(model), <span class="kwrd">function</span> (err) <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (err) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">return</span> <span class="func">callback</span>(err, <span class="gly">[</span><span class="gly">]</span>);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="func">callback</span>(err);</code></li><li class="uncovered"><code> <span class="gly">}</span>.<span class="func">bind</span>(this));</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.count = <span class="kwrd">function</span> <span class="func">count</span>(model, callback, where) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> self = this;</code></li><li class="uncovered"><code> <span class="kwrd">var</span> props = this._models<span class="gly">[</span>model<span class="gly">]</span>.properties;</code></li><li class=""><code></code></li><li class=""><code> this.<span class="func">queryOne</span>(<span class="S">'SELECT count(*) as cnt FROM '</span> +</code></li><li class=""><code> this.<span class="func">tableEscaped</span>(model) + <span class="S">' '</span> + <span class="func">buildWhere</span>(where), <span class="kwrd">function</span> (err, res) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">if</span> (err) <span class="kwrd">return</span> <span class="func">callback</span>(err);</code></li><li class="uncovered"><code> <span class="func">callback</span>(err, res &amp;&amp; res.cnt);</code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class=""><code></code></li><li class=""><code> <span class="kwrd">function</span> <span class="func">buildWhere</span>(conds) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> cs = <span class="gly">[</span><span class="gly">]</span>;</code></li><li class=""><code> Object.<span class="func">keys</span>(conds <span class="gly">|</span><span class="gly">|</span> <span class="gly">{</span><span class="gly">}</span>).<span class="func">forEach</span>(<span class="kwrd">function</span> (key) <span class="gly">{</span></code></li><li class="uncovered"><code> <span class="kwrd">var</span> keyEscaped = self.<span class="func">escapeName</span>(key);</code></li><li class=""><code> <span class="kwrd">if</span> (conds<span class="gly">[</span>key<span class="gly">]</span> === null) <span class="gly">{</span></code></li><li class="uncovered"><code> cs.<span class="func">push</span>(keyEscaped + <span class="S">' IS NULL'</span>);</code></li><li class=""><code> <span class="gly">}</span> else <span class="gly">{</span></code></li><li class="uncovered"><code> cs.<span class="func">push</span>(keyEscaped + <span class="S">' = '</span> + self.<span class="func">toDatabase</span>(props<span class="gly">[</span>key<span class="gly">]</span>, conds<span class="gly">[</span>key<span class="gly">]</span>));</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="uncovered"><code> <span class="gly">}</span>);</code></li><li class="uncovered"><code> <span class="kwrd">return</span> cs.length ? <span class="S">' WHERE '</span> + cs.jo<span class="kwrd">in</span>(<span class="S">' AND '</span>) : <span class="S">''</span>;</code></li><li class=""><code> <span class="gly">}</span></code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.updateAttributes = <span class="kwrd">function</span> <span class="func">updateAttrs</span>(model, id, data, cb) <span class="gly">{</span></code></li><li class="uncovered"><code> data.id = id;</code></li><li class="uncovered"><code> this.<span class="func">save</span>(model, data, cb);</code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.disconnect = <span class="kwrd">function</span> <span class="func">disconnect</span>() <span class="gly">{</span></code></li><li class="covered"><code> this.client.<span class="func">end</span>();</code><span class="hits">1</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.automigrate = <span class="kwrd">function</span> (cb) <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">var</span> self = this;</code><span class="hits">1</span></li><li class="covered"><code> <span class="kwrd">var</span> wait = 0;</code><span class="hits">1</span></li><li class=""><code> Object.<span class="func">keys</span>(this._models).<span class="func">forEach</span>(<span class="kwrd">function</span> (model) <span class="gly">{</span></code></li><li class="covered"><code> wait += 1;</code><span class="hits">1</span></li><li class=""><code> self.<span class="func">dropTable</span>(model, <span class="kwrd">function</span> () <span class="gly">{</span></code></li><li class="uncovered"><code> // console.<span class="func">log</span>(<span class="S">'drop'</span>, model);</code></li><li class=""><code> self.<span class="func">createTable</span>(model, <span class="kwrd">function</span> (err) <span class="gly">{</span></code></li><li class="uncovered"><code> // console.<span class="func">log</span>(<span class="S">'create'</span>, model);</code></li><li class="covered"><code> <span class="kwrd">if</span> (err) console.<span class="func">log</span>(err);</code><span class="hits">1</span></li><li class="covered"><code> <span class="func">done</span>();</code><span class="hits">1</span></li><li class="covered"><code> <span class="gly">}</span>);</code><span class="hits">1</span></li><li class="covered"><code> <span class="gly">}</span>);</code><span class="hits">1</span></li><li class="covered"><code> <span class="gly">}</span>);</code><span class="hits">1</span></li><li class="covered"><code> <span class="kwrd">if</span> (wait === 0) <span class="func">cb</span>();</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code> <span class="kwrd">function</span> <span class="func">done</span>() <span class="gly">{</span></code></li><li class=""><code> <span class="kwrd">if</span> (--wait === 0 &amp;&amp; cb) <span class="gly">{</span></code></li><li class="covered"><code> <span class="func">cb</span>();</code><span class="hits">1</span></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code> <span class="gly">}</span></code></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.dropTable = <span class="kwrd">function</span> (model, cb) <span class="gly">{</span></code></li><li class="covered"><code> this.<span class="func">command</span>(<span class="S">'DROP TABLE IF EXISTS '</span> + this.<span class="func">tableEscaped</span>(model), cb);</code><span class="hits">1</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code>BaseSQL.prototype.createTable = <span class="kwrd">function</span> (model, cb) <span class="gly">{</span></code></li><li class=""><code> this.<span class="func">command</span>(<span class="S">'CREATE TABLE '</span> + this.<span class="func">tableEscaped</span>(model) +</code></li><li class="covered"><code> <span class="S">' (\n '</span> + this.<span class="func">propertiesSQL</span>(model) + <span class="S">'\n)'</span>, cb);</code><span class="hits">1</span></li><li class="covered"><code><span class="gly">}</span>;</code><span class="hits">1</span></li><li class=""><code></code></li><li class=""><code></code></li></ol></pre></div>
<div class="row"><div class="span5"><a href="#lib-utils-js" class="filename" name="lib-utils-js" onclick="var el = document.getElementById('lib-utils-js'); el.style.display = el.style.display ? '' : 'none';">lib/utils.js</a></div><div class="span6"><div class="progress progress-warning"> <div class="bar" style="width: 50%"><strong>50%</strong> [4/12]</div></div></div></div><div id="lib-utils-js" style="display:none;"><pre><ol><li class="covered"><code>exports.safeRequire = safeRequire;</code></li><li class=""><code></code></li><li class=""><code><span class="kwrd">function</span> <span class="func">safeRequire</span>(module) <span class="gly">{</span></code></li><li class=""><code> try <span class="gly">{</span></code></li><li class="covered"><code> <span class="kwrd">return</span> <span class="func">require</span>(module);</code><span class="hits">1</span></li><li class=""><code> <span class="gly">}</span> <span class="func">catch</span>(e) <span class="gly">{</span></code></li><li class="uncovered"><code> console.<span class="func">log</span>(<span class="S">'Run "npm install '</span> + module + <span class="S">'" command to use jugglingdb using this database engine'</span>);</code></li><li class="uncovered"><code> process.<span class="func">exit</span>(1);</code></li><li class=""><code> <span class="gly">}</span></code></li><li class=""><code><span class="gly">}</span></code></li><li class=""><code></code></li><li class=""><code></code></li></ol></pre></div>
</div>
</body>
</html>