-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
mysql.js
119 lines (112 loc) · 3.06 KB
/
mysql.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
var mysql = require('mysql'),
templates = require("./sql_templates"),
utils = require('../utils'),
MySQL;
MySQL = module.exports = function MySQL(options) {
this.connection = mysql.createClient(options);
};
MySQL.prototype = {
constructor: MySQL,
connect: function (fn) {
this.connection.useDatabase(this.connection.database, fn);
},
disconnect: function (fn) {
this.connection.end(fn);
},
getBin: function (params, fn) {
var values = [params.id, params.revision];
this.connection.query(templates.getBin, values, function (err, results) {
if (err || !results.length) {
return fn(!err && !results.length ? 'not-found' : err);
}
fn(null, results[0]);
});
},
setBin: function (params, fn) {
var values = [
params.javascript,
params.css,
params.html,
params.url,
params.revision,
params.streamingKey
], sql = templates.setBin;
this.connection.query(sql, values, function (err, result) {
if (err || !result.affectedRows) {
return fn(err);
}
fn(null, result.insertId);
});
},
setBinPanel: function (panel, params, fn) {
var values = [
params[panel],
params.url,
params.revision,
params.streamingKey
],
allowed = {html: 1, css: 1, javascript: 1},
sql = templates.setBinPanel.replace(':panel', panel);
if (allowed[panel]) {
this.connection.query(sql, values, function (err, result) {
if (err || !result.affectedRows) {
return fn(err || 'no-entry');
}
fn(null, result.insertId);
});
} else {
fn('invalid-panel');
}
},
getLatestBin: function (params, fn) {
var values = [params.id],
sql = templates.getLatestBin;
this.connection.query(sql, values, function (err, results) {
if (err || !results.length) {
return fn(!err && !results.length ? 'not-found' : err);
}
fn(null, results[0]);
});
},
getBinsByOwner: function (where) {
},
generateBinId: function (fn, attempts) {
var id = utils.shortcode(), mysql = this;
attempts = attempts || 1;
if (attempts <= 10) {
this.connection.query(templates.binExists, [id], function (err, results) {
if (err) {
fn(err);
} else if (results.length) {
attempts += 1;
mysql.generateBinId(fn, attempts);
} else {
fn(null, id);
}
});
} else {
fn("too-many-tries"); // Need error objects.
}
},
getUser: function (id, fn) {
this.connection.query(templates.getUser, [id], function (err, results) {
if (err || !results.length) {
return fn(!err && !results.length ? 'not-found' : err);
}
fn(null, results[0]);
});
},
setUser: function (params, fn) {
var values = [
params.name,
params.key,
params.email
], sql = templates.setUser;
this.connection.query(sql, values, function (err, result) {
if (err || !result.affectedRows) {
return fn(err);
}
fn(null, result.insertId);
});
}
};