-
Notifications
You must be signed in to change notification settings - Fork 397
Expand file tree
/
Copy pathH2Constant.java
More file actions
133 lines (95 loc) · 3.04 KB
/
H2Constant.java
File metadata and controls
133 lines (95 loc) · 3.04 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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package sqlancer.h2.ast;
public class H2Constant implements H2Expression {
private H2Constant() {
}
public static class H2NullConstant extends H2Constant {
@Override
public String toString() {
return "NULL";
}
}
public static class H2IntConstant extends H2Constant {
private final long value;
public H2IntConstant(long value) {
this.value = value;
}
@Override
public String toString() {
return String.valueOf(value);
}
}
public static class H2BoolConstant extends H2Constant {
private final boolean value;
public H2BoolConstant(boolean value) {
this.value = value;
}
@Override
public String toString() {
return String.valueOf(value);
}
}
public static class H2StringConstant extends H2Constant {
private final String value;
public H2StringConstant(String value) {
this.value = value;
}
@Override
public String toString() {
return String.format("'%s'", value.replace("'", "''"));
}
}
public static class H2DoubleConstant extends H2Constant {
private final double value;
public H2DoubleConstant(double value) {
this.value = value;
}
@Override
public String toString() {
if (value == Double.POSITIVE_INFINITY) {
return "POWER(0, -1)";
} else if (value == Double.NEGATIVE_INFINITY) {
return "(-POWER(0, -1))";
} else if (Double.compare(value, -0.0) == 0) {
return "(-CAST(0 AS DOUBLE))";
} else if (Double.isNaN(value)) {
return "SQRT(-1)";
} else {
return String.valueOf(value);
}
}
}
public static class H2BinaryConstant extends H2Constant {
private String value;
public H2BinaryConstant(long value) {
this.value = Long.toHexString(value);
if (this.value.length() % 2 == 1) {
this.value = '0' + this.value; // pad with leading zero if needed
}
}
public String getValue() {
return value;
}
@Override
public String toString() {
return "X'" + value + "'";
}
}
public static H2Expression createIntConstant(long val) {
return new H2IntConstant(val);
}
public static H2Expression createNullConstant() {
return new H2NullConstant();
}
public static H2Expression createBoolConstant(boolean val) {
return new H2BoolConstant(val);
}
public static H2Expression createStringConstant(String val) {
return new H2StringConstant(val);
}
public static H2Expression createDoubleConstant(double val) {
return new H2DoubleConstant(val);
}
public static H2Expression createBinaryConstant(long val) {
return new H2BinaryConstant(val);
}
}