query

package
v0.0.0-...-dc878bb Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 10, 2026 License: Apache-2.0 Imports: 5 Imported by: 0

Documentation

Overview

Package query 实现查询处理和执行。

query 包包含查询执行器和迭代器,用于处理范围查询和流式查询。

组件:

Executor:   查询执行器,负责 SQL 解析和计划生成
QueryIterator: 流式迭代器,用于大数据集查询

查询流程:

请求 → Parser → Planner → Executor → 数据源 → 结果

Package query 实现查询处理和执行。

QueryIterator 提供流式查询功能,支持大数据集的高效遍历。

设计模式:

遵循 Go 迭代器模式,支持 for it.Next(ctx) { row := it.Points() } 用法。
内部使用最小堆(min-heap)实现多 Shard 归并排序。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Executor

type Executor struct {
}

Executor 是查询执行器。

Executor 负责解析和执行查询请求。 当前是框架实现,未来将支持完整的 SQL 查询解析。

字段说明:

目前无具体字段,未来会添加解析器和优化器。

func NewExecutor

func NewExecutor(engine any) *Executor

NewExecutor 创建新的查询执行器。

参数:

  • engine: 存储引擎实例(当前未使用,为接口预留)

返回:

  • *Executor: 查询执行器实例

说明:

当前实现为基础框架,engine 参数用于未来依赖注入。
完整的实现需要与 engine 集成以实际查询数据。

func (*Executor) Execute

Execute 执行查询请求。

参数:

  • ctx: 上下文,用于取消查询
  • req: 查询请求

返回:

  • *types.QueryRangeResponse: 查询结果(当前为空结果)
  • error: 执行成功时返回 nil

当前实现:

基础实现仅返回空结果,不报错。
后续需要与存储引擎集成以实际查询数据。

type QueryIterator

type QueryIterator struct {
	// contains filtered or unexported fields
}

QueryIterator 是流式查询迭代器,支持多 Shard 归并排序和过滤。

QueryIterator 提供按需加载数据的迭代接口,适合处理超出内存容量的大查询。 内部使用最小堆(min-heap)实现多 Shard 数据的归并排序。

字段说明:

  • req: 查询请求
  • heap: 用于归并排序的最小堆
  • currentRow: 当前迭代位置的数据
  • consumed: 已返回给调用者的行数
  • skipped: 因 Offset 跳过的行数
  • closed: 是否已关闭

使用模式:

it, err := query.NewQueryIterator(ctx, shards, req)
if err != nil {
    return err
}
defer it.Close()

for it.Next(ctx) {
    row := it.Points()
    // 处理 row
}

线程安全:

不是线程安全的,不要从多个 goroutine 并发访问。

func NewQueryIterator

func NewQueryIterator(ctx context.Context, shards []*shard.Shard, req *types.QueryRangeRequest) *QueryIterator

NewQueryIterator 创建流式查询迭代器。

为每个可用的 Shard 创建 ShardIterator,并加入归并排序堆。

参数:

  • ctx: 上下文
  • shards: 要查询的 Shard 列表
  • req: 查询请求

返回:

  • *QueryIterator: 创建的迭代器

初始化过程:

  1. 为每个 Shard 创建 ShardIterator
  2. 如果 Iterator 有当前数据,加入堆
  3. 获取第一个有效行

func (*QueryIterator) Close

func (q *QueryIterator) Close() error

Close 关闭迭代器。

返回:

  • error: 关闭失败时返回错误(当前总是返回 nil)

说明:

标记迭代器为已关闭,后续 Next() 调用将返回 false。
建议配合 defer 使用以确保资源释放。

func (*QueryIterator) Next

func (q *QueryIterator) Next(ctx context.Context) bool

Next 移动到下一个匹配的数据点。

参数:

  • ctx: 上下文,用于检查取消和超时

返回:

  • bool: 如果返回 true,表示有有效数据,可通过 Points() 获取。 如果返回 false,表示迭代结束或出错。

功能说明:

  • 处理 Offset:跳过前 req.Offset 行
  • 处理 Limit:当 consumed >= req.Limit 时停止
  • 自动检查 context 取消
  • 维护 consumed 和 skipped 计数

func (*QueryIterator) Points

func (q *QueryIterator) Points() *types.PointRow

Points 返回当前迭代位置的数据。

返回:

  • *types.PointRow: 当前数据行

调用时机:

在 Next() 返回 true 后才能调用,否则返回 nil。

注意:

调用 Points() 后会清空 currentRow,下次调用 Next() 会获取下一行。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL