forked from brianc/node-sql
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvalueExpression.js
More file actions
80 lines (73 loc) · 2.32 KB
/
Copy pathvalueExpression.js
File metadata and controls
80 lines (73 loc) · 2.32 KB
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
'use strict';
var _ = require('lodash');
var Node = require(__dirname);
var ParameterNode = require(__dirname + '/parameter');
// Process values, wrapping them in ParameterNode if necessary.
var processParams = function(val) {
var helper = function(v) {
return v.toNode ? v.toNode() : new ParameterNode(v);
};
return Array.isArray(val) ? val.map(helper) : helper(val);
};
// Value expressions can be composed to form new value expressions.
// Value expressions include binary expressions and unary expressions
// so far. ValueExpressionMixin is evaluated at runtime, hence the
// "thunk" around it.
var ValueExpressionMixin = module.exports = function() {
var BinaryNode = require(__dirname + '/binary');
var TernaryNode = require(__dirname + '/ternary');
var UnaryNode = require(__dirname + '/unary');
var binaryMethod = function(operator) {
return function(val) {
return new BinaryNode({
left: this.toNode(),
operator: operator,
right: processParams(val)
});
};
};
var unaryMethod = function(operator) {
/*jshint unused: false */
return function(val) {
return new UnaryNode({
left: this.toNode(),
operator: operator
});
};
};
var ternaryMethod = function(operator, separator) {
return function(middle, right) {
return new TernaryNode({
left: this.toNode(),
middle: processParams(middle),
operator: operator,
right: processParams(right),
separator: separator
});
};
};
return {
isNull : unaryMethod('IS NULL'),
isNotNull: unaryMethod('IS NOT NULL'),
or : binaryMethod('OR'),
and : binaryMethod('AND'),
equals : binaryMethod('='),
equal : binaryMethod('='),
notEquals: binaryMethod('<>'),
notEqual : binaryMethod('<>'),
gt : binaryMethod('>'),
gte : binaryMethod('>='),
lt : binaryMethod('<'),
lte : binaryMethod('<='),
add : binaryMethod('+'),
subtract : binaryMethod('-'),
multiply : binaryMethod('*'),
divide : binaryMethod('/'),
modulo : binaryMethod('%'),
like : binaryMethod('LIKE'),
notLike : binaryMethod('NOT LIKE'),
in : binaryMethod('IN'),
notIn : binaryMethod('NOT IN'),
between : ternaryMethod('BETWEEN', 'AND')
};
};