From 5b0d524cb30d90a2a7fa98d80c80e627d4cd0801 Mon Sep 17 00:00:00 2001 From: Sambo Chea Date: Thu, 30 Mar 2023 17:27:43 +0700 Subject: [PATCH] Fixed the sql params that missing check with key set --- src/main/java/com/cubetiqs/sql/SqlMapParameter.java | 11 +++++------ src/test/java/com/cubetiqs/sql/ConnectionTests.java | 6 +++++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/cubetiqs/sql/SqlMapParameter.java b/src/main/java/com/cubetiqs/sql/SqlMapParameter.java index 131171c..47a5cc4 100644 --- a/src/main/java/com/cubetiqs/sql/SqlMapParameter.java +++ b/src/main/java/com/cubetiqs/sql/SqlMapParameter.java @@ -1,8 +1,6 @@ package com.cubetiqs.sql; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class SqlMapParameter implements ISqlMapParameter { private final String sql; @@ -11,7 +9,7 @@ public class SqlMapParameter implements ISqlMapParameter { // Replace all ":variableName" with "?" private String formatSql; - // Allow to ignore validate the missing key, when the params doesn't exist in sql statement + // Allow ignoring validate the missing key, when the params doesn't exist in sql statement private final boolean ignoreMissingKey; public SqlMapParameter(final String sql) { @@ -60,8 +58,9 @@ public class SqlMapParameter implements ISqlMapParameter { } List keys = ResultSetUtil.findValues(sql, ":", null, false); - if (keys.size() > 0 && keys.size() > params.size()) { - System.out.println("Found Keys = " + keys); + Set keySet = new HashSet<>(keys); + if (keySet.size() > 0 && keySet.size() > params.size()) { + System.out.println("Found Keys = " + keys + ", KeySet = " + keySet + ", Params = " + params); throw new IllegalArgumentException("Parameter not matched with keys size!"); } else { if (!ignoreMissingKey) { diff --git a/src/test/java/com/cubetiqs/sql/ConnectionTests.java b/src/test/java/com/cubetiqs/sql/ConnectionTests.java index 38f92fa..d00d4cc 100644 --- a/src/test/java/com/cubetiqs/sql/ConnectionTests.java +++ b/src/test/java/com/cubetiqs/sql/ConnectionTests.java @@ -18,7 +18,11 @@ public class ConnectionTests { JdbcDataFactory factory = ConnectionFactory .createDataFactory(builder); - IExecuteResult> result = factory.queryForList("select Status as gg from um"); + IExecuteResult> result = factory.queryForList( + SqlMapParameter.create("select UMID, Status from um where UMID = :umid or UMID = :umid") + .addParam("umid", "12") + .addParam("umid", "11") + ); System.out.println(result.getData()); factory.tryClose();