Skip to content

Commit e2d52ff

Browse files
committed
feat: implement the unary prefix operation
1 parent 9b3aac1 commit e2d52ff

1 file changed

Lines changed: 77 additions & 0 deletions

File tree

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package sqlancer.databend.ast;
2+
3+
import sqlancer.common.ast.BinaryOperatorNode;
4+
import sqlancer.common.ast.newast.NewUnaryPrefixOperatorNode;
5+
import sqlancer.common.ast.newast.Node;
6+
import sqlancer.databend.DatabendSchema.DatabendDataType;
7+
8+
9+
public class DatabendUnaryPrefixOperation extends NewUnaryPrefixOperatorNode<DatabendExpression> {
10+
11+
// private final Node<DatabendExpression> expr;
12+
// private final DatabendUnaryPrefixOperator op;
13+
private boolean negate;
14+
15+
public DatabendUnaryPrefixOperation(Node<DatabendExpression> expr, DatabendUnaryPrefixOperator op, boolean negate) {
16+
super(expr,op);
17+
setNegate(negate);
18+
}
19+
20+
void setNegate(boolean negate){
21+
this.negate = negate;
22+
}
23+
24+
// @Override
25+
public Node<DatabendExpression> getExpression() {
26+
return getExpr();
27+
}
28+
29+
@Override
30+
public String getOperatorRepresentation() {
31+
return null;
32+
}
33+
34+
// @Override
35+
// public OperatorKind getOperatorKind() {
36+
// return OperatorKind.PREFIX;
37+
// }
38+
39+
40+
41+
public enum DatabendUnaryPrefixOperator implements BinaryOperatorNode.Operator {
42+
NOT("NOT", DatabendDataType.BOOLEAN, DatabendDataType.INT) {
43+
@Override
44+
public DatabendDataType getExpressionType() {
45+
return DatabendDataType.BOOLEAN;
46+
}
47+
48+
@Override
49+
protected DatabendConstant getExpectedValue(DatabendConstant expectedValue) {
50+
return null; // TODO
51+
}
52+
};
53+
54+
55+
private String textRepresentation;
56+
private DatabendDataType[] dataTypes;
57+
58+
DatabendUnaryPrefixOperator(String textRepresentation, DatabendDataType... dataTypes) {
59+
this.textRepresentation = textRepresentation;
60+
this.dataTypes = dataTypes.clone();
61+
}
62+
63+
public abstract DatabendDataType getExpressionType();
64+
65+
public DatabendDataType[] getInputDataTypes(){
66+
return dataTypes;
67+
}
68+
69+
protected abstract DatabendConstant getExpectedValue(DatabendConstant expectedValue);
70+
71+
@Override
72+
public String getTextRepresentation() {
73+
return this.textRepresentation;
74+
}
75+
}
76+
77+
}

0 commit comments

Comments
 (0)