Skip to content

Commit

Permalink
Allow to parse a single statement; Added equals & hashcode; Removed d…
Browse files Browse the repository at this point in the history
…eprecated statements.
  • Loading branch information
Willena committed Nov 10, 2024
1 parent 3e7608d commit c7a2f60
Show file tree
Hide file tree
Showing 64 changed files with 1,764 additions and 350 deletions.
14 changes: 14 additions & 0 deletions src/main/java/io/github/willena/influxql/ast/Query.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import io.github.willena.influxql.parser.antlr.InfluxqlParser;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/** Top level {@link Node} is a {@link Query} Each query can contain multiple statements */
Expand All @@ -40,6 +41,19 @@ public List<Statement> getStatements() {
return statements;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Query query = (Query) o;
return Objects.equals(statements, query.statements);
}

@Override
public int hashCode() {
return Objects.hashCode(statements);
}

/**
* Build a query based on provided statements (at least one)
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,29 @@

import io.github.willena.influxql.ast.Expression;
import io.github.willena.influxql.ast.token.Operator;
import java.util.Objects;

/** Binary expression */
public class BinaryExpression implements Expression {
private final Expression left;
private final Expression right;
private final Operator op;

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
BinaryExpression that = (BinaryExpression) o;
return Objects.equals(left, that.left)
&& Objects.equals(right, that.right)
&& op == that.op;
}

@Override
public int hashCode() {
return Objects.hash(left, right, op);
}

/**
* Create a new Binary expression with LHS and RHS and operator
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,25 @@
import static io.github.willena.influxql.ast.utils.Utils.quoteIdentifier;

import io.github.willena.influxql.ast.Expression;
import java.util.Objects;

/** Bound parameter expression */
public class BoundParameter implements Expression {
private final String name;

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
BoundParameter that = (BoundParameter) o;
return Objects.equals(name, that.name);
}

@Override
public int hashCode() {
return Objects.hashCode(name);
}

/**
* Create named bound parameter
*
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/io/github/willena/influxql/ast/expr/Call.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import io.github.willena.influxql.ast.Expression;
import io.github.willena.influxql.ast.utils.StringJoiningList;
import java.util.List;
import java.util.Objects;

/** Function / Call expression */
public class Call implements Expression {
Expand All @@ -34,6 +35,19 @@ private Call(Builder builder) {
ensureDefined("name", name);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Call call = (Call) o;
return Objects.equals(name, call.name) && Objects.equals(args, call.args);
}

@Override
public int hashCode() {
return Objects.hash(name, args);
}

/**
* Gets name.
*
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/io/github/willena/influxql/ast/expr/Dimension.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import io.github.willena.influxql.ast.Node;
import io.github.willena.influxql.ast.expr.literal.DurationLiteral;
import java.time.Duration;
import java.util.Objects;

/** A grouping dimensions */
public class Dimension implements Node {
Expand All @@ -38,6 +39,19 @@ public Dimension(final Expression expression) {
ensureDefined("expression", expression);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Dimension dimension = (Dimension) o;
return Objects.equals(expression, dimension.expression);
}

@Override
public int hashCode() {
return Objects.hashCode(expression);
}

/**
* Group by expression
*
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/io/github/willena/influxql/ast/expr/Distinct.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import static io.github.willena.influxql.ast.utils.Utils.ensureDefined;

import io.github.willena.influxql.ast.Expression;
import java.util.Objects;

/** Distinct expression */
public class Distinct implements Expression {
Expand All @@ -35,6 +36,19 @@ public Distinct(String value) {
ensureDefined("value", value);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Distinct distinct = (Distinct) o;
return Objects.equals(value, distinct.value);
}

@Override
public int hashCode() {
return Objects.hashCode(value);
}

/**
* Build using name
*
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/io/github/willena/influxql/ast/expr/Parentheses.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import static io.github.willena.influxql.ast.utils.Utils.ensureDefined;

import io.github.willena.influxql.ast.Expression;
import java.util.Objects;

/** Parenthesis expression */
public class Parentheses implements Expression {
Expand All @@ -35,6 +36,19 @@ public Parentheses(Expression expression) {
ensureDefined("expression", expression);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Parentheses that = (Parentheses) o;
return Objects.equals(expression, that.expression);
}

@Override
public int hashCode() {
return Objects.hashCode(expression);
}

/**
* Build a new {@link Parentheses} expression
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import io.github.willena.influxql.ast.Expression;
import io.github.willena.influxql.ast.token.Operator;
import java.util.Objects;
import java.util.Set;

public class UnaryExpression implements Expression {
Expand All @@ -43,6 +44,19 @@ private UnaryExpression(Builder builder) {
}
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UnaryExpression that = (UnaryExpression) o;
return Objects.equals(expression, that.expression) && operator == that.operator;
}

@Override
public int hashCode() {
return Objects.hash(expression, operator);
}

@Override
public String toString() {
return operator.toString() + expression.toString();
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/io/github/willena/influxql/ast/expr/VarRef.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import static io.github.willena.influxql.ast.utils.Utils.quoteIdentifier;

import io.github.willena.influxql.ast.Expression;
import java.util.Objects;

/** Reference to variable of name of field / alias */
public class VarRef implements Expression {
Expand All @@ -39,6 +40,19 @@ public VarRef(String value, DataType type) {
ensureDefined("value", value);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
VarRef varRef = (VarRef) o;
return Objects.equals(value, varRef.value) && type == varRef.type;
}

@Override
public int hashCode() {
return Objects.hash(value, type);
}

/**
* Build a varRef from name
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import io.github.willena.influxql.ast.Buildable;
import java.time.Duration;
import java.util.Objects;

/**
* Helper class to build retention policy object; This one is not in the original AST but allow
Expand All @@ -44,6 +45,27 @@ public boolean isEmpty() {
&& retentionPolicyShardGroupDuration == null;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
RetentionPolicy that = (RetentionPolicy) o;
return Objects.equals(retentionPolicyDuration, that.retentionPolicyDuration)
&& Objects.equals(retentionPolicyReplication, that.retentionPolicyReplication)
&& Objects.equals(retentionPolicyName, that.retentionPolicyName)
&& Objects.equals(
retentionPolicyShardGroupDuration, that.retentionPolicyShardGroupDuration);
}

@Override
public int hashCode() {
return Objects.hash(
retentionPolicyDuration,
retentionPolicyReplication,
retentionPolicyName,
retentionPolicyShardGroupDuration);
}

/**
* Get the RP duration
*
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/io/github/willena/influxql/ast/field/Field.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import io.github.willena.influxql.ast.expr.DataType;
import io.github.willena.influxql.ast.expr.VarRef;
import io.github.willena.influxql.ast.expr.Wildcard;
import java.util.Objects;

/** Basic selection Field */
public class Field implements Node {
Expand All @@ -38,6 +39,19 @@ private Field(Builder builder) {
ensureDefined("expression", expression);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Field field = (Field) o;
return Objects.equals(expression, field.expression) && Objects.equals(alias, field.alias);
}

@Override
public int hashCode() {
return Objects.hash(expression, alias);
}

@Override
public String toString() {
String str = expression.toString();
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/io/github/willena/influxql/ast/field/SortField.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

import io.github.willena.influxql.ast.Buildable;
import io.github.willena.influxql.ast.Node;
import java.util.Objects;

/** A Field used to sort the data. */
public class SortField implements Node {
Expand All @@ -34,6 +35,19 @@ private SortField(Builder builder) {
ensureDefined("name", name);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SortField sortField = (SortField) o;
return ascending == sortField.ascending && Objects.equals(name, sortField.name);
}

@Override
public int hashCode() {
return Objects.hash(name, ascending);
}

/**
* Create an ASC based sort field
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import io.github.willena.influxql.ast.Buildable;
import io.github.willena.influxql.ast.Source;
import java.util.Objects;
import java.util.regex.Pattern;

/** An influxQL measurement in FROM clauses */
Expand Down Expand Up @@ -131,6 +132,23 @@ public String toString() {
return buf.toString();
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Measurement that = (Measurement) o;
return Objects.equals(database, that.database)
&& Objects.equals(retentionPolicy, that.retentionPolicy)
&& Objects.equals(name, that.name)
&& Objects.equals(regex, that.regex)
&& Objects.equals(systemIterator, that.systemIterator);
}

@Override
public int hashCode() {
return Objects.hash(database, retentionPolicy, name, regex, systemIterator);
}

/** {@code Measurement} builder static inner class. */
public static final class Builder implements Buildable<Measurement> {
private String database;
Expand Down
Loading

0 comments on commit c7a2f60

Please sign in to comment.