-
Notifications
You must be signed in to change notification settings - Fork 0
/
querybuilder.js
85 lines (67 loc) · 1.77 KB
/
querybuilder.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
class QueryBuilder {
constructor() {
this.columns = [];
this.fromTable = null;
this.joinTables = [];
this.whereConditions = [];
this.orderColumns = [];
this.limits = null;
}
select(columns) {
this.columns.push(columns);
return this;
}
from(fromTable) {
this.fromTable = fromTable;
return this;
}
join(joinTable) {
this.joinTables.push(" JOIN " + joinTable);
return this;
}
leftJoin(joinTable) {
this.joinTables.push(" LEFT JOIN " + joinTable);
return this;
}
rightJoin(joinTable) {
this.joinTables.push(" RIGHT JOIN " + joinTable);
return this;
}
innerJoin(joinTable) {
this.joinTables.push(" INNER JOIN " + joinTable);
return this;
}
where(condition) {
this.whereConditions.push(condition);
return this;
}
order(orderColumn) {
this.orderColumns.push(orderColumn);
return this;
}
limit(limits) {
this.limits = limits;
return this;
}
toString() {
let str = "";
str += "SELECT " + this.columns.join(",");
str += " FROM " + this.fromTable;
if (this.joinTables.length > 0) {
this.joinTables.forEach((joinTable, joinTableIndex) => {
str += " " + joinTable
});
}
if (this.whereConditions.length > 0) {
str += " WHERE " + this.whereConditions.join(" AND ");
}
if (this.orderColumns.length > 0) {
str += " ORDER BY " + this.orderColumns.join(",");
}
if (this.limits) {
str += " LIMIT " + this.limits;
}
return str;
}
}
module.exports = QueryBuilder;