Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
d0e0f94
working
pengpeng-lu Aug 4, 2025
7c0bdae
refactor RLInvokedRoutine step 1
pengpeng-lu Aug 5, 2025
1e3f7b4
refactor RLInvokedRoutine done
pengpeng-lu Aug 5, 2025
2ecb9c3
refactor parser
pengpeng-lu Aug 5, 2025
9fd1f1d
merge main
pengpeng-lu Aug 5, 2025
9cfdf52
style
pengpeng-lu Aug 7, 2025
6cf351a
Merge branch 'main' into udo
pengpeng-lu Aug 7, 2025
4b895f7
fix test
pengpeng-lu Aug 7, 2025
c86f824
style
pengpeng-lu Aug 19, 2025
08aa8e6
Merge branch 'main' into udo
pengpeng-lu Aug 19, 2025
d18d804
parser change
pengpeng-lu Aug 22, 2025
750e9be
InvokedRoutine
pengpeng-lu Aug 23, 2025
5a82038
lookupnestedField
pengpeng-lu Aug 23, 2025
7514f03
add temp scalar function tests in AstNormalizerTest
pengpeng-lu Aug 24, 2025
cb237f7
style and teamscale
pengpeng-lu Aug 24, 2025
9d587d8
spotbug
pengpeng-lu Aug 25, 2025
e143ec5
Merge branch 'main' into udo
pengpeng-lu Aug 28, 2025
8ad14ee
nit
pengpeng-lu Sep 30, 2025
3d0b01d
save
pengpeng-lu Sep 30, 2025
df1b1c6
Merge branch 'main' into udo
pengpeng-lu Sep 30, 2025
31b64e3
merge main
pengpeng-lu Sep 30, 2025
588da38
visitSqlParameterDeclarationList
pengpeng-lu Sep 30, 2025
05227ea
add more tests
pengpeng-lu Sep 30, 2025
6961f1b
Merge branch 'main' into udo
pengpeng-lu Oct 1, 2025
fd7b884
normalize function name
pengpeng-lu Oct 1, 2025
e967c76
Merge branch 'main' into udo
pengpeng-lu Oct 1, 2025
d4a43ae
checkstyle
pengpeng-lu Oct 2, 2025
31d3c8e
more tests
pengpeng-lu Oct 2, 2025
f1b6260
merge main
pengpeng-lu Oct 3, 2025
1f497ae
teamscale gaps
pengpeng-lu Oct 6, 2025
930579b
Merge branch 'main' into udo
pengpeng-lu Oct 6, 2025
eda5a37
style
pengpeng-lu Oct 6, 2025
2b0b77c
merge main
pengpeng-lu Oct 8, 2025
1740682
Merge branch 'main' into udo
pengpeng-lu Oct 13, 2025
04960e2
add signature to TypedVisitor
pengpeng-lu Oct 13, 2025
abbae80
rename
pengpeng-lu Oct 21, 2025
707eaa6
Merge branch 'main' into udo
pengpeng-lu Oct 21, 2025
384c97d
serializationn modify
pengpeng-lu Oct 24, 2025
b90f975
style
pengpeng-lu Oct 24, 2025
45f139f
Merge branch 'main' into udo
pengpeng-lu Oct 27, 2025
706f2b5
add unit test Teamscale need
pengpeng-lu Oct 27, 2025
59eeca0
merge main
pengpeng-lu Oct 28, 2025
404d4f4
fix test
pengpeng-lu Oct 28, 2025
cc3c49a
typo
pengpeng-lu Oct 29, 2025
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 @@ -34,7 +34,6 @@
import com.apple.foundationdb.record.metadata.View;
import com.apple.foundationdb.record.query.plan.cascades.UserDefinedFunction;
import com.apple.foundationdb.record.query.plan.cascades.typing.Type;
import com.apple.foundationdb.record.query.plan.serialization.DefaultPlanSerializationRegistry;
import com.apple.foundationdb.record.query.plan.synthetic.SyntheticRecordPlanner;
import com.apple.foundationdb.record.util.MapUtils;
import com.google.common.base.Verify;
Expand Down Expand Up @@ -705,9 +704,7 @@ public RecordMetaDataProto.MetaData toProto(@Nullable Descriptors.FileDescriptor
builder.addFormerIndexes(formerIndex.toProto());
}

PlanSerializationContext serializationContext = new PlanSerializationContext(DefaultPlanSerializationRegistry.INSTANCE,
PlanHashable.CURRENT_FOR_CONTINUATION);
builder.addAllUserDefinedFunctions(userDefinedFunctionMap.values().stream().map(func -> func.toProto(serializationContext)).collect(Collectors.toList()));
builder.addAllUserDefinedFunctions(userDefinedFunctionMap.values().stream().map(UserDefinedFunction::toProto).collect(Collectors.toList()));
builder.addAllViews(viewMap.values().stream().map(View::toProto).collect(Collectors.toList()));
builder.setSplitLongRecords(splitLongRecords);
builder.setStoreRecordVersions(storeRecordVersions);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,6 @@
import com.apple.foundationdb.record.provider.foundationdb.MetaDataProtoEditor;
import com.apple.foundationdb.record.metadata.View;
import com.apple.foundationdb.record.query.plan.cascades.UserDefinedFunction;
import com.apple.foundationdb.record.query.plan.serialization.DefaultPlanSerializationRegistry;
import com.apple.foundationdb.record.query.plan.serialization.PlanSerialization;
import com.google.common.base.Verify;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
Expand Down Expand Up @@ -233,9 +231,7 @@ private void loadProtoExceptRecords(@Nonnull RecordMetaDataProto.MetaData metaDa
}
}
for (RecordMetaDataProto.PUserDefinedFunction function: metaDataProto.getUserDefinedFunctionsList()) {
final UserDefinedFunction func = (UserDefinedFunction)PlanSerialization.dispatchFromProtoContainer(
new PlanSerializationContext(DefaultPlanSerializationRegistry.INSTANCE,
PlanHashable.CURRENT_FOR_CONTINUATION), function);
UserDefinedFunction func = UserDefinedFunction.fromProto(function);
userDefinedFunctionMap.put(func.getFunctionName(), func);
}
for (final RecordMetaDataProto.PView viewProto: metaDataProto.getViewsList()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,9 @@

package com.apple.foundationdb.record.query.plan.cascades;

import com.apple.foundationdb.record.PlanDeserializer;
import com.apple.foundationdb.record.PlanSerializationContext;
import com.apple.foundationdb.record.RecordCoreException;
import com.apple.foundationdb.record.RecordMetaDataProto;
import com.apple.foundationdb.record.query.plan.cascades.typing.Typed;
import com.google.auto.service.AutoService;
import com.google.common.collect.ImmutableList;

import javax.annotation.Nonnull;
Expand All @@ -44,7 +41,7 @@ public RawSqlFunction(@Nonnull final String functionName, @Nonnull final String

@Nonnull
@Override
public RecordMetaDataProto.PUserDefinedFunction toProto(@Nonnull final PlanSerializationContext serializationContext) {
public RecordMetaDataProto.PUserDefinedFunction toProto() {
final var builder = RecordMetaDataProto.PRawSqlFunction.newBuilder();
builder.setName(functionName).setDefinition(definition);
return RecordMetaDataProto.PUserDefinedFunction.newBuilder()
Expand All @@ -69,19 +66,8 @@ public String getDefinition() {
return definition;
}

@AutoService(PlanDeserializer.class)
public static class Deserializer implements PlanDeserializer<RecordMetaDataProto.PRawSqlFunction, RawSqlFunction> {
@Nonnull
@Override
public Class<RecordMetaDataProto.PRawSqlFunction> getProtoMessageClass() {
return RecordMetaDataProto.PRawSqlFunction.class;
}

@Nonnull
@Override
public RawSqlFunction fromProto(@Nonnull final PlanSerializationContext serializationContext,
@Nonnull final RecordMetaDataProto.PRawSqlFunction sqlFunction) {
return new RawSqlFunction(sqlFunction.getName(), sqlFunction.getDefinition());
}
@Nonnull
public static RawSqlFunction fromProto(@Nonnull final RecordMetaDataProto.PRawSqlFunction sqlFunction) {
return new RawSqlFunction(sqlFunction.getName(), sqlFunction.getDefinition());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
package com.apple.foundationdb.record.query.plan.cascades;

import com.apple.foundationdb.annotation.API;
import com.apple.foundationdb.record.PlanSerializationContext;
import com.apple.foundationdb.record.RecordMetaDataProto;
import com.apple.foundationdb.record.query.plan.cascades.typing.Type;
import com.apple.foundationdb.record.query.plan.cascades.typing.Typed;
Expand Down Expand Up @@ -63,9 +62,17 @@ public UserDefinedFunction(@Nonnull final String functionName, @Nonnull final Li

/**
* Serializes the {@link UserDefinedFunction} instance as a protobuf message.
* @param serializationContext The serialization context.
* @return A serialized version of the {@link UserDefinedFunction} as a protobuf message.
*/
@Nonnull
public abstract RecordMetaDataProto.PUserDefinedFunction toProto(@Nonnull PlanSerializationContext serializationContext);
public abstract RecordMetaDataProto.PUserDefinedFunction toProto();

@Nonnull
public static UserDefinedFunction fromProto(@Nonnull final RecordMetaDataProto.PUserDefinedFunction function) {
if (function.hasUserDefinedMacroFunction()) {
return UserDefinedMacroFunction.fromProto(function.getUserDefinedMacroFunction());
} else {
return RawSqlFunction.fromProto(function.getSqlFunction());
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* MacroFunction.java
* UserDefinedMacroFunction.java
*
* This source file is part of the FoundationDB open source project
*
Expand All @@ -20,33 +20,33 @@

package com.apple.foundationdb.record.query.plan.cascades;

import com.apple.foundationdb.record.PlanDeserializer;
import com.apple.foundationdb.record.PlanHashable;
import com.apple.foundationdb.record.PlanSerializationContext;
import com.apple.foundationdb.record.RecordCoreException;
import com.apple.foundationdb.record.RecordMetaDataProto;
import com.apple.foundationdb.record.planprotos.PMacroFunctionValue;
import com.apple.foundationdb.record.planprotos.PUserDefinedMacroFunction;
import com.apple.foundationdb.record.query.plan.cascades.typing.Typed;
import com.apple.foundationdb.record.query.plan.cascades.values.QuantifiedObjectValue;
import com.apple.foundationdb.record.query.plan.cascades.values.Value;
import com.apple.foundationdb.record.query.plan.cascades.values.translation.RegularTranslationMap;
import com.apple.foundationdb.record.query.plan.cascades.values.translation.TranslationMap;
import com.google.auto.service.AutoService;
import com.apple.foundationdb.record.query.plan.serialization.DefaultPlanSerializationRegistry;

import javax.annotation.Nonnull;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
* MacroFunction that expands a body (referring to parameters) into a {@link Value} (through encapsulation) call site.
* UserDefinedMacroFunction that expands a body (referring to parameters) into a {@link Value} (through encapsulation) call site.
*/
public class MacroFunction extends UserDefinedFunction {
public class UserDefinedMacroFunction extends UserDefinedFunction {
@Nonnull
private final Value bodyValue;
@Nonnull
private final List<CorrelationIdentifier> parameterIdentifiers;

public MacroFunction(@Nonnull final String functionName, @Nonnull final List<QuantifiedObjectValue> parameters, @Nonnull final Value bodyValue) {
public UserDefinedMacroFunction(@Nonnull final String functionName, @Nonnull final List<QuantifiedObjectValue> parameters, @Nonnull final Value bodyValue) {
super(functionName, parameters.stream().map(QuantifiedObjectValue::getResultType).collect(Collectors.toUnmodifiableList()));
this.parameterIdentifiers = parameters.stream().map(QuantifiedObjectValue::getAlias).collect(Collectors.toList());
this.bodyValue = bodyValue;
Expand All @@ -69,13 +69,15 @@ public Value encapsulate(@Nonnull List<? extends Typed> arguments) {

@Nonnull
@Override
public RecordMetaDataProto.PUserDefinedFunction toProto(@Nonnull PlanSerializationContext serializationContext) {
PMacroFunctionValue.Builder builder = PMacroFunctionValue.newBuilder();
public RecordMetaDataProto.PUserDefinedFunction toProto() {
PlanSerializationContext serializationContext = new PlanSerializationContext(DefaultPlanSerializationRegistry.INSTANCE,
PlanHashable.CURRENT_FOR_CONTINUATION);
PUserDefinedMacroFunction.Builder builder = PUserDefinedMacroFunction.newBuilder();
for (int i = 0; i < parameterTypes.size(); i++) {
builder.addArguments(QuantifiedObjectValue.of(parameterIdentifiers.get(i), parameterTypes.get(i)).toValueProto(serializationContext));
}
return RecordMetaDataProto.PUserDefinedFunction.newBuilder()
.setMacroFunction(builder
.setUserDefinedMacroFunction(builder
.setFunctionName(functionName)
.setBody(bodyValue.toValueProto(serializationContext)))
.build();
Expand All @@ -85,33 +87,16 @@ public RecordMetaDataProto.PUserDefinedFunction toProto(@Nonnull PlanSerializati
@Nonnull
@Override
public Typed encapsulate(@Nonnull final Map<String, ? extends Typed> namedArguments) {
throw new RecordCoreException("macro functions do not support named argument calling conventions");
throw new RecordCoreException("user defined scalar functions do not support named argument calling conventions");
}

@Nonnull
public static MacroFunction fromProto(@Nonnull final PlanSerializationContext serializationContext, @Nonnull final PMacroFunctionValue functionValue) {
return new MacroFunction(
functionValue.getFunctionName(),
functionValue.getArgumentsList().stream().map(pvalue -> ((QuantifiedObjectValue)Value.fromValueProto(serializationContext, pvalue))).collect(Collectors.toList()),
Value.fromValueProto(serializationContext, functionValue.getBody()));
}

/**
* Deserializer.
*/
@AutoService(PlanDeserializer.class)
public static class Deserializer implements PlanDeserializer<PMacroFunctionValue, MacroFunction> {
@Nonnull
@Override
public Class<PMacroFunctionValue> getProtoMessageClass() {
return PMacroFunctionValue.class;
}

@Nonnull
@Override
public MacroFunction fromProto(@Nonnull final PlanSerializationContext serializationContext,
@Nonnull final PMacroFunctionValue macroFunctionValue) {
return MacroFunction.fromProto(serializationContext, macroFunctionValue);
}
public static UserDefinedMacroFunction fromProto(@Nonnull final PUserDefinedMacroFunction function) {
PlanSerializationContext serializationContext = new PlanSerializationContext(DefaultPlanSerializationRegistry.INSTANCE,
PlanHashable.CURRENT_FOR_CONTINUATION);
return new UserDefinedMacroFunction(
function.getFunctionName(),
function.getArgumentsList().stream().map(pvalue -> ((QuantifiedObjectValue)Value.fromValueProto(serializationContext, pvalue))).collect(Collectors.toList()),
Value.fromValueProto(serializationContext, function.getBody()));
}
}
2 changes: 1 addition & 1 deletion fdb-record-layer-core/src/main/proto/record_metadata.proto
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ message MetaData {

message PUserDefinedFunction {
oneof specific_function {
com.apple.foundationdb.record.planprotos.PMacroFunctionValue macro_function = 1;
com.apple.foundationdb.record.planprotos.PUserDefinedMacroFunction user_defined_macro_function = 1;
PRawSqlFunction sql_function = 2;
}
}
Expand Down
3 changes: 1 addition & 2 deletions fdb-record-layer-core/src/main/proto/record_query_plan.proto
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,6 @@ message PValue {
PCollateValue collate_value = 44;
PNumericAggregationValue.PBitmapConstructAgg numeric_aggregation_value_bitmap_construct_agg = 45;
PQuantifiedRecordValue quantified_record_value = 46;
PMacroFunctionValue macro_function_value = 47;
PRangeValue range_value = 48;
PFirstOrDefaultStreamingValue first_or_default_streaming_value = 49;
PEvaluatesToValue evaluates_to_value = 50;
Expand All @@ -261,7 +260,7 @@ message PValue {
}
}

message PMacroFunctionValue {
message PUserDefinedMacroFunction {
optional string function_name = 1;
repeated PValue arguments = 2;
optional PValue body = 3;
Expand Down

This file was deleted.

Loading
Loading