From 9734ae57875ce688d8c9bab5d4c0558ac5507e4a Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Wed, 26 Sep 2018 21:33:27 +1200 Subject: [PATCH] #1490 - FIX: withQuote_when_match for different platforms --- .../io/ebeaninternal/server/deploy/DeployParser.java | 5 +++-- .../server/deploy/DeployPropertyParserTest.java | 11 +++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/ebeaninternal/server/deploy/DeployParser.java b/src/main/java/io/ebeaninternal/server/deploy/DeployParser.java index a5e71183e..ecbfeb0a8 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/DeployParser.java +++ b/src/main/java/io/ebeaninternal/server/deploy/DeployParser.java @@ -25,6 +25,7 @@ public abstract class DeployParser { protected static final char OPEN_SQUARE_BRACKET = '['; protected static final char CLOSE_SQUARE_BRACKET = ']'; protected static final char DOUBLE_QUOTE = '\"'; + protected static final char BACK_QUOTE = '`'; /** * Used to determine when a column name terminates. @@ -187,10 +188,10 @@ public abstract class DeployParser { wordBuffer.append(ch); return false; } - return Character.isLetterOrDigit(ch) || ch == UNDERSCORE || ch == PERIOD || ch == DOUBLE_QUOTE || ch == CLOSE_SQUARE_BRACKET; + return Character.isLetterOrDigit(ch) || ch == UNDERSCORE || ch == PERIOD || ch == DOUBLE_QUOTE || ch == CLOSE_SQUARE_BRACKET || ch == BACK_QUOTE; } private boolean isWordStart(char ch) { - return Character.isLetter(ch) || ch == UNDERSCORE || ch == DOUBLE_QUOTE || ch == OPEN_SQUARE_BRACKET; + return Character.isLetter(ch) || ch == UNDERSCORE || ch == DOUBLE_QUOTE || ch == OPEN_SQUARE_BRACKET || ch == BACK_QUOTE; } } diff --git a/src/test/java/io/ebeaninternal/server/deploy/DeployPropertyParserTest.java b/src/test/java/io/ebeaninternal/server/deploy/DeployPropertyParserTest.java index f7d40815d..bb7d4e20a 100644 --- a/src/test/java/io/ebeaninternal/server/deploy/DeployPropertyParserTest.java +++ b/src/test/java/io/ebeaninternal/server/deploy/DeployPropertyParserTest.java @@ -3,7 +3,6 @@ package io.ebeaninternal.server.deploy; import io.ebean.BaseTestCase; import io.ebean.annotation.ForPlatform; import io.ebean.annotation.Platform; - import org.junit.Test; import org.tests.model.basic.Address; import org.tests.model.basic.BWithQIdent; @@ -55,25 +54,29 @@ public class DeployPropertyParserTest extends BaseTestCase { assertThat(addressParser().parse("concat(line1, line2, '-EA')")).isEqualTo("concat(${}line_1, ${}line_2, '-EA')"); } + @Test + public void withExplicitQuote_all_platforms() { + assertThat(withQuoteParser().parse("t0.`CODE` like ?")).isEqualTo("t0.`CODE` like ?"); + assertThat(withQuoteParser().parse("t0.[CODE] like ?")).isEqualTo("t0.[CODE] like ?"); + assertThat(withQuoteParser().parse("t0.\"CODE\" like ?")).isEqualTo("t0.\"CODE\" like ?"); + } + @Test @ForPlatform(value = {Platform.H2, Platform.POSTGRES}) public void withQuote_when_match_h2() { assertThat(withQuoteParser().parse("name like ?")).isEqualTo("${}\"Name\" like ?"); - assertThat(withQuoteParser().parse("t0.\"CODE\" like ?")).isEqualTo("t0.\"CODE\" like ?"); } @Test @ForPlatform(value = Platform.SQLSERVER) public void withQuote_when_match_sqlserver() { assertThat(withQuoteParser().parse("name like ?")).isEqualTo("${}[Name] like ?"); - assertThat(withQuoteParser().parse("t0.[CODE] like ?")).isEqualTo("t0.[CODE] like ?"); } @Test @ForPlatform(value = Platform.MYSQL) public void withQuote_when_match_mysql() { assertThat(withQuoteParser().parse("name like ?")).isEqualTo("${}`Name` like ?"); - assertThat(withQuoteParser().parse("t0.`CODE` like ?")).isEqualTo("t0.`CODE` like ?"); } @Test