Browse Source

Extend SimpleSQLParser to support more SQL, add tests

dependabot/maven/junit-junit-4.13.1
Travis Burtrum 3 years ago
parent
commit
aac0f30e8a
  1. 6
      jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/SimpleSQLParser.java
  2. 23
      test/src/test/java/com/moparisthebest/jdbc/codegen/SimpleSQLParserTest.java

6
jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/SimpleSQLParser.java

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
package com.moparisthebest.jdbc.codegen;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
@ -9,6 +10,7 @@ public class SimpleSQLParser extends AbstractSQLParser { @@ -9,6 +10,7 @@ public class SimpleSQLParser extends AbstractSQLParser {
private static final Pattern aliasPattern = Pattern.compile("^.*\\.");
private static final Pattern parenPattern = Pattern.compile("\\([^)]+\\)");
private static final Pattern fromPattern = Pattern.compile("\\s+FROM\\s+");
public SimpleSQLParser() {
super(null, false);
@ -30,7 +32,9 @@ public class SimpleSQLParser extends AbstractSQLParser { @@ -30,7 +32,9 @@ public class SimpleSQLParser extends AbstractSQLParser {
// (SELECT some_column from some_table where other_column = 'YAY') as tom -> () as tom
sql = parenPattern.matcher(sql).replaceAll("()").trim();
// 6 is length of "SELECT" which we already verified it starts with...
final String columns = sql.substring(6, sql.indexOf("FROM"));
final Matcher fromMatcher = fromPattern.matcher(sql);
// is a SELECT without a FROM valid? I guess maybe...
final String columns = sql.substring(6, fromMatcher.find() ? fromMatcher.start() : sql.length());
final String[] splitColumns = columns.split(",");
columnNames = new String[splitColumns.length + 1];
int index = 0;

23
test/src/test/java/com/moparisthebest/jdbc/codegen/SimpleSQLParserTest.java

@ -17,9 +17,26 @@ public class SimpleSQLParserTest { @@ -17,9 +17,26 @@ public class SimpleSQLParserTest {
@Test
public void testSingleSelect() {
final SQLParser ret = getFactory().parse("select bob from tom");
assertTrue(ret.isSelect());
assertArrayEquals(new String[]{null, "BOB"}, ret.columnNames());
{
final SQLParser ret = getFactory().parse("select bob from tom");
assertTrue(ret.isSelect());
assertArrayEquals(new String[]{null, "BOB"}, ret.columnNames());
}
{
final SQLParser ret = getFactory().parse("select bob_from from tom");
assertTrue(ret.isSelect());
assertArrayEquals(new String[]{null, "BOB_FROM"}, ret.columnNames());
}
{
final SQLParser ret = getFactory().parse("select from_bob from tom");
assertTrue(ret.isSelect());
assertArrayEquals(new String[]{null, "FROM_BOB"}, ret.columnNames());
}
{
final SQLParser ret = getFactory().parse("select something_from_bob from tom");
assertTrue(ret.isSelect());
assertArrayEquals(new String[]{null, "SOMETHING_FROM_BOB"}, ret.columnNames());
}
}
@Test

Loading…
Cancel
Save