【问题标题】:MySQL XDEV Nodejs Driver not returning empty resultsetMySQL XDEV Nodejs 驱动程序不返回空结果集
【发布时间】:2020-06-18 00:23:53
【问题描述】:

我正在使用 xdev nodejs 驱动程序调用存储过程 mysql。存储过程返回多个结果集。尝试下一个结果集时,我只得到非空结果集。所以这会与结果数据索引混淆。

【问题讨论】:

  • 你能发布一个可重现的例子吗?存储过程本身和表内容(如果涉及任何表)。 test suite 很好地涵盖了该功能,但您可能会遇到一些奇怪的极端情况。免责声明:我是 Node.js 的 X DevAPI 连接器的首席开发人员
  • 尝试解析这样的存储过程 DELIMITER // DROP PROCEDURE IF EXISTS debug_for_mysql; // 创建过程 debug_for_mysql() begin select * from users limit 2; select * from users where 1 = 0; select * from users limit 1;结束 //
  • 如果您尝试使用下一个结果解析节点中的结果,您将无法获得正确的输出。如果您执行相同的工作台,您可以看到 3 个结果
  • 我看不出这个程序有什么特别之处。能否提供代码 sn-p 用于实际处理结果集?你可以看到一个类似的工作示例here
  • 不同的是其中一个结果会是空的。在您的多过程中,将 where 条件 1=0 放在第二个中,看看会发生什么。基本上你将第二个结果集设为 0 行。

标签: mysql node.js resultset connector mysql-8.0


【解决方案1】:

据我了解,问题是nextResult()在以下结果集中没有项目时返回false

这是一个破坏以下迭代器模式的问题

const res = await session.sql('call proc_with_multiple_and_some_empty_result_sets()').execute()

do {
  // do something
} while (res.nextResult())

并且不允许轻易消耗整个结果集。

对此有一些解决方法,例如使用toArray() 方法并遍历纯数据:

res.toArray().forEach(item => {
  // do something
})

但是,这是一个错误,也许您可​​以在Connector for Node.js 类别下提交关于https://bugs.mysql.com/ 的报告。

免责声明:我是 MySQL X DevAPI Connector for Node.js 的首席开发人员

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多