From a07f92afa08385c4396e7aef109c120eee1a8bab Mon Sep 17 00:00:00 2001 From: liuy <37787198+LiuyCodes@users.noreply.github.com> Date: Thu, 31 Jul 2025 09:07:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(hzya-nifi):=E4=BF=AE=E5=A4=8D=20SQL=20Serve?= =?UTF-8?q?r=20=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=E8=AF=AD=E6=B3=95?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优化 SQL Server 数据库的分页查询语句生成逻辑 - 修复 where 条件语句在 SQL 语句中的正确位置 - 添加 insertWhereClause 方法来处理 where 条件的插入 - 更新单元测试以验证新的分页查询语句生成逻辑 --- .../joltdemo/spec1.json | 4 +- .../DevGeneratePaginatedSqlProcessor.java | 20 ++++++---- .../DevGeneratePaginatedSqlProcessorTest.java | 38 +++++++++++++++++++ 3 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 nifi-hzyadev-bundle/hzya-nifi-DevGeneratePaginatedSqlProcessor-processors/src/test/java/com/hzya/frame/DevGeneratePaginatedSqlProcessorTest.java diff --git a/nifi-hzyadev-bundle/hzya-nifi-AdvancedJoltTransformer-processors/joltdemo/spec1.json b/nifi-hzyadev-bundle/hzya-nifi-AdvancedJoltTransformer-processors/joltdemo/spec1.json index cbf4405..920da97 100644 --- a/nifi-hzyadev-bundle/hzya-nifi-AdvancedJoltTransformer-processors/joltdemo/spec1.json +++ b/nifi-hzyadev-bundle/hzya-nifi-AdvancedJoltTransformer-processors/joltdemo/spec1.json @@ -2,8 +2,8 @@ { "operation": "shift", "spec": { - "pk_corp": "voucher.pk_corp", - "pk_glorgbook": "voucher.pk_glorgbook", + "corp_code": "voucher.pk_corp", + "pk_glorgbook": "voucher.accbookCode", "pk_prepared": "voucher.pk_prepared", "vouchertype_shortname": "voucher.pk_vouchertype", "prepareddate": "voucher.prepareddate", diff --git a/nifi-hzyadev-bundle/hzya-nifi-DevGeneratePaginatedSqlProcessor-processors/src/main/java/com/hzya/frame/DevGeneratePaginatedSqlProcessor.java b/nifi-hzyadev-bundle/hzya-nifi-DevGeneratePaginatedSqlProcessor-processors/src/main/java/com/hzya/frame/DevGeneratePaginatedSqlProcessor.java index 33b0a91..c4d2ed7 100644 --- a/nifi-hzyadev-bundle/hzya-nifi-DevGeneratePaginatedSqlProcessor-processors/src/main/java/com/hzya/frame/DevGeneratePaginatedSqlProcessor.java +++ b/nifi-hzyadev-bundle/hzya-nifi-DevGeneratePaginatedSqlProcessor-processors/src/main/java/com/hzya/frame/DevGeneratePaginatedSqlProcessor.java @@ -128,13 +128,19 @@ public class DevGeneratePaginatedSqlProcessor extends AbstractProcessor { } else if ("microsoft sql server".equals(dbType)) { StringBuffer montageSql = new StringBuffer(); montageSql.append("WITH SortedData AS ("); - montageSql.append(baseSql); + if (!"".equals(whereClause)) { - if (baseSql.toUpperCase().contains("WHERE")) { - //替换为and - whereClause = whereClause.replace("WHERE", "AND"); - } - montageSql.append(whereClause); +// if (baseSql.toUpperCase().contains("WHERE")) { +// //替换为and +// whereClause = whereClause.replace("WHERE", "AND"); +// } + //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")) { //确保排序生效 @@ -191,7 +197,7 @@ public class DevGeneratePaginatedSqlProcessor extends AbstractProcessor { } else if ("microsoft sql server".equals(dbType)) { whereClause = whereClause.replace("WHERE", ""); - whereClause = whereClause.replace("AND", ""); +// whereClause = whereClause.replace("AND", ""); StringBuffer splicingSql = new StringBuffer(); splicingSql.append(baseSql); diff --git a/nifi-hzyadev-bundle/hzya-nifi-DevGeneratePaginatedSqlProcessor-processors/src/test/java/com/hzya/frame/DevGeneratePaginatedSqlProcessorTest.java b/nifi-hzyadev-bundle/hzya-nifi-DevGeneratePaginatedSqlProcessor-processors/src/test/java/com/hzya/frame/DevGeneratePaginatedSqlProcessorTest.java new file mode 100644 index 0000000..4c8499d --- /dev/null +++ b/nifi-hzyadev-bundle/hzya-nifi-DevGeneratePaginatedSqlProcessor-processors/src/test/java/com/hzya/frame/DevGeneratePaginatedSqlProcessorTest.java @@ -0,0 +1,38 @@ +package com.hzya.frame; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * @Author:liuyang + * @Package:com.hzya.frame + * @Project:nifi-hzyadev-bundle + * @name:DevGeneratePaginatedSqlProcessorTest + * @Date:2025/7/30 18:22 + * @Filename:DevGeneratePaginatedSqlProcessorTest + */ +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)); + } +} \ No newline at end of file