From fdf94aa537140eaba3056e41a5157f2d41260f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Vran=C3=ADk?= Date: Tue, 21 Nov 2023 21:18:38 +0100 Subject: [PATCH] 91 where is dropped from the query (#94) * fixed alias and other patterns * updated default regexp * updated default regexp * fixed where patterns --------- Co-authored-by: pvranik --- gradle.properties | 2 +- .../jdbc/influxdb/InfluxDbConnection.java | 10 +++++----- .../jdbc/influxdb/InfluxDbConnectionTest.java | 18 ++++++++++-------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/gradle.properties b/gradle.properties index 47ab819..458e058 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ -version=0.2.2 +version=0.2.4 group=net.suteren.jdbc.influxdb diff --git a/src/main/java/net/suteren/jdbc/influxdb/InfluxDbConnection.java b/src/main/java/net/suteren/jdbc/influxdb/InfluxDbConnection.java index 3fbf811..f498acb 100644 --- a/src/main/java/net/suteren/jdbc/influxdb/InfluxDbConnection.java +++ b/src/main/java/net/suteren/jdbc/influxdb/InfluxDbConnection.java @@ -38,11 +38,11 @@ public class InfluxDbConnection implements Connection { private static final Pattern KEEP_ALIVE_SQL_PATTERN = Pattern.compile("\\s*SELECT\\s+['\"]keep\\s+alive['\"]\\s*.*", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); private static final Pattern TABLE_ALIASES_SQL_PATTERN = - Pattern.compile("\\s*SELECT\\s+(\\S+)\\s+FROM\\s+(\\S+)\\s+as\\s+(['\"]?)(\\S+)\\3(\\s.*)", + Pattern.compile("\\s*SELECT\\s+(\\S+)\\s+FROM\\s+(\\S+)\\s+(?!where)(?:as\\s+)?((['\"]?)(\\S+)\\4)(.*)", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); private static final Pattern TABLE_SCHEMA_SQL_PATTERN = - Pattern.compile("\\s*SELECT\\s+(\\S+)\\s+FROM\\s+(\\S+)\\.(\\S+(?:\\s.*)?)", + Pattern.compile("\\s*SELECT\\s+(\\S+)\\s+FROM\\s+(([\"']?)\\S+\\3)\\.(([\"']?)\\S+\\5(?:\\s.*)?)", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); private static final Pattern DEFAULT_SCHEMA_PATTERN = @@ -80,14 +80,14 @@ public InfluxDbConnection(String url, String username, String password, String d } Matcher matcher = TABLE_ALIASES_SQL_PATTERN.matcher(sql); if (matcher.matches()) { - String alias = matcher.group(4); - sql = matcher.replaceFirst("SELECT $1 FROM $2$5") + String alias = matcher.group(5); + sql = matcher.replaceFirst("SELECT $1 FROM $2$6") .replaceAll(String.format("\\s+%s\\.", alias), " ") .replaceAll(String.format("\\s+\"%s\"\\.", alias), " "); } matcher = TABLE_SCHEMA_SQL_PATTERN.matcher(sql); if (matcher.matches()) { - sql = matcher.replaceFirst("SELECT $1 FROM $3"); + sql = matcher.replaceFirst("SELECT $1 FROM $4"); } if (DEFAULT_SCHEMA_PATTERN.matcher(sql).matches()) { diff --git a/src/test/java/net/suteren/jdbc/influxdb/InfluxDbConnectionTest.java b/src/test/java/net/suteren/jdbc/influxdb/InfluxDbConnectionTest.java index 2694118..2119cd7 100644 --- a/src/test/java/net/suteren/jdbc/influxdb/InfluxDbConnectionTest.java +++ b/src/test/java/net/suteren/jdbc/influxdb/InfluxDbConnectionTest.java @@ -20,14 +20,16 @@ public void setUp() { public static Stream sqlSamples() { return Stream.of( - Arguments.arguments("SELECT * from measure", "SELECT * from measure"), - Arguments.arguments("SELECT * from \"measure\"", "SELECT * from \"measure\""), - Arguments.arguments("SELECT * from \\\"measure\\\"", "SELECT * from \\\"measure\\\""), - Arguments.arguments("SELECT * from \\\"measure\\\"", "SELECT * from \"\"measure\"\""), - Arguments.arguments("SELECT * from \"\\\"measure\\\"\"", "SELECT * from \"\"\"measure\"\"\""), - Arguments.arguments("SELECT * FROM measure", "SELECT * from test.measure"), - Arguments.arguments("SELECT * FROM jmeter where timestamp > now() - \"1 day\"", "select * from jmeter.jmeter where timestamp > now() - \"1 day\"") - + Arguments.arguments("select * from measure", "select * from measure"), + Arguments.arguments("select * from \"measure\"", "select * from \"measure\""), + Arguments.arguments("select * from \\\"measure\\\"", "select * from \\\"measure\\\""), + Arguments.arguments("select * from \\\"measure\\\"", "select * from \"\"measure\"\""), + Arguments.arguments("select * from \"\\\"measure\\\"\"", "select * from \"\"\"measure\"\"\""), + Arguments.arguments("SELECT * FROM measure", "select * from test.measure"), + Arguments.arguments("SELECT * FROM jmeter where timestamp > now() - \"1 day\"", "select * from jmeter.jmeter where timestamp > now() - \"1 day\""), + Arguments.arguments("SELECT * FROM jmeter\nwhere timestamp > now() - \"2 days\"", + "select t.*\nfrom jmeter.jmeter t\nwhere timestamp > now() - \"2 days\""), + Arguments.arguments("SELECT * FROM jmeter","select t.*\nfrom jmeter.jmeter t") ); }