From f66c8429fb8cf0e2a14215cf02e1637909c9b3a0 Mon Sep 17 00:00:00 2001 From: moparisthebest Date: Mon, 19 Jun 2017 23:50:59 -0400 Subject: [PATCH] Fix case of functions in select statement in SimpleSQLParser --- .../java/com/moparisthebest/jdbc/codegen/SimpleSQLParser.java | 3 ++- .../com/moparisthebest/jdbc/codegen/SimpleSQLParserTest.java | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/SimpleSQLParser.java b/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/SimpleSQLParser.java index 0837ee6..ac1eae7 100644 --- a/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/SimpleSQLParser.java +++ b/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/SimpleSQLParser.java @@ -8,6 +8,7 @@ import java.util.regex.Pattern; public class SimpleSQLParser extends AbstractSQLParser { private static final Pattern aliasPattern = Pattern.compile("^.*\\."); + private static final Pattern parenPattern = Pattern.compile("\\([^)]+\\)"); public SimpleSQLParser() { super(null, false); @@ -24,7 +25,7 @@ public class SimpleSQLParser extends AbstractSQLParser { final boolean isSelect = sql.startsWith("SELECT"); String[] columnNames = null; if (isSelect) { - final String columns = sql.substring(sql.indexOf("SELECT") + 6, sql.indexOf("FROM")).trim(); + final String columns = parenPattern.matcher(sql.substring(sql.indexOf("SELECT") + 6, sql.indexOf("FROM"))).replaceAll("").trim(); final String[] splitColumns = columns.split(","); columnNames = new String[splitColumns.length + 1]; int index = 0; diff --git a/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/SimpleSQLParserTest.java b/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/SimpleSQLParserTest.java index 13402ca..cf431fb 100644 --- a/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/SimpleSQLParserTest.java +++ b/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/SimpleSQLParserTest.java @@ -29,6 +29,7 @@ public class SimpleSQLParserTest { "select bob, tom from tom" , "select some_bob bob, some_tom as tom from tom" , "select tom.bob, some_tom as tom from tom" + , "select tom.bob, COALESCE(some_tom, 'UNKNOWN') as tom from tom" }) { final SQLParser ret = getFactory().parse(sql); assertTrue(ret.isSelect());