From d31d09965ebfd7f1f6bbe0564daa6705db4fcd87 Mon Sep 17 00:00:00 2001 From: Ohjun Kwon Date: Thu, 16 Jan 2025 20:41:54 +0900 Subject: [PATCH] [#11967] Skip leading space when binding values --- .../common/profiler/sql/OutputParameterParser.java | 6 +++++- .../common/profiler/sql/DefaultSqlNormalizerTest.java | 8 +++++++- .../common/profiler/sql/OutputParameterParserTest.java | 3 +++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/sql/OutputParameterParser.java b/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/sql/OutputParameterParser.java index eb6e609b813e..09bc6370aae5 100644 --- a/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/sql/OutputParameterParser.java +++ b/commons-profiler/src/main/java/com/navercorp/pinpoint/common/profiler/sql/OutputParameterParser.java @@ -40,10 +40,14 @@ public List parseOutputParameter(String outputParams) { for (int index = 0; index < outputParams.length(); index++) { final char ch = outputParams.charAt(index); if (ch == SEPARATOR) { - if (lookAhead1(outputParams, index) == SEPARATOR) { + int ahead = lookAhead1(outputParams, index); + if (ahead == SEPARATOR) { params.append(SEPARATOR); index++; } else { + if (ahead == ' ') { + index++; + } result.add(params.toString()); params = new StringBuilder(); } diff --git a/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/sql/DefaultSqlNormalizerTest.java b/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/sql/DefaultSqlNormalizerTest.java index 4d8690ad0147..4bdb5d89db15 100644 --- a/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/sql/DefaultSqlNormalizerTest.java +++ b/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/sql/DefaultSqlNormalizerTest.java @@ -244,7 +244,13 @@ public void combineBindValue() { sql = "select * from table a = ? and b=? and c=? and d=?"; expected = "select * from table a = '1' and b='50' and c=' foo ' and d='11'"; - bindValues = parameterParser.parseOutputParameter("1,50, foo ,11"); + bindValues = parameterParser.parseOutputParameter("1,50, foo ,11"); + result = sqlNormalizer.combineBindValues(sql, bindValues); + Assertions.assertEquals(expected, result); + + sql = "select * from table a = ? and b=? and c=? and d=?"; + expected = "select * from table a = '1' and b='50' and c='foo' and d='11'"; + bindValues = parameterParser.parseOutputParameter("1, 50, foo, 11"); result = sqlNormalizer.combineBindValues(sql, bindValues); Assertions.assertEquals(expected, result); diff --git a/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/sql/OutputParameterParserTest.java b/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/sql/OutputParameterParserTest.java index 07d681889789..1e22c8bace0a 100644 --- a/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/sql/OutputParameterParserTest.java +++ b/commons-profiler/src/test/java/com/navercorp/pinpoint/common/profiler/sql/OutputParameterParserTest.java @@ -45,6 +45,9 @@ public void testParseOutputParameter() throws Exception { assertOutputParameter(""); + assertOutputParameter("1, 2, 3", "1", "2", "3"); + + assertOutputParameter("1 , 2, 3", "1 ", "2", " 3"); } private void assertOutputParameter(String outputParam, String... params) {