twalthr commented on code in PR #25805:
URL: https://github.com/apache/flink/pull/25805#discussion_r1890209533
##########
flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/extraction/BaseMappingExtractor.java:
##########
@@ -65,27 +74,110 @@ abstract class BaseMappingExtractor {
protected final DataTypeFactory typeFactory;
- private final String methodName;
+ protected final String methodName;
private final SignatureExtraction signatureExtraction;
protected final ResultExtraction outputExtraction;
- protected final MethodVerification verification;
+ protected final MethodVerification outputVerification;
public BaseMappingExtractor(
DataTypeFactory typeFactory,
String methodName,
SignatureExtraction signatureExtraction,
ResultExtraction outputExtraction,
- MethodVerification verification) {
+ MethodVerification outputVerification) {
this.typeFactory = typeFactory;
this.methodName = methodName;
this.signatureExtraction = signatureExtraction;
this.outputExtraction = outputExtraction;
- this.verification = verification;
+ this.outputVerification = outputVerification;
+ }
+
+ Map<FunctionSignatureTemplate, FunctionOutputTemplate>
extractOutputMapping() {
+ try {
+ return extractResultMappings(
+ outputExtraction, FunctionTemplate::getOutputTemplate,
outputVerification);
+ } catch (Throwable t) {
+ throw extractionError(t, "Error in extracting a signature to
output mapping.");
+ }
+ }
+
+ //
--------------------------------------------------------------------------------------------
+ // Extraction strategies
+ //
--------------------------------------------------------------------------------------------
+
+ /**
+ * Extraction that uses the method parameters for producing a {@link
FunctionSignatureTemplate}.
+ */
+ static SignatureExtraction createArgumentsFromParametersExtraction(
+ int offset, @Nullable Class<?> contextClass) {
+ return (extractor, method) -> {
+ final List<ArgumentParameter> args =
+ extractArgumentParameters(method, offset, contextClass);
+
+ final EnumSet<StaticArgumentTrait>[] argumentTraits =
extractArgumentTraits(args);
+
+ final List<FunctionArgumentTemplate> argumentTemplates =
+ extractArgumentTemplates(
+ extractor.typeFactory,
extractor.getFunctionClass(), args);
+
+ final String[] argumentNames = extractArgumentNames(method, args);
+
+ final boolean[] argumentOptionals = extractArgumentOptionals(args);
+
+ return FunctionSignatureTemplate.of(
+ argumentTemplates,
+ method.isVarArgs(),
+ argumentTraits,
+ argumentNames,
+ argumentOptionals);
+ };
+ }
+
+ /**
+ * Extraction that uses the method parameters for producing a {@link
FunctionSignatureTemplate}.
+ */
+ static SignatureExtraction createArgumentsFromParametersExtraction(int
offset) {
Review Comment:
```
* @param offset excludes the first n method parameters as arguments.
This is necessary for
* aggregating functions which don't require a {@link StateHint}.
Accumulators are mandatory
* and are kind of an implicit {@link StateHint}.
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]