【问题标题】:db2 query bad grammar, how to run unit test with h2db2查询语法错误,如何用h2运行单元测试
【发布时间】:2021-10-21 21:01:57
【问题描述】:

这里考虑到以下 db2 查询的两部分问题:

select col1!!col2 from table1
  1. 我从未见过双感叹号 (!!) 运算符。从它返回的结果来看,它似乎正在对 col1 和 col2 进行简单的串联。我在 db2 文档中在线查看过,但无法找到定义。有人可以验证吗?
  2. 我不允许更改查询以使用不同的语法,我希望能够使用内存数据库中的 h2 对该查询和其他具有一些 db2 怪癖的查询运行单元测试。如何使用 junit4 实现这一目标?

【问题讨论】:

  • 再看原始代码,双||(管道符号)是连接运算符,对于Db2不是感叹号。
  • @mao 不,这是双感叹号,不是双管。我已经针对实际的 db2 数据库测试了查询,它可以工作。
  • 什么是 Db2-server 平台(z/os、i-series、linux/unix/windows/cloud)?以及您使用什么工具来提交 SQL?
  • 在 IBM i 上可能会发生 !! 运算符替换 || 的一些 CCSID(例如 290 日本片假名),也可能是 z/os(不知道在您的情况下该怎么做)
  • @geco17 我认为 H2 的规模很大。但是,您实际上只能在一定程度上模拟 DB2、Oracle 或 PostgreSQL。在我的开发沙箱中,我目前有几个带有 DB2 的虚拟机,并且我在本地运行 DB2 docker 映像。这是以与在 PROD 中运行相同的方式实际运行查询的唯一方法;它们的运行速度比 PROD 慢,但我得到了完整的语法验证。

标签: junit db2 h2 spring-boot-test


【解决方案1】:

我最终解决这个问题的方式可能有点丑陋,但这是我在有限范围内能做的最好的:

  • 无法将 docker 容器用于实际 db2 数据库的测试实例
  • 不能直接修改源文件中定义的查询

在我的单元测试中,我做了以下事情:

  1. 在返回原始查询的服务方法上设置 spy bean
  2. 在 spy bean 上创建了when 条件,这样就不会返回我知道不起作用的查询(根据示例,!!^< 等),when 条件将返回具有 h2 兼容语法(||>= 等)的等效查询
  3. 使用修改后的查询查询 h2 数据库

希望这可以帮助某人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-23
    • 2014-11-09
    • 2018-08-18
    • 2012-05-02
    • 2023-01-12
    • 2018-07-18
    • 2015-03-24
    • 2011-05-15
    相关资源
    最近更新 更多