// Port of sqlglot/typing/spark.py.

///|
/// Python `sqlglot.typing.spark.EXPRESSION_METADATA`.
fn spark_expression_metadata() -> ExprMetadata {
  let m = extend_metadata(spark2_expression_metadata())
  returns_all(m, [BitmapConstructAgg, ToBinary], BINARY)
  // 2-arg `date_add(startDate, numDays)` / `date_sub` are routed to TsOrDsAdd by
  // Hive/Spark parsers; both return DATE per the Spark and Databricks contracts.
  returns_all(m, [DateFromUnixDate, TsOrDsAdd], DATE)
  returns_all(m, [Sec], DOUBLE)
  returns_all(m, [Collation, CurrentTimezone, Randstr, ToChar], VARCHAR)
  annotate_all(
    m,
    [
      ArrayCompact,
      ArrayInsert,
      BitwiseAndAgg,
      BitwiseOrAgg,
      BitwiseXorAgg,
      Left,
      Overlay,
    ],
    (s, e) => s.annotate_by_args(e, [Key("this")]),
  )
  m[BitmapCount] = Returns(D(BIGINT))
  m[Grouping] = Returns(D(TINYINT))
  m[Localtimestamp] = Returns(D(TIMESTAMPNTZ))
  m
}