Class ObjectAgg
java.lang.Object
dev.frostlake.functions.BuiltInFunction
dev.frostlake.functions.AggregateFunction
dev.frostlake.functions.aggregate.ObjectAgg
OBJECT_AGG(key, value) — aggregates key/value pairs into a single OBJECT. Pairs with a NULL key or
NULL value are omitted; the result is canonical JSON text (keys sorted), the engine's OBJECT form.
-
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.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.fileRejection(int position) A FILE is refused in BOTH halves, which is where it parts company with the plain OBJECT the VALUE position accepts: live,OBJECT_AGG(f, 1)is "Invalid argument types for function 'OBJECT_AGG': (FILE, NUMBER(1,0))" andOBJECT_AGG(s, f)is the same sentence naming "(VARCHAR(16777216), FILE)", whileOBJECT_AGG(s, o)builds its object happily.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) The KEY is never semi-structured, plain or not: live,OBJECT_AGG(o, n)is "Invalid argument types for function 'OBJECT_AGG': (OBJECT, NUMBER(38,0))" andOBJECT_AGG(so, n)/OBJECT_AGG(sa, n)are the same sentence with the structured type named.structuredRejection(int position) The VALUE takes a plain OBJECT or ARRAY and refuses a STRUCTURED one: live,OBJECT_AGG(s, o)builds{"aa":{"k":"v1"},…}whileOBJECT_AGG(s, so)is "Invalid argument types for function 'OBJECT_AGG': (VARCHAR(16777216), OBJECT(x VARCHAR(16777216)))" — the message lists BOTH arguments, so the offending position is visible.temporalRejection(int position) The refusal this position gives a declared DATE / TIME / TIMESTAMP argument.textRejection(int position) The VALUE takes a NUMBER, a BOOLEAN, a FLOAT or a VARIANT (cast to VARIANT in the plan) and refuses a VARCHAR, a temporal or a BINARY with the argument-type list — OBJECT_AGG(t, t) is "Invalid argument types for function 'OBJECT_AGG': (VARCHAR(10), VARCHAR(10))", OBJECT_AGG(t, d) "(VARCHAR(10), DATE)" — while the KEY takes any of them, cast to text (live-verified).Methods inherited from class dev.frostlake.functions.BuiltInFunction
approximateRejection, booleanRejection, evaluate, geoRejection, getName, getReturnType, isVariadic, refusesMissingArgumentsByType, temporalRejection, temporalRejection, uuidRejection, vectorRejection
-
Constructor Details
-
ObjectAgg
public ObjectAgg()
-
-
Method Details
-
semiStructuredRejection
The KEY is never semi-structured, plain or not: live,OBJECT_AGG(o, n)is "Invalid argument types for function 'OBJECT_AGG': (OBJECT, NUMBER(38,0))" andOBJECT_AGG(so, n)/OBJECT_AGG(sa, n)are the same sentence with the structured type named. Position 1, the VALUE, is where the two kinds diverge — seestructuredRejection(int).- 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
-
structuredRejection
The VALUE takes a plain OBJECT or ARRAY and refuses a STRUCTURED one: live,OBJECT_AGG(s, o)builds{"aa":{"k":"v1"},…}whileOBJECT_AGG(s, so)is "Invalid argument types for function 'OBJECT_AGG': (VARCHAR(16777216), OBJECT(x VARCHAR(16777216)))" — the message lists BOTH arguments, so the offending position is visible.- Overrides:
structuredRejectionin classBuiltInFunction- Parameters:
position- the zero-based argument position being asked about- Returns:
- the extra refusal this position gives a structured value, or
NONEwhen undeclared
-
fileRejection
A FILE is refused in BOTH halves, which is where it parts company with the plain OBJECT the VALUE position accepts: live,OBJECT_AGG(f, 1)is "Invalid argument types for function 'OBJECT_AGG': (FILE, NUMBER(1,0))" andOBJECT_AGG(s, f)is the same sentence naming "(VARCHAR(16777216), FILE)", whileOBJECT_AGG(s, o)builds its object happily. Without this the inherited default would readsemiStructuredRejection(int)and let the value half through.- Overrides:
fileRejectionin classBuiltInFunction- Parameters:
position- the zero-based argument position being asked about- Returns:
- the refusal this position gives a FILE value; by default, the semi-structured answer
-
textRejection
The VALUE takes a NUMBER, a BOOLEAN, a FLOAT or a VARIANT (cast to VARIANT in the plan) and refuses a VARCHAR, a temporal or a BINARY with the argument-type list — OBJECT_AGG(t, t) is "Invalid argument types for function 'OBJECT_AGG': (VARCHAR(10), VARCHAR(10))", OBJECT_AGG(t, d) "(VARCHAR(10), DATE)" — while the KEY takes any of them, cast to text (live-verified).- Overrides:
textRejectionin classBuiltInFunction
-
temporalRejection
Description copied from class:BuiltInFunctionThe refusal this position gives a declared DATE / TIME / TIMESTAMP argument. Declared per function: the numeric family refuses every temporal flavour at compile time, each named with its own parameters — (DATE), (TIME(9)), (TIMESTAMP_NTZ(9)) and the LTZ/TZ twins — where the datetime functions read them happily.- 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
-
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
-
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
-