Class HashFn

java.lang.Object
dev.frostlake.functions.BuiltInFunction
dev.frostlake.functions.scalar.hash.HashFn

public class HashFn extends BuiltInFunction
HASH(expr[, …]) — a deterministic signed 64-bit hash (FNV-1a) over the canonical, type-tagged encoding of its arguments. Stable within Frostlake for the same run and across runs, so it is fine for bucketing, sampling, GROUP BY on a hash, or change detection.

The VALUES are not Snowflake's, but the EQUALITY RELATION is. Snowflake's HASH is a proprietary 64-bit algorithm that cannot be matched bit-for-bit from outside, so never compare a Frostlake HASH result against one computed by Snowflake. Which arguments hash ALIKE is reproducible, however, and it is: numbers hash by value with scale and declared type ignored, so 1 and 1.00 collide while the number 1 and the string '1' do not. HashCanonicalValue holds the full set of classes — several of them counter-intuitive, including booleans and temporals landing in the number class.

Arguments are mixed in order and each contributes its tag even when NULL, so arity and order both matter: HASH(1) , HASH(1, NULL) and HASH(NULL) are three different hashes. HASH_AGG shares this encoding.

  • Constructor Details

    • HashFn

      public HashFn()
  • Method Details

    • evaluate

      public Object evaluate(List<Object> args)
      Description copied from class: BuiltInFunction
      Computes the function's result over its already-evaluated argument values. A SQL NULL argument arrives as Java null, and returning null makes the SQL result NULL.
      Specified by:
      evaluate in class BuiltInFunction
      Parameters:
      args - the argument values, in call order
      Returns:
      the function's value for these arguments, or null for SQL NULL
    • getMinArgCount

      public int getMinArgCount()
      Description copied from class: BuiltInFunction
      The fewest arguments a call to this function may pass; fewer is an argument-count error.
      Specified by:
      getMinArgCount in class BuiltInFunction
      Returns:
      the minimum accepted argument count
    • getMaxArgCount

      public int getMaxArgCount()
      Description copied from class: BuiltInFunction
      The most arguments a call to this function may pass; Integer.MAX_VALUE marks a variadic function (see BuiltInFunction.isVariadic()).
      Specified by:
      getMaxArgCount in class BuiltInFunction
      Returns:
      the maximum accepted argument count