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
99 lines (89 loc) · 2.92 KB
/
valueExpression.js
File metadata and controls
99 lines (89 loc) · 2.92 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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
'use strict';
var OrderByValueNode = require('./orderByValue');
var ParameterNode = require('./parameter');
var TextNode = require('./text');
// Process values, wrapping them in ParameterNode if necessary.
var processParams = function(val) {
return Array.isArray(val) ? val.map(ParameterNode.getNodeOrParameterNode) : ParameterNode.getNodeOrParameterNode(val);
};
// Value expressions can be composed to form new value expressions.
// ValueExpressionMixin is evaluated at runtime, hence the
// "thunk" around it.
var ValueExpressionMixin = function() {
var BinaryNode = require('./binary');
var CastNode = require('./cast');
var PostfixUnaryNode = require('./postfixUnary');
var TernaryNode = require('./ternary');
var postfixUnaryMethod = function(operator) {
return function() {
return new PostfixUnaryNode({
left: this.toNode(),
operator: operator
});
};
};
var binaryMethod = function(operator) {
return function(val) {
return new BinaryNode({
left: this.toNode(),
operator: operator,
right: processParams(val)
});
};
};
var ternaryMethod = function(operator, separator) {
return function(middle, right) {
return new TernaryNode({
left: this.toNode(),
operator: operator,
middle: processParams(middle),
separator: separator,
right: processParams(right)
});
};
};
var castMethod = function(dataType) {
return new CastNode(this.toNode(), dataType);
};
var orderMethod = function(direction) {
return function() {
return new OrderByValueNode({
value : this.toNode(),
direction : direction ? new TextNode(direction) : undefined
});
};
};
return {
isNull : postfixUnaryMethod('IS NULL'),
isNotNull : postfixUnaryMethod('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('<='),
plus : binaryMethod('+'),
minus : binaryMethod('-'),
multiply : binaryMethod('*'),
divide : binaryMethod('/'),
modulo : binaryMethod('%'),
leftShift : binaryMethod('<<'),
rightShift : binaryMethod('>>'),
bitwiseAnd : binaryMethod('&'),
bitwiseNot : binaryMethod('~'),
bitwiseOr : binaryMethod('|'),
bitwiseXor : binaryMethod('#'),
like : binaryMethod('LIKE'),
notLike : binaryMethod('NOT LIKE'),
in : binaryMethod('IN'),
notIn : binaryMethod('NOT IN'),
between : ternaryMethod('BETWEEN', 'AND'),
cast : castMethod,
descending : orderMethod('DESC')
};
};
module.exports = ValueExpressionMixin;