fix(hzya-nifi):修复 SQL Server 分页查询语法问题

- 优化 SQL Server 数据库的分页查询语句生成逻辑
- 修复 where 条件语句在 SQL 语句中的正确位置
- 添加 insertWhereClause 方法来处理 where 条件的插入
- 更新单元测试以验证新的分页查询语句生成逻辑
This commit is contained in:
liuy 2025-07-31 09:07:43 +08:00
parent 2015d502c1
commit a07f92afa0
3 changed files with 53 additions and 9 deletions

View File

@ -2,8 +2,8 @@
{ {
"operation": "shift", "operation": "shift",
"spec": { "spec": {
"pk_corp": "voucher.pk_corp", "corp_code": "voucher.pk_corp",
"pk_glorgbook": "voucher.pk_glorgbook", "pk_glorgbook": "voucher.accbookCode",
"pk_prepared": "voucher.pk_prepared", "pk_prepared": "voucher.pk_prepared",
"vouchertype_shortname": "voucher.pk_vouchertype", "vouchertype_shortname": "voucher.pk_vouchertype",
"prepareddate": "voucher.prepareddate", "prepareddate": "voucher.prepareddate",

View File

@ -128,13 +128,19 @@ public class DevGeneratePaginatedSqlProcessor extends AbstractProcessor {
} else if ("microsoft sql server".equals(dbType)) { } else if ("microsoft sql server".equals(dbType)) {
StringBuffer montageSql = new StringBuffer(); StringBuffer montageSql = new StringBuffer();
montageSql.append("WITH SortedData AS ("); montageSql.append("WITH SortedData AS (");
montageSql.append(baseSql);
if (!"".equals(whereClause)) { if (!"".equals(whereClause)) {
if (baseSql.toUpperCase().contains("WHERE")) { // if (baseSql.toUpperCase().contains("WHERE")) {
//替换为and // //替换为and
whereClause = whereClause.replace("WHERE", "AND"); // whereClause = whereClause.replace("WHERE", "AND");
} // }
montageSql.append(whereClause); //where条件不能直接加载原始sql语句后面否则order by xx asc where xxx导致语法问题而是要加载表名后面
// montageSql.append(whereClause);
whereClause = whereClause.replace("WHERE", "");
// whereClause = whereClause.replace("AND", "");
montageSql.append(insertWhereClause(baseSql, whereClause));
} else {
montageSql.append(baseSql);
} }
if (baseSql.toUpperCase().contains("ORDER BY")) { if (baseSql.toUpperCase().contains("ORDER BY")) {
//确保排序生效 //确保排序生效
@ -191,7 +197,7 @@ public class DevGeneratePaginatedSqlProcessor extends AbstractProcessor {
} else if ("microsoft sql server".equals(dbType)) { } else if ("microsoft sql server".equals(dbType)) {
whereClause = whereClause.replace("WHERE", ""); whereClause = whereClause.replace("WHERE", "");
whereClause = whereClause.replace("AND", ""); // whereClause = whereClause.replace("AND", "");
StringBuffer splicingSql = new StringBuffer(); StringBuffer splicingSql = new StringBuffer();
splicingSql.append(baseSql); splicingSql.append(baseSql);

View File

@ -0,0 +1,38 @@
package com.hzya.frame;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @Authorliuyang
* @Packagecom.hzya.frame
* @Projectnifi-hzyadev-bundle
* @nameDevGeneratePaginatedSqlProcessorTest
* @Date2025/7/30 18:22
* @FilenameDevGeneratePaginatedSqlProcessorTest
*/
public class DevGeneratePaginatedSqlProcessorTest {
@Test
public void test01() throws Exception{
String aaa = "\n" +
"\tSELECT\n" +
"\t\tpk_bdinfo AS pk_accassitem,\n" +
"\t\tbdcode AS code,\n" +
"\t\tbdname AS name,\n" +
"\t\tpk_defdef AS pkDefdef,\n" +
"\t\ttablename AS tablename,\n" +
"\t\ttablepkname AS tablepkname,\n" +
"\t\tdr AS dr,\n" +
"\t\tts AS ts \n" +
"\tFROM\n" +
"\t\tbd_bdinfo \n" +
"\tORDER BY\n" +
"\t\tpk_bdinfo,\n" +
"\tts ASC";
String bbb = "1=1 and 2=2";
System.out.println(DevGeneratePaginatedSqlProcessor.insertWhereClause(aaa, bbb));
}
}