背景
当前 Rows / Row 相关 API 存在一个使用体验问题:
RowsContext / RowContext 在创建游标对象时,如果底层驱动立即返回错误,会通过 getExecutingSqlError 进行包装。
- 但如果错误是在后续的
Next、Scan、MapScan、SliceScan、Err、Close 等阶段延迟发生,则返回的通常是底层原始错误。
这会导致调用方在实际排查问题时,看不到:
- 原始输入 SQL。
- 解析后的执行 SQL。
- 最终执行参数。
从而降低错误定位效率。
问题根因
当前错误包装主要发生在 sqlmer.AbstractDbClient 层,例如:
但 Rows / Row 的很多错误,并不是在获取游标对象时立即发生,而是在后续迭代或扫描阶段才由 sqlen.EnhanceRows / sqlen.EnhanceRow 暴露出来。
也就是说,这类错误已经脱离了最初的 SQL 上下文封装点,因此无法再直接使用 getExecutingSqlError 自动补齐上下文信息。
背景
当前
Rows/Row相关 API 存在一个使用体验问题:RowsContext/RowContext在创建游标对象时,如果底层驱动立即返回错误,会通过getExecutingSqlError进行包装。Next、Scan、MapScan、SliceScan、Err、Close等阶段延迟发生,则返回的通常是底层原始错误。这会导致调用方在实际排查问题时,看不到:
从而降低错误定位效率。
问题根因
当前错误包装主要发生在
sqlmer.AbstractDbClient层,例如:RowsContextRowContext但
Rows/Row的很多错误,并不是在获取游标对象时立即发生,而是在后续迭代或扫描阶段才由sqlen.EnhanceRows/sqlen.EnhanceRow暴露出来。也就是说,这类错误已经脱离了最初的 SQL 上下文封装点,因此无法再直接使用
getExecutingSqlError自动补齐上下文信息。