Skip to content

Commit bb4c3bd

Browse files
feat: add additional builder methods (#425)
Helps avoid the direct import of generated object factories
1 parent 8f14f62 commit bb4c3bd

File tree

23 files changed

+131
-125
lines changed

23 files changed

+131
-125
lines changed

core/src/main/java/io/substrait/dsl/SubstraitBuilder.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@
33
import com.github.bsideup.jabel.Desugar;
44
import io.substrait.expression.AggregateFunctionInvocation;
55
import io.substrait.expression.Expression;
6+
import io.substrait.expression.Expression.Cast;
67
import io.substrait.expression.Expression.FailureBehavior;
78
import io.substrait.expression.Expression.IfClause;
89
import io.substrait.expression.Expression.IfThen;
10+
import io.substrait.expression.Expression.SingleOrList;
11+
import io.substrait.expression.Expression.Switch;
912
import io.substrait.expression.Expression.SwitchClause;
1013
import io.substrait.expression.FieldReference;
1114
import io.substrait.expression.FunctionArg;
12-
import io.substrait.expression.ImmutableExpression.Cast;
13-
import io.substrait.expression.ImmutableExpression.SingleOrList;
14-
import io.substrait.expression.ImmutableExpression.Switch;
15-
import io.substrait.expression.ImmutableFieldReference;
1615
import io.substrait.expression.WindowBound;
1716
import io.substrait.extension.DefaultExtensionCatalog;
1817
import io.substrait.extension.SimpleExtension;
@@ -33,7 +32,6 @@
3332
import io.substrait.relation.physical.HashJoin;
3433
import io.substrait.relation.physical.MergeJoin;
3534
import io.substrait.relation.physical.NestedLoopJoin;
36-
import io.substrait.type.ImmutableType;
3735
import io.substrait.type.NamedStruct;
3836
import io.substrait.type.Type;
3937
import io.substrait.type.TypeCreator;
@@ -396,7 +394,7 @@ public Expression cast(Expression input, Type type) {
396394
}
397395

398396
public FieldReference fieldReference(Rel input, int index) {
399-
return ImmutableFieldReference.newInputRelReference(index, input);
397+
return FieldReference.newInputRelReference(index, input);
400398
}
401399

402400
public List<FieldReference> fieldReferences(Rel input, int... indexes) {
@@ -406,7 +404,7 @@ public List<FieldReference> fieldReferences(Rel input, int... indexes) {
406404
}
407405

408406
public FieldReference fieldReference(List<Rel> inputs, int index) {
409-
return ImmutableFieldReference.newInputRelReference(index, inputs);
407+
return FieldReference.newInputRelReference(index, inputs);
410408
}
411409

412410
public List<FieldReference> fieldReferences(List<Rel> inputs, int... indexes) {
@@ -439,7 +437,7 @@ public List<Expression.SortField> sortFields(Rel input, int... indexes) {
439437
.mapToObj(
440438
index ->
441439
Expression.SortField.builder()
442-
.expr(ImmutableFieldReference.newInputRelReference(index, input))
440+
.expr(FieldReference.newInputRelReference(index, input))
443441
.direction(Expression.SortDirection.ASC_NULLS_LAST)
444442
.build())
445443
.collect(java.util.stream.Collectors.toList());
@@ -678,11 +676,7 @@ public Expression.WindowFunctionInvocation windowFn(
678676
// Types
679677

680678
public Type.UserDefined userDefinedType(String namespace, String typeName) {
681-
return ImmutableType.UserDefined.builder()
682-
.uri(namespace)
683-
.name(typeName)
684-
.nullable(false)
685-
.build();
679+
return Type.UserDefined.builder().uri(namespace).name(typeName).nullable(false).build();
686680
}
687681

688682
// Misc

core/src/main/java/io/substrait/expression/EnumArg.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,16 @@ default <R, E extends Throwable> R accept(
2323

2424
static EnumArg of(SimpleExtension.EnumArgument enumArg, String option) {
2525
assert (enumArg.options().contains(option));
26-
return ImmutableEnumArg.builder().value(Optional.of(option)).build();
26+
return builder().value(Optional.of(option)).build();
2727
}
2828

2929
static EnumArg of(String value) {
30-
return ImmutableEnumArg.builder().value(Optional.of(value)).build();
30+
return builder().value(Optional.of(value)).build();
3131
}
3232

33-
EnumArg UNSPECIFIED_ENUM_ARG = ImmutableEnumArg.builder().value(Optional.empty()).build();
33+
EnumArg UNSPECIFIED_ENUM_ARG = builder().value(Optional.empty()).build();
34+
35+
static ImmutableEnumArg.Builder builder() {
36+
return ImmutableEnumArg.builder();
37+
}
3438
}

core/src/main/java/io/substrait/expression/proto/ProtoExpressionConverter.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import io.substrait.expression.FieldReference;
66
import io.substrait.expression.FunctionArg;
77
import io.substrait.expression.FunctionOption;
8-
import io.substrait.expression.ImmutableExpression;
98
import io.substrait.expression.WindowBound;
109
import io.substrait.extension.ExtensionLookup;
1110
import io.substrait.extension.SimpleExtension;
@@ -121,7 +120,7 @@ public Expression from(io.substrait.proto.Expression expr) {
121120
scalarFunction.getOptionsList().stream()
122121
.map(ProtoExpressionConverter::fromFunctionOption)
123122
.collect(Collectors.toList());
124-
yield ImmutableExpression.ScalarFunctionInvocation.builder()
123+
yield Expression.ScalarFunctionInvocation.builder()
125124
.addAllArguments(args)
126125
.declaration(declaration)
127126
.outputType(protoTypeConverter.from(scalarFunction.getOutputType()))
@@ -152,7 +151,7 @@ public Expression from(io.substrait.proto.Expression expr) {
152151
orList.getOptionsList().stream()
153152
.map(this::from)
154153
.collect(java.util.stream.Collectors.toList());
155-
yield ImmutableExpression.SingleOrList.builder()
154+
yield Expression.SingleOrList.builder()
156155
.condition(from(orList.getValue()))
157156
.addAllOptions(values)
158157
.build();
@@ -163,14 +162,14 @@ public Expression from(io.substrait.proto.Expression expr) {
163162
multiOrList.getOptionsList().stream()
164163
.map(
165164
t ->
166-
ImmutableExpression.MultiOrListRecord.builder()
165+
Expression.MultiOrListRecord.builder()
167166
.addAllValues(
168167
t.getFieldsList().stream()
169168
.map(this::from)
170169
.collect(java.util.stream.Collectors.toList()))
171170
.build())
172171
.collect(java.util.stream.Collectors.toList());
173-
yield ImmutableExpression.MultiOrList.builder()
172+
yield Expression.MultiOrList.builder()
174173
.addAllOptionCombinations(values)
175174
.addAllConditions(
176175
multiOrList.getValueList().stream()
@@ -186,7 +185,7 @@ public Expression from(io.substrait.proto.Expression expr) {
186185
switch (expr.getSubquery().getSubqueryTypeCase()) {
187186
case SET_PREDICATE -> {
188187
var rel = protoRelConverter.from(expr.getSubquery().getSetPredicate().getTuples());
189-
yield ImmutableExpression.SetPredicate.builder()
188+
yield Expression.SetPredicate.builder()
190189
.tuples(rel)
191190
.predicateOp(
192191
Expression.PredicateOp.fromProto(
@@ -195,7 +194,7 @@ public Expression from(io.substrait.proto.Expression expr) {
195194
}
196195
case SCALAR -> {
197196
var rel = protoRelConverter.from(expr.getSubquery().getScalar().getInput());
198-
yield ImmutableExpression.ScalarSubquery.builder()
197+
yield Expression.ScalarSubquery.builder()
199198
.input(rel)
200199
.type(
201200
rel.getRecordType()
@@ -220,7 +219,7 @@ public Type visit(Type.Struct type) throws RuntimeException {
220219
expr.getSubquery().getInPredicate().getNeedlesList().stream()
221220
.map(e -> this.from(e))
222221
.collect(java.util.stream.Collectors.toList());
223-
yield ImmutableExpression.InPredicate.builder().haystack(rel).needles(needles).build();
222+
yield Expression.InPredicate.builder().haystack(rel).needles(needles).build();
224223
}
225224
case SET_COMPARISON -> {
226225
throw new UnsupportedOperationException(

core/src/main/java/io/substrait/extendedexpression/ExtendedExpression.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,21 @@ public abstract class ExtendedExpression {
2020

2121
public abstract Optional<AdvancedExtension> getAdvancedExtension();
2222

23+
public static ImmutableExtendedExpression.Builder builder() {
24+
return ImmutableExtendedExpression.builder();
25+
}
26+
2327
public interface ExpressionReferenceBase {
2428
List<String> getOutputNames();
2529
}
2630

2731
@Value.Immutable
2832
public abstract static class ExpressionReference implements ExpressionReferenceBase {
2933
public abstract Expression getExpression();
34+
35+
public static ImmutableExpressionReference.Builder builder() {
36+
return ImmutableExpressionReference.builder();
37+
}
3038
}
3139

3240
@Value.Immutable

core/src/main/java/io/substrait/extendedexpression/ProtoExtendedExpressionConverter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import io.substrait.extension.ExtensionCollector;
66
import io.substrait.extension.ExtensionLookup;
77
import io.substrait.extension.ImmutableExtensionLookup;
8-
import io.substrait.extension.ImmutableSimpleExtension;
98
import io.substrait.extension.SimpleExtension;
109
import io.substrait.proto.ExpressionReference;
1110
import io.substrait.proto.NamedStruct;
@@ -29,7 +28,7 @@ public ProtoExtendedExpressionConverter(SimpleExtension.ExtensionCollection exte
2928

3029
private final ProtoTypeConverter protoTypeConverter =
3130
new ProtoTypeConverter(
32-
new ExtensionCollector(), ImmutableSimpleExtension.ExtensionCollection.builder().build());
31+
new ExtensionCollector(), SimpleExtension.ExtensionCollection.builder().build());
3332

3433
public ExtendedExpression from(io.substrait.proto.ExtendedExpression extendedExpression) {
3534
// fill in simple extension information through a discovery in the current proto-extended

core/src/main/java/io/substrait/extension/SimpleExtension.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,10 @@ public abstract static class ExtensionCollection {
570570

571571
public abstract List<WindowFunctionVariant> windowFunctions();
572572

573+
public static ImmutableSimpleExtension.ExtensionCollection.Builder builder() {
574+
return ImmutableSimpleExtension.ExtensionCollection.builder();
575+
}
576+
573577
private final Supplier<Set<String>> namespaceSupplier =
574578
Util.memoize(
575579
() -> {

core/src/main/java/io/substrait/plan/Plan.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,14 @@ public abstract static class Version {
4343

4444
public abstract Optional<String> getProducer();
4545

46+
public static ImmutableVersion.Builder builder() {
47+
return ImmutableVersion.builder();
48+
}
49+
4650
private static Version loadVersion() {
4751
final String[] versionComponents = SubstraitVersion.VERSION.split("\\.");
4852

49-
return ImmutableVersion.builder()
53+
return builder()
5054
.major(Integer.parseInt(versionComponents[0]))
5155
.minor(Integer.parseInt(versionComponents[1]))
5256
.patch(Integer.parseInt(versionComponents[2]))

core/src/main/java/io/substrait/relation/ProtoRelConverter.java

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import io.substrait.expression.Expression;
44
import io.substrait.expression.FunctionArg;
5-
import io.substrait.expression.ImmutableExpression;
65
import io.substrait.expression.proto.ProtoExpressionConverter;
76
import io.substrait.extension.AdvancedExtension;
87
import io.substrait.extension.ExtensionLookup;
@@ -31,13 +30,11 @@
3130
import io.substrait.proto.WriteRel;
3231
import io.substrait.relation.extensions.EmptyDetail;
3332
import io.substrait.relation.extensions.EmptyOptimization;
33+
import io.substrait.relation.files.FileFormat;
3434
import io.substrait.relation.files.FileOrFiles;
35-
import io.substrait.relation.files.ImmutableFileFormat;
36-
import io.substrait.relation.files.ImmutableFileOrFiles;
3735
import io.substrait.relation.physical.HashJoin;
3836
import io.substrait.relation.physical.MergeJoin;
3937
import io.substrait.relation.physical.NestedLoopJoin;
40-
import io.substrait.type.ImmutableNamedStruct;
4138
import io.substrait.type.NamedStruct;
4239
import io.substrait.type.Type;
4340
import io.substrait.type.proto.ProtoTypeConverter;
@@ -325,7 +322,7 @@ protected NamedStruct newNamedStruct(ReadRel rel) {
325322

326323
protected NamedStruct newNamedStruct(io.substrait.proto.NamedStruct namedStruct) {
327324
var struct = namedStruct.getStruct();
328-
return ImmutableNamedStruct.builder()
325+
return NamedStruct.builder()
329326
.names(namedStruct.getNamesList())
330327
.struct(
331328
Type.Struct.builder()
@@ -485,22 +482,22 @@ protected LocalFiles newLocalFiles(ReadRel rel) {
485482
}
486483

487484
protected FileOrFiles newFileOrFiles(ReadRel.LocalFiles.FileOrFiles file) {
488-
ImmutableFileOrFiles.Builder builder =
489-
ImmutableFileOrFiles.builder()
485+
var builder =
486+
FileOrFiles.builder()
490487
.partitionIndex(file.getPartitionIndex())
491488
.start(file.getStart())
492489
.length(file.getLength());
493490
if (file.hasParquet()) {
494-
builder.fileFormat(ImmutableFileFormat.ParquetReadOptions.builder().build());
491+
builder.fileFormat(FileFormat.ParquetReadOptions.builder().build());
495492
} else if (file.hasOrc()) {
496-
builder.fileFormat(ImmutableFileFormat.OrcReadOptions.builder().build());
493+
builder.fileFormat(FileFormat.OrcReadOptions.builder().build());
497494
} else if (file.hasArrow()) {
498-
builder.fileFormat(ImmutableFileFormat.ArrowReadOptions.builder().build());
495+
builder.fileFormat(FileFormat.ArrowReadOptions.builder().build());
499496
} else if (file.hasDwrf()) {
500-
builder.fileFormat(ImmutableFileFormat.DwrfReadOptions.builder().build());
497+
builder.fileFormat(FileFormat.DwrfReadOptions.builder().build());
501498
} else if (file.hasText()) {
502499
var ffBuilder =
503-
ImmutableFileFormat.DelimiterSeparatedTextReadOptions.builder()
500+
FileFormat.DelimiterSeparatedTextReadOptions.builder()
504501
.fieldDelimiter(file.getText().getFieldDelimiter())
505502
.maxLineSize(file.getText().getMaxLineSize())
506503
.quote(file.getText().getQuote())
@@ -511,8 +508,7 @@ protected FileOrFiles newFileOrFiles(ReadRel.LocalFiles.FileOrFiles file) {
511508
}
512509
builder.fileFormat(ffBuilder.build());
513510
} else if (file.hasExtension()) {
514-
builder.fileFormat(
515-
ImmutableFileFormat.Extension.builder().extension(file.getExtension()).build());
511+
builder.fileFormat(FileFormat.Extension.builder().extension(file.getExtension()).build());
516512
}
517513
if (file.hasUriFile()) {
518514
builder.pathType(FileOrFiles.PathType.URI_FILE).path(file.getUriFile());
@@ -534,7 +530,7 @@ protected VirtualTableScan newVirtualTable(ReadRel rel) {
534530
List<Expression.StructLiteral> structLiterals = new ArrayList<>(virtualTable.getValuesCount());
535531
for (var struct : virtualTable.getValuesList()) {
536532
structLiterals.add(
537-
ImmutableExpression.StructLiteral.builder()
533+
Expression.StructLiteral.builder()
538534
.fields(
539535
struct.getFieldsList().stream()
540536
.map(converter::from)

core/src/main/java/io/substrait/relation/files/FileFormat.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,9 @@ public static ImmutableFileFormat.DelimiterSeparatedTextReadOptions.Builder buil
5656
@Value.Immutable
5757
abstract static class Extension implements FileFormat {
5858
public abstract com.google.protobuf.Any getExtension();
59+
60+
public static ImmutableFileFormat.Extension.Builder builder() {
61+
return ImmutableFileFormat.Extension.builder();
62+
}
5963
}
6064
}

core/src/main/java/io/substrait/relation/files/FileOrFiles.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ enum PathType {
2626

2727
Optional<FileFormat> getFileFormat();
2828

29+
static ImmutableFileOrFiles.Builder builder() {
30+
return ImmutableFileOrFiles.builder();
31+
}
32+
2933
default ReadRel.LocalFiles.FileOrFiles toProto() {
3034
ReadRel.LocalFiles.FileOrFiles.Builder builder = ReadRel.LocalFiles.FileOrFiles.newBuilder();
3135

0 commit comments

Comments
 (0)