From 00d227c5982bc43c75bc5a2bc14c3b970b38393c Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Wed, 9 Dec 2015 17:24:58 +1300 Subject: [PATCH] #491 - RawSqlParser doesn't seem to understand new lines directly after the SELECT keyword --- .../java/com/avaje/ebean/DRawSqlParser.java | 4 +-- .../com/avaje/ebean/TestRawSqlBuilder.java | 31 ++++++++++++++++--- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/avaje/ebean/DRawSqlParser.java b/src/main/java/com/avaje/ebean/DRawSqlParser.java index 4c4729b01..4353403d7 100644 --- a/src/main/java/com/avaje/ebean/DRawSqlParser.java +++ b/src/main/java/com/avaje/ebean/DRawSqlParser.java @@ -46,6 +46,7 @@ class DRawSqlParser { private DRawSqlParser(String sqlString) { sqlString = sqlString.trim(); + sqlString = sqlString.replace('\n',' '); this.sql = sqlString; this.hasPlaceHolders = findAndRemovePlaceHolders(); this.textParser = new SimpleTextParser(sqlString); @@ -120,8 +121,7 @@ class DRawSqlParser { // trim of distinct keyword String distinct = preWhereExprSql.substring(0, 9); if (!distinct.equalsIgnoreCase("distinct ")) { - throw new RuntimeException("Expecting [" + preWhereExprSql - + "] to start with \"select distinct\""); + throw new RuntimeException("Expecting [" + preWhereExprSql + "] to start with \"select distinct\""); } preWhereExprSql = preWhereExprSql.substring(9); } diff --git a/src/test/java/com/avaje/ebean/TestRawSqlBuilder.java b/src/test/java/com/avaje/ebean/TestRawSqlBuilder.java index d9217a749..d2ad2538b 100644 --- a/src/test/java/com/avaje/ebean/TestRawSqlBuilder.java +++ b/src/test/java/com/avaje/ebean/TestRawSqlBuilder.java @@ -1,11 +1,13 @@ package com.avaje.ebean; -import org.junit.Assert; +import com.avaje.tests.model.basic.Customer; +import com.avaje.tests.model.basic.ResetBasicData; import org.junit.Test; import com.avaje.ebean.RawSql.Sql; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; public class TestRawSqlBuilder extends BaseTestCase { @@ -17,8 +19,27 @@ public class TestRawSqlBuilder extends BaseTestCase { assertEquals("id", sql.getPreFrom()); assertEquals("from t_cust", sql.getPreWhere()); assertEquals("", sql.getPreHaving()); - Assert.assertNull(sql.getOrderBy()); + assertNull(sql.getOrderBy()); + } + @Test + public void testWithNewLineCharacters() { + + RawSqlBuilder r = RawSqlBuilder.parse("select\n id from\n o_customer"); + Sql sql = r.getSql(); + + assertEquals("id", sql.getPreFrom()); + assertEquals("from o_customer", sql.getPreWhere()); + assertEquals("", sql.getPreHaving()); + assertNull(sql.getOrderBy()); + + ResetBasicData.reset(); + + RawSql rawSql = r.create(); + + Ebean.find(Customer.class) + .setRawSql(rawSql) + .findList(); } @Test @@ -29,7 +50,7 @@ public class TestRawSqlBuilder extends BaseTestCase { assertEquals("id", sql.getPreFrom()); assertEquals("from t_cust where id > ?", sql.getPreWhere()); assertEquals("", sql.getPreHaving()); - Assert.assertNull(sql.getOrderBy()); + assertNull(sql.getOrderBy()); } @Test @@ -87,7 +108,7 @@ public class TestRawSqlBuilder extends BaseTestCase { assertEquals("id, sum(x)", sql.getPreFrom()); assertEquals("from t_cust", sql.getPreWhere()); assertEquals("group by id having sum(x) > ?", sql.getPreHaving()); - Assert.assertNull(sql.getOrderBy()); + assertNull(sql.getOrderBy()); assertEquals("order by", sql.getOrderByPrefix()); // no order by @@ -97,7 +118,7 @@ public class TestRawSqlBuilder extends BaseTestCase { assertEquals("id, sum(x)", sql.getPreFrom()); assertEquals("from t_cust where id > ?", sql.getPreWhere()); assertEquals("group by id having sum(x) > ?", sql.getPreHaving()); - Assert.assertNull(sql.getOrderBy()); + assertNull(sql.getOrderBy()); assertEquals("order by", sql.getOrderByPrefix()); }