Class Sum
-
Nested Class Summary
Nested classes/interfaces inherited from class dev.frostlake.functions.AggregateFunction
AggregateFunction.Accumulator -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbinaryRejection(int position) The refusal a position gives a statically BINARY-typed value.booleanRejection(int position) The refusal this position gives a declared BOOLEAN argument.Creates the fresh, empty per-group state for one evaluation of this aggregate; the executor makes one per group (or per window partition) and never shares them.Computes the function's result over its already-evaluated argument values.intThe most arguments a call to this function may pass;Integer.MAX_VALUEmarks a variadic function (seeBuiltInFunction.isVariadic()).intThe fewest arguments a call to this function may pass; fewer is an argument-count error.semiStructuredRejection(int position) How argumentpositionrefuses a statically OBJECT- or ARRAY-typed value, orSemiStructuredRejection.NONEwhen it does not.temporalRejection(int position) SUM adds numbers, and a semi-structured value is not one.Methods inherited from class dev.frostlake.functions.BuiltInFunction
approximateRejection, evaluate, fileRejection, geoRejection, getName, getReturnType, isVariadic, refusesMissingArgumentsByType, structuredRejection, temporalRejection, temporalRejection, textRejection, uuidRejection, vectorRejection
-
Constructor Details
-
Sum
public Sum()
-
-
Method Details
-
createAccumulator
Description copied from class:AggregateFunctionCreates the fresh, empty per-group state for one evaluation of this aggregate; the executor makes one per group (or per window partition) and never shares them.- Specified by:
createAccumulatorin classAggregateFunction- Returns:
- a new accumulator starting from this aggregate's empty-group state
-
evaluate
Description copied from class:BuiltInFunctionComputes the function's result over its already-evaluated argument values. A SQL NULL argument arrives as Javanull, and returningnullmakes the SQL result NULL.- Specified by:
evaluatein classBuiltInFunction- Parameters:
args- the argument values, in call order- Returns:
- the function's value for these arguments, or
nullfor SQL NULL
-
getMinArgCount
public int getMinArgCount()Description copied from class:BuiltInFunctionThe fewest arguments a call to this function may pass; fewer is an argument-count error.- Specified by:
getMinArgCountin classBuiltInFunction- Returns:
- the minimum accepted argument count
-
getMaxArgCount
public int getMaxArgCount()Description copied from class:BuiltInFunctionThe most arguments a call to this function may pass;Integer.MAX_VALUEmarks a variadic function (seeBuiltInFunction.isVariadic()).- Specified by:
getMaxArgCountin classBuiltInFunction- Returns:
- the maximum accepted argument count
-
temporalRejection
SUM adds numbers, and a semi-structured value is not one. Live,SUM(o)over an OBJECT column is "Invalid argument types for function 'SUM': (OBJECT)" (SQLSTATE 42P13),SUM(a)names ARRAY, and the DISTINCT and windowed forms reject identically — while Frostlake used to answer0.0, a plausible number a caller could go on to average. A structured column names its whole type: "(OBJECT(x VARCHAR(16777216)))".Declared here rather than by extending
NumericArgumentFunctiononly because an aggregate already extendsAggregateFunction; the rule is the same one.- Overrides:
temporalRejectionin classBuiltInFunction- Parameters:
position- the zero-based argument position being asked about- Returns:
- the refusal this position gives a temporal value; by default none
-
booleanRejection
Description copied from class:BuiltInFunctionThe refusal this position gives a declared BOOLEAN argument. Membership is declared per function and never assumed for a family: the whole NUMERIC family (NumericArgumentFunction) refuses a SQL BOOLEAN at compile time in every position — "Invalid argument types for function 'ABS': (BOOLEAN)",MOD(1, TRUE)listing "(NUMBER(1,0), BOOLEAN)" — while the SAME value inside a VARIANT converts to 1.0, and the conditionals (NULLIF(b, 0),NULLIFZERO(b)) take it. The rule reads the DECLARED type, like every channel here.- Overrides:
booleanRejectionin classBuiltInFunction- Parameters:
position- the zero-based argument position being asked about- Returns:
- the refusal this position gives a BOOLEAN value; by default none
-
binaryRejection
Description copied from class:BuiltInFunctionThe refusal a position gives a statically BINARY-typed value.A fifth question rather than a reuse of any of the four above, because BINARY sits on the opposite side of them: it is a scalar a text function is happy to be handed almost everywhere — live answers
LENGTH(bn),SUBSTR(bn, 1, 1),CONCAT(bn, bn)— where an OBJECT is refused. Only the functions that read their argument AS TEXT and would have to decode it refuse one, and they say so themselves:VALIDATE_UTF8(bn)andTRY_VALIDATE_UTF8(bn)are "Invalid argument types for function 'TRY_VALIDATE_UTF8': (BINARY(5))" while the same call over a VARCHAR, and even over a NUMBER, returns a value.The default is
NONE: undeclared means unconstrained, as for the other four.- Overrides:
binaryRejectionin classBuiltInFunction- Parameters:
position- the zero-based argument position being asked about- Returns:
- the refusal this position gives a BINARY value; by default none
-
semiStructuredRejection
Description copied from class:BuiltInFunctionHow argumentpositionrefuses a statically OBJECT- or ARRAY-typed value, orSemiStructuredRejection.NONEwhen it does not. Snowflake never implicitly coerces a semi-structured value to the VARCHAR (or NUMBER) a text or numeric function reads, so such an argument is an argument-type error at COMPILE time rather than a stringification or a fabricated zero: live,UPPER(o)over an OBJECT column is "Invalid argument types for function 'UPPER': (OBJECT)",SUM(o)is the same sentence for 'SUM', andSPLIT_PART(s, o, 1)names the position it was given. VARIANT is never refused, even when it holds an object.Declared HERE, on the function, rather than in a name-keyed table beside the rule: the registry is already the authority on a function's types (
BuiltInFunction.getReturnType()), a declaration on the instance covers the function's ALIASES for free (SUBSTR and SUBSTRING are one object, and so are VARIANCE_POP and VAR_POP), and a per-position answer is the only shape that fits —ARRAY_TO_STRING(a, ',')takes an ARRAY in position 0 and refuses one in position 1.The answer is an ENUM rather than a boolean because Snowflake phrases the refusal three different ways, with three different SQLSTATEs — see
SemiStructuredRejection.The default is
NONE, meaning UNDECLARED rather than "accepts": a function that has not been measured against live Snowflake constrains nothing. Answering for every position is whatTextArgumentFunctionandNumericArgumentFunctionexist for.- Overrides:
semiStructuredRejectionin classBuiltInFunction- Parameters:
position- the zero-based argument position being asked about- Returns:
- the refusal this position gives a semi-structured value, or
NONEwhen undeclared
-