blob: 2e6690f79b40158b2036453fcacf959439d484e6 [file]
// Licensed to Apache Software Foundation (ASF) under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Apache Software Foundation (ASF) licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package vectorized
import (
"context"
"errors"
)
// ErrLimitExhausted is returned by FusibleOperators that finished their work and
// want the fused stage to translate the signal into "emit current batch + EOF on next call".
var ErrLimitExhausted = errors.New("vectorized: limit exhausted")
// BatchOperator is the lifecycle base. All operators implement it.
//
// Close is idempotent and safe to call at any phase — after Init, mid-Consume,
// after Finalize, or after any error. It must release every MemoryTracker.Reserve
// the operator made during its lifetime.
type BatchOperator interface {
Init(ctx context.Context) error
OutputSchema() *BatchSchema
Close() error
}
// PullOperator produces batches. It is the source of a pipeline.
//
// NextBatch contract:
// - (non-nil, nil) → valid batch with Len > 0
// - (nil, nil) → EOF; caller must not call NextBatch again
// - (nil, non-nil) → error; pipeline stops
//
// NextBatch may block — channel-backed implementations are explicitly supported
// for future distributed remote-scan operators.
type PullOperator interface {
BatchOperator
NextBatch(ctx context.Context) (*RecordBatch, error)
}
// FusibleOperator transforms a batch in place. No state across batches.
//
// Process must not retain references to the batch beyond the call. Returning
// ErrLimitExhausted signals "emit this batch then EOF on the next pull".
type FusibleOperator interface {
BatchOperator
Process(ctx context.Context, b *RecordBatch) error
}
// BreakerOperator buffers all input via Consume, then produces output via NextBatch
// after Finalize is called.
type BreakerOperator interface {
BatchOperator
Consume(ctx context.Context, b *RecordBatch) error
Finalize(ctx context.Context) error
NextBatch(ctx context.Context) (*RecordBatch, error)
}