Skip to content

Reduce allocation overhead of no-op GeospatialStatistics.Builder #3507

@arouel

Description

@arouel

Describe the enhancement requested

GeospatialStatistics.noopBuilder() is called for every non-geometry column in every row group. Today, each call allocates a new NoopBuilder (plus a WKBReader, BoundingBox, and GeospatialTypes that are never used), and each build() allocates a new GeospatialStatistics(null, null) that is immediately discarded.

Since NoopBuilder carries no state and all its methods are no-ops, it can be a singleton. Its build() result is equally stateless (null fields, with merge/abort guarded by null checks), so it can be cached too.

Proposed Changes

  • Make NoopBuilder a singleton via a static INSTANCE field
  • Cache build() output as a static EMPTY instance
  • Add a package-private super constructor that skips field initialization so the singleton doesn't allocate unused objects

This eliminates per-column-per-row-group allocations on the common path where geospatial statistics are disabled.

Component(s)

Core

Metadata

Metadata

Assignees

No one assigned

    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