Skip to content

Rows / Row 方法出错时没经过 AbstractDbClient 层的包装逻辑,无法获取到语句的参数信息 #18

@bunnier

Description

@bunnier

背景

当前 Rows / Row 相关 API 存在一个使用体验问题:

  • RowsContext / RowContext 在创建游标对象时,如果底层驱动立即返回错误,会通过 getExecutingSqlError 进行包装。
  • 但如果错误是在后续的 NextScanMapScanSliceScanErrClose 等阶段延迟发生,则返回的通常是底层原始错误。

这会导致调用方在实际排查问题时,看不到:

  • 原始输入 SQL。
  • 解析后的执行 SQL。
  • 最终执行参数。

从而降低错误定位效率。

问题根因

当前错误包装主要发生在 sqlmer.AbstractDbClient 层,例如:

  • RowsContext
  • RowContext

Rows / Row 的很多错误,并不是在获取游标对象时立即发生,而是在后续迭代或扫描阶段才由 sqlen.EnhanceRows / sqlen.EnhanceRow 暴露出来。

也就是说,这类错误已经脱离了最初的 SQL 上下文封装点,因此无法再直接使用 getExecutingSqlError 自动补齐上下文信息。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions