Skip to content

Commit 0384c4d

Browse files
author
ZhangJian He
committed
feat: support query builder
Signed-off-by: ZhangJian He <[email protected]>
1 parent 554d702 commit 0384c4d

17 files changed

+610
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package io.opengemini.client.api;
2+
3+
/**
4+
* ArithmeticExpression represents an arithmetic operation between two expressions
5+
*/
6+
public class ArithmeticExpression implements Expression {
7+
private final Expression left;
8+
9+
private final Expression right;
10+
11+
private final ArithmeticOperator operator;
12+
13+
public ArithmeticExpression(Expression left, Expression right, ArithmeticOperator operator) {
14+
this.left = left;
15+
this.right = right;
16+
this.operator = operator;
17+
}
18+
19+
public Expression left() {
20+
return left;
21+
}
22+
23+
public Expression right() {
24+
return right;
25+
}
26+
27+
public ArithmeticOperator operator() {
28+
return operator;
29+
}
30+
31+
@Override
32+
public String build() {
33+
return "(" +
34+
left.build() +
35+
" " + operator.symbol() + " " +
36+
right.build() +
37+
")";
38+
}
39+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.opengemini.client.api;
2+
3+
public enum ArithmeticOperator {
4+
ADD("+"),
5+
SUBTRACT("-"),
6+
MULTIPLY("*"),
7+
DIVIDE("/"),
8+
MODULO("%");
9+
10+
private final String symbol;
11+
12+
ArithmeticOperator(String symbol) {
13+
this.symbol = symbol;
14+
}
15+
16+
public String symbol() {
17+
return symbol;
18+
}
19+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.opengemini.client.api;
2+
3+
/**
4+
* AsExpression represents an alias for an expression (e.g., SELECT field AS alias)
5+
*/
6+
public class AsExpression implements Expression {
7+
private final String alias;
8+
9+
private final Expression expression;
10+
11+
public AsExpression(String alias, Expression expression) {
12+
this.alias = alias;
13+
this.expression = expression;
14+
}
15+
16+
public String alias() {
17+
return alias;
18+
}
19+
20+
public Expression expression() {
21+
return expression;
22+
}
23+
24+
@Override
25+
public String build() {
26+
return expression.build() + " AS \"" + alias + "\"";
27+
}
28+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.opengemini.client.api;
2+
3+
public class ComparisonCondition implements Condition {
4+
private final String column;
5+
6+
private final ComparisonOperator operator;
7+
8+
private final Object value;
9+
10+
public ComparisonCondition(String column, ComparisonOperator operator, Object value) {
11+
this.column = column;
12+
this.operator = operator;
13+
this.value = value;
14+
}
15+
16+
@Override
17+
public String build() {
18+
StringBuilder conditionBuilder = new StringBuilder();
19+
conditionBuilder.append('"');
20+
conditionBuilder.append(column);
21+
conditionBuilder.append('"');
22+
conditionBuilder.append(" ");
23+
conditionBuilder.append(operator.symbol());
24+
conditionBuilder.append(" ");
25+
if (value instanceof String) {
26+
conditionBuilder.append("'").append(value).append("'");
27+
} else {
28+
conditionBuilder.append(value);
29+
}
30+
31+
return conditionBuilder.toString();
32+
}
33+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package io.opengemini.client.api;
2+
3+
public enum ComparisonOperator {
4+
EQUALS("="),
5+
NOT_EQUALS("<>"),
6+
GREATER_THAN(">"),
7+
LESS_THAN("<"),
8+
GREATER_THAN_OR_EQUALS(">="),
9+
LESS_THAN_OR_EQUALS("<=");
10+
11+
private final String symbol;
12+
13+
ComparisonOperator(String symbol) {
14+
this.symbol = symbol;
15+
}
16+
17+
public String symbol() {
18+
return symbol;
19+
}
20+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.opengemini.client.api;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
public class CompositeCondition implements Condition {
7+
private final LogicalOperator logicalOperator;
8+
9+
private final Condition[] conditions;
10+
11+
public CompositeCondition(LogicalOperator logicalOperator, Condition... conditions) {
12+
this.logicalOperator = logicalOperator;
13+
this.conditions = conditions;
14+
}
15+
16+
@Override
17+
public String build() {
18+
List<String> parts = new ArrayList<>();
19+
for (Condition condition : conditions) {
20+
parts.add(condition.build());
21+
}
22+
return "(" + String.join(" " + logicalOperator.name() + " ", parts) + ")";
23+
}
24+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package io.opengemini.client.api;
2+
3+
public interface Condition {
4+
String build();
5+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.opengemini.client.api;
2+
3+
/**
4+
* ConstantExpression represents a constant value in the query
5+
*/
6+
public class ConstantExpression implements Expression {
7+
private final Object value;
8+
9+
public ConstantExpression(Object value) {
10+
this.value = value;
11+
}
12+
13+
public Object value() {
14+
return value;
15+
}
16+
17+
@Override
18+
public String build() {
19+
return value.toString();
20+
}
21+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package io.opengemini.client.api;
2+
3+
public interface Expression {
4+
String build();
5+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.opengemini.client.api;
2+
3+
/**
4+
* FieldExpression represents a column or field in the query
5+
*/
6+
public class FieldExpression implements Expression {
7+
private final String field;
8+
9+
public FieldExpression(String field) {
10+
this.field = field;
11+
}
12+
13+
public String field() {
14+
return field;
15+
}
16+
17+
@Override
18+
public String build() {
19+
return "\"" + field + "\"";
20+
}
21+
}

0 commit comments

Comments
 (0)