Java 在不影响数据库的情况下比较两个大型SQL查询

Java 在不影响数据库的情况下比较两个大型SQL查询,java,sql,spring-boot,integration-testing,Java,Sql,Spring Boot,Integration Testing,我在MICRO服务中有一个组件,负责构建一个查询,该查询可用于从另一个组件检索记录 我需要一个集成测试来检查从组件检索到的查询是否和存储在文件中的响应相同 基于字符串的比较中的问题如下 子查询的不同排序 join语句的不同顺序 我最初尝试在没有这种重新排序行为的情况下进行基于字符串的比较,但这种方法行不通 查询将看起来像这样 我需要想出一个测试来确保查询是相同的。测试查询是相同的听起来很奇怪。为什么不测试一下查询的结果是否正确?即使您测试了查询是否正确生成,进行字符串比较也是最糟糕的解决方案。整

我在MICRO服务中有一个组件,负责构建一个查询,该查询可用于从另一个组件检索记录

我需要一个集成测试来检查从组件检索到的查询是否和存储在文件中的响应相同

基于字符串的比较中的问题如下

子查询的不同排序 join语句的不同顺序 我最初尝试在没有这种重新排序行为的情况下进行基于字符串的比较,但这种方法行不通

查询将看起来像这样


我需要想出一个测试来确保查询是相同的。

测试查询是相同的听起来很奇怪。为什么不测试一下查询的结果是否正确?即使您测试了查询是否正确生成,进行字符串比较也是最糟糕的解决方案。整个模块只负责提供一个查询,调用组件将使用该查询。我们这样做是为了扩展查询生成部分。这听起来可能很奇怪,但不幸的是,这是必需的。如果生成的查询和文件总是包含完全相同的字符,而忽略非函数空格,那么您是否可以对字符串执行一些操作,然后对它们进行散列并比较散列?我不确定这是否是正确的方法。有时别名是不同的,如calcTab0、calcTab1等。
WITH dataTab0 AS 
    (SELECT TO_CHAR(to_date(tab_0_0.times),'YYYYMMDD')  AS 
        TIME_ID_CATEGORY,tab_0_0.request_id AS PAGE_IMPRESSION  
    FROM full_contents_2 AS tab_0_0  
        WHERE  ( ( tab_0_0.times >= date'2018-11-16') 
    and ( tab_0_0.times < date'2018-12-14') 
    and ( mod(coalesce(tab_0_0.ieid,5),5)  = 0))     ) ,
dataTab1 AS 
    (SELECT calcTab0.TIME_ID_CATEGORY,calcTab0.SUM_OF_GROUP,calcTab0.PAGE_IMPRESSION  
    FROM (SELECT coalesce(inner0.TIME_ID_CATEGORY,'<<<sum\>>>') AS 
             TIME_ID_CATEGORY,inner0.SUM_OF_GROUP,inner0.PAGE_IMPRESSION  
    FROM (SELECT coalesce(t0.TIME_ID_CATEGORY,'<<null>>') AS TIME_ID_CATEGORY,log2(grouping(coalesce(t0.TIME_ID_CATEGORY,'<<null>>'))+ 1) AS SUM_OF_GROUP,COUNT( t0.PAGE_IMPRESSION) AS PAGE_IMPRESSION  
    FROM dataTab0 AS t0  
        WHERE  t0.TIME_ID_CATEGORY is not null   
    GROUP BY rollup( 1)   ) AS inner0 
    WHERE  SUM_OF_GROUP = 0     ) AS calcTab0     ) SELECT TIME_ID_CATEGORY,cast(SUM_OF_GROUP AS decimal)  AS SUM_OF_GROUP,PAGE_IMPRESSION  FROM dataTab1     ORDER BY 1 DESC nulls last  ;