nodulator
Version:
Complete NodeJS Framework for Restfull APIs
374 lines (242 loc) • 14.4 kB
HTML
<html>
<head>
<title>Mysql.ls</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
<link rel="stylesheet" media="all" href="docco.css" />
</head>
<body>
<div id="container">
<div id="background"></div>
<ul id="jump_to">
<li>
<a class="large" href="javascript:void(0);">Jump To …</a>
<a class="small" href="javascript:void(0);">+</a>
<div id="jump_wrapper">
<div id="jump_page_wrapper">
<div id="jump_page">
<a class="source" href="Nodulator.html">
Nodulator.ls
</a>
<a class="source" href="ClientDB.html">
ClientDB.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="Resource.html">
Resource.ls
</a>
<a class="source" href="Bus.html">
Bus.ls
</a>
<a class="source" href="Cache.html">
Cache.ls
</a>
<a class="source" href="ChangeWatcher.html">
ChangeWatcher.ls
</a>
<a class="source" href="Debug.html">
Debug.ls
</a>
<a class="source" href="Wrappers.html">
Wrappers.ls
</a>
<a class="source" href="Nodulator.html">
Nodulator.ls
</a>
<a class="source" href="Resource.html">
Resource.ls
</a>
<a class="source" href="Schema.html">
Schema.ls
</a>
<a class="source" href="NModule.html">
NModule.ls
</a>
<a class="source" href="AccountResource.html">
AccountResource.ls
</a>
<a class="source" href="User.html">
User.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="Nodulator-Angular.html">
Nodulator-Angular.ls
</a>
<a class="source" href="TaskDirective.html">
TaskDirective.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="TaskService.html">
TaskService.ls
</a>
<a class="source" href="main.html">
main.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="Task.html">
Task.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="DOM.html">
DOM.ls
</a>
<a class="source" href="View.html">
View.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="Nodulator.html">
Nodulator.ls
</a>
<a class="source" href="Mongo.html">
Mongo.ls
</a>
<a class="source" href="Mysql.html">
Mysql.ls
</a>
<a class="source" href="SqlMem.html">
SqlMem.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
<a class="source" href="Resource.html">
Resource.ls
</a>
<a class="source" href="Request.html">
Request.ls
</a>
<a class="source" href="Route.html">
Route.ls
</a>
<a class="source" href="index.html">
index.ls
</a>
</div>
</div>
</li>
</ul>
<ul class="sections">
<li id="title">
<div class="annotation">
<h1>Mysql.ls</h1>
</div>
</li>
<li id="section-1">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-1">¶</a>
</div>
</div>
<div class="content"><div class='highlight'><pre>_ = <span class="hljs-built_in">require</span> <span class="hljs-string">'underscore'</span>
mysql = <span class="hljs-built_in">require</span> <span class="hljs-string">'mysql'</span>
<span class="hljs-built_in">module</span>.exports = <span class="hljs-function"><span class="hljs-params">(config)</span> -></span>
connection = mysql.createConnection <span class="hljs-keyword">do</span>
host : config.host || <span class="hljs-string">'localhost'</span>
port : config.port || <span class="hljs-number">3306</span>
user : config.user || <span class="hljs-string">''</span>
password : config.pass || <span class="hljs-string">''</span>
database : config.database || <span class="hljs-string">''</span>
typeCast: <span class="hljs-function"><span class="hljs-params">(field, next)</span> -></span>
<span class="hljs-keyword">if</span> field.type <span class="hljs-keyword">is</span> <span class="hljs-string">'TINY'</span> <span class="hljs-keyword">and</span> field.length <span class="hljs-keyword">is</span> <span class="hljs-number">1</span>
<span class="hljs-keyword">return</span> field.string() <span class="hljs-keyword">is</span> <span class="hljs-string">'1'</span>
<span class="hljs-keyword">return</span> next()
connection.<span class="hljs-literal">on</span> <span class="hljs-string">'error'</span>, <span class="hljs-function">-></span>
<span class="hljs-built_in">console</span>.error <span class="hljs-string">'MYSQL ERROR'</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Mysql</span></span>
Select: <span class="hljs-function"><span class="hljs-params">(table, fields, where, options, done)</span> -></span>
f = fields
<span class="hljs-keyword">if</span> Array.isArray fields
f = fields.join(<span class="hljs-string">','</span>)
query = <span class="hljs-string">'select '</span> + f + <span class="hljs-string">' from '</span> + table
hasConditions = _(where).size() > <span class="hljs-number">0</span> <span class="hljs-keyword">if</span> where?
<span class="hljs-keyword">if</span> (hasConditions)
query += <span class="hljs-string">' where '</span> + _(where).map(@_MakeSQLCondition).join(<span class="hljs-string">' and '</span>);
<span class="hljs-keyword">if</span> options?
<span class="hljs-keyword">if</span> options.sortBy?
query += <span class="hljs-string">' order by '</span> + options.sortBy
<span class="hljs-keyword">if</span> options.reverse
query += <span class="hljs-string">' desc'</span>
<span class="hljs-keyword">if</span> options.limit?
limit = <span class="hljs-string">''</span>
<span class="hljs-keyword">if</span> options.offset?
limit += options.offset + <span class="hljs-string">', '</span>
limit += options.limit - options.offset
<span class="hljs-keyword">else</span>
limit += options.limit
query += <span class="hljs-string">' limit '</span> + limit
connection.query query, where, <span class="hljs-function"><span class="hljs-params">(err, rows)</span> -></span>
<span class="hljs-keyword">return</span> done err <span class="hljs-keyword">if</span> err?
done <span class="hljs-literal">null</span>, rows
Insert: <span class="hljs-function"><span class="hljs-params">(table, fields, done)</span> -></span>
query = <span class="hljs-string">'insert into '</span> + table + <span class="hljs-string">' set ?'</span>
connection.query query, fields, <span class="hljs-function"><span class="hljs-params">(err, results)</span> -></span>
<span class="hljs-keyword">return</span> done err <span class="hljs-keyword">if</span> err?
done <span class="hljs-literal">null</span>, results.insertId
Update: <span class="hljs-function"><span class="hljs-params">(table, fields, where, done)</span> -></span>
query = <span class="hljs-string">'update '</span> + table + <span class="hljs-string">' set ? where '</span> + _(where).map(<span class="hljs-function"><span class="hljs-params">(value, key)</span> -></span>
<span class="hljs-keyword">return</span> mysql.escapeId(key) + <span class="hljs-string">' = '</span> + mysql.escape(value)
).join(<span class="hljs-string">' and '</span>)
connection.query query, fields, <span class="hljs-function"><span class="hljs-params">(err, results)</span> -></span>
<span class="hljs-keyword">return</span> done err <span class="hljs-keyword">if</span> err?
done <span class="hljs-literal">null</span>, results.affectedRows
Delete: <span class="hljs-function"><span class="hljs-params">(table, where, done)</span> -></span>
query = <span class="hljs-string">'delete from '</span> + table + <span class="hljs-string">' where '</span> + _(where).map(<span class="hljs-function"><span class="hljs-params">(value, key)</span> -></span>
<span class="hljs-keyword">return</span> mysql.escapeId(key) + <span class="hljs-string">' = '</span> + mysql.escape(value)
).join(<span class="hljs-string">' and '</span>)
connection.query query, {}, <span class="hljs-function"><span class="hljs-params">(err, results)</span> -></span>
<span class="hljs-keyword">return</span> done err <span class="hljs-keyword">if</span> err?
done <span class="hljs-literal">null</span>, results.affectedRows
_MakeSQLCondition: <span class="hljs-function"><span class="hljs-params">(value, key)</span> -></span>
safeKey = mysql.escapeId key</pre></div></div>
</li>
<li id="section-2">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-2">¶</a>
</div>
<p>normal case A = B</p>
</div>
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> !_.isObject value
<span class="hljs-keyword">return</span> safeKey + <span class="hljs-string">' = '</span> + mysql.escape value
op = <span class="hljs-keyword">if</span> value.sup <span class="hljs-keyword">then</span> <span class="hljs-string">' > '</span> <span class="hljs-keyword">else</span> <span class="hljs-string">' < '</span>
<span class="hljs-keyword">return</span> safeKey + op + mysql.escape value.val
_NextId: <span class="hljs-function"><span class="hljs-params">(name, done)</span> -></span>
query = <span class="hljs-string">"select id from <span class="hljs-subst">#{name}</span> order by id desc limit 1;"</span>
connection.query query, where, <span class="hljs-function"><span class="hljs-params">(err, rows)</span> -></span>
<span class="hljs-keyword">return</span> done err <span class="hljs-keyword">if</span> err?
done <span class="hljs-literal">null</span>, rows<span class="hljs-number">.0</span>.id + <span class="hljs-number">1</span> || <span class="hljs-number">1</span>
<span class="hljs-keyword">new</span> Mysql
<span class="hljs-built_in">module</span>.exports.AddTable = <span class="hljs-function"><span class="hljs-params">(name)</span> -></span></pre></div></div>
</li>
</ul>
</div>
</body>
</html>