Skip to content

RFC 015: Core scalar functions and operators #32

@dannymeijer

Description

@dannymeijer

Use this issue to track InQL RFC 015, which already exists at docs/rfcs/015_core_scalar_functions.md.

Area

  • Specification (RFCs)
  • Package & tests
  • Documentation

Summary

RFC 015 defines the first required scalar function and operator slice for InQL: column references, literals, casts, comparisons, boolean logic, null checks, basic arithmetic, conditionals, membership predicates, range predicates, and ordering expressions.

Motivation

Typed dataframe and query-block authoring need a stable scalar vocabulary before broader math, string, date/time, nested, and format catalogs can be added coherently.

Proposal sketch

The RFC establishes the minimum scalar surface for credible typed authoring and keeps it aligned with RFC 012 and the RFC 014 registry model. It covers canonical function/operator meaning, typechecking expectations, lowering constraints, and diagnostics for the foundational scalar forms.

Implementation decisions now recorded in the RFC:

  • Boolean helper names are and_, or_, and not_.
  • try_cast has null-on-conversion-failure semantics for this RFC.
  • Numeric promotion remains registry/type-metadata level for this package slice; no package-local promotion table is introduced here.
  • in_ accepts literal or expression lists; relation-valued subqueries remain out of scope.
  • Function/operator calls use one registry-backed scalar function application node, while ColumnRefExpr and literal nodes remain structural.

Alternatives considered

The RFC rejects waiting for the broad function catalog, keeping separate helper families for filter/projection expressions, and using backend SQL expression strings for all scalar expressions.

Impact / compatibility

This RFC affects scalar function documentation, package helpers, compiler query/operator lowering, Prism/Substrait expression lowering, and diagnostics around casts, comparisons, null-safe equality, boolean logic, and ordering null placement.

Implementation notes

RFC 014 is merged and treated as the registry/decorator baseline. Scalar entries should land as declaration-side registered catalog functions, not ad hoc helpers or a hardcoded central registry list.

Checklist

  • I checked for an existing RFC or issue covering this.
  • I can describe how this impacts existing code and how to migrate (if needed).

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationfeatureNew feature or requestpackageLibrary source, tests, incan.tomlspecificationdocs/rfcs/ normative RFCs

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions