Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#1380] Add Literals class for managing the Literal helper methods #1381

Merged
merged 1 commit into from
Jan 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@
* Represents a constant literal value in the public expression API.
*
* @param <T> the JVM type of value held by the literal
* @deprecated This interface will be removed. Use {@link
* com.datastrato.gravitino.rel.expressions.literals.Literal} instead.
*/
@Deprecated
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you deprecate the class, not just the method?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In fact, I have moved this class from package com.datastrato.gravitino.rel.expressions to com.datastrato.gravitino.rel.expressions.literals, and I want users to use the new class.

public interface Literal<T> extends Expression {
/** @return The literal value. */
T value();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* Copyright 2024 Datastrato Pvt Ltd.
* This software is licensed under the Apache License version 2.
*/
package com.datastrato.gravitino.rel.expressions.literals;

import com.datastrato.gravitino.rel.expressions.Expression;
import com.datastrato.gravitino.rel.types.Type;

/**
* Represents a constant literal value in the public expression API.
*
* @param <T> the JVM type of value held by the literal
*/
public interface Literal<T> extends Expression {
/** @return The literal value. */
T value();

/** @return The data type of the literal. */
Type dataType();

@Override
default Expression[] children() {
return EMPTY_EXPRESSION;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
/*
* Copyright 2024 Datastrato Pvt Ltd.
* This software is licensed under the Apache License version 2.
*/
package com.datastrato.gravitino.rel.expressions.literals;

import com.datastrato.gravitino.rel.types.Type;
import com.datastrato.gravitino.rel.types.Types;
import java.util.Objects;

/** The helper class to create literals to pass into Gravitino. */
public class Literals {

/**
* Creates a literal with the given value and data type.
*
* @param value the literal value
* @param dataType the data type of the literal
* @return a new {@link com.datastrato.gravitino.rel.expressions.Literal} instance
* @param <T> the JVM type of value held by the literal
*/
public static <T> LiteralImpl<T> of(T value, Type dataType) {
return new LiteralImpl<>(value, dataType);
}

/**
* Creates an integer type literal with the given value.
*
* @param value the integer literal value
* @return a new {@link Literal} instance
*/
public static LiteralImpl<Integer> integer(Integer value) {
return of(value, Types.IntegerType.get());
}

/**
* Creates a string type literal with the given value.
*
* @param value the string literal value
* @return a new {@link Literal} instance
*/
public static LiteralImpl<String> string(String value) {
return of(value, Types.StringType.get());
}

/**
* Creates a literal with the given type value.
*
* @param <T> The JVM type of value held by the literal.
*/
public static final class LiteralImpl<T> implements Literal<T> {
private final T value;
private final Type dataType;

private LiteralImpl(T value, Type dataType) {
this.value = value;
this.dataType = dataType;
}

@Override
public T value() {
return value;
}

@Override
public Type dataType() {
return dataType;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
LiteralImpl<?> literal = (LiteralImpl<?>) o;
return Objects.equals(value, literal.value) && Objects.equals(dataType, literal.dataType);
}

@Override
public int hashCode() {
return Objects.hash(value, dataType);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
package com.datastrato.gravitino.rel.expressions.transforms;

import com.datastrato.gravitino.rel.expressions.Expression;
import com.datastrato.gravitino.rel.expressions.Literal;
import com.datastrato.gravitino.rel.expressions.NamedReference;
import com.datastrato.gravitino.rel.expressions.literals.Literal;
import com.datastrato.gravitino.rel.expressions.literals.Literals;
import com.google.common.collect.ObjectArrays;
import java.util.Arrays;
import java.util.Objects;
Expand Down Expand Up @@ -133,7 +134,7 @@ public static HourTransform hour(String columnName) {
*/
public static BucketTransform bucket(int numBuckets, String[]... fieldNames) {
return new BucketTransform(
Literal.integer(numBuckets),
Literals.integer(numBuckets),
Arrays.stream(fieldNames).map(NamedReference::field).toArray(NamedReference[]::new));
}

Expand Down Expand Up @@ -166,7 +167,7 @@ public static RangeTransform range(String[] fieldName) {
* @return The created transform
*/
public static TruncateTransform truncate(int width, String[] fieldName) {
return new TruncateTransform(Literal.integer(width), NamedReference.field(fieldName));
return new TruncateTransform(Literals.integer(width), NamedReference.field(fieldName));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
import static com.datastrato.gravitino.rel.expressions.transforms.Transforms.year;

import com.datastrato.gravitino.rel.expressions.Expression;
import com.datastrato.gravitino.rel.expressions.Literal;
import com.datastrato.gravitino.rel.expressions.NamedReference;
import com.datastrato.gravitino.rel.expressions.literals.Literals;
import com.datastrato.gravitino.rel.expressions.transforms.Transform;
import com.datastrato.gravitino.rel.types.Type;
import com.datastrato.gravitino.rel.types.Types;
Expand Down Expand Up @@ -110,7 +110,7 @@ public boolean autoIncrement() {
};
// partition by foo(col_1, 'bar')
NamedReference.FieldReference arg1 = field(column.name());
Literal.LiteralImpl<String> arg2 = Literal.string("bar");
Literals.LiteralImpl<String> arg2 = Literals.string("bar");
Transform applyTransform = apply("foo", new Expression[] {arg1, arg2});
Assertions.assertEquals("foo", applyTransform.name());
Assertions.assertEquals(2, applyTransform.arguments().length);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@

import com.datastrato.gravitino.rel.expressions.Expression;
import com.datastrato.gravitino.rel.expressions.FunctionExpression;
import com.datastrato.gravitino.rel.expressions.Literal;
import com.datastrato.gravitino.rel.expressions.NamedReference;
import com.datastrato.gravitino.rel.expressions.literals.Literal;
import com.datastrato.gravitino.rel.expressions.sorts.NullOrdering;
import com.datastrato.gravitino.rel.expressions.sorts.SortDirection;
import com.datastrato.gravitino.rel.expressions.sorts.SortOrder;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/
package com.datastrato.gravitino.dto.rel.expressions;

import com.datastrato.gravitino.rel.expressions.Literal;
import com.datastrato.gravitino.rel.expressions.literals.Literal;
import com.datastrato.gravitino.rel.types.Type;
import lombok.EqualsAndHashCode;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,11 @@
import com.datastrato.gravitino.rel.Table;
import com.datastrato.gravitino.rel.expressions.Expression;
import com.datastrato.gravitino.rel.expressions.FunctionExpression;
import com.datastrato.gravitino.rel.expressions.Literal;
import com.datastrato.gravitino.rel.expressions.NamedReference;
import com.datastrato.gravitino.rel.expressions.distributions.Distribution;
import com.datastrato.gravitino.rel.expressions.distributions.Distributions;
import com.datastrato.gravitino.rel.expressions.literals.Literal;
import com.datastrato.gravitino.rel.expressions.literals.Literals;
import com.datastrato.gravitino.rel.expressions.sorts.SortOrder;
import com.datastrato.gravitino.rel.expressions.sorts.SortOrders;
import com.datastrato.gravitino.rel.expressions.transforms.Transform;
Expand Down Expand Up @@ -254,7 +255,7 @@ public static Expression[] fromFunctionArg(FunctionArg[] args) {
public static Expression fromFunctionArg(FunctionArg arg) {
switch (arg.argType()) {
case LITERAL:
return Literal.of(((LiteralDTO) arg).value(), ((LiteralDTO) arg).dataType());
return Literals.of(((LiteralDTO) arg).value(), ((LiteralDTO) arg).dataType());
case FIELD:
return NamedReference.field(((FieldReferenceDTO) arg).fieldName());
case FUNCTION:
Expand Down
Loading