Merge pull request #262 from ForNeVeR/issue-259

Fix issue #259
This commit is contained in:
Rob Bygrave
2015-04-02 11:57:57 +13:00
2 changed files with 40 additions and 1 deletions
@@ -5,6 +5,7 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import com.avaje.ebean.RawSql;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -234,7 +235,8 @@ public class CQueryPredicates {
// RawSql query hit cached query plan. Need to convert
// named parameters into positioned parameters so that
// the named parameters are bound
String s = query.getRawSql().getSql().getPreWhere();
RawSql.Sql sql = query.getRawSql().getSql();
String s = sql.isParsed() ? sql.getPreWhere() : sql.getUnparsedSql();
if (bindParams.requiresNamedParamsPrepare()) {
BindParamsParser.parse(bindParams, s);
}
@@ -0,0 +1,37 @@
package com.avaje.tests.rawsql;
import com.avaje.ebean.*;
import com.avaje.tests.model.basic.Customer;
import com.avaje.tests.model.basic.ResetBasicData;
import org.junit.Assert;
import org.junit.Test;
import java.util.List;
public class TestRawSqlUnparsedQuery extends BaseTestCase {
@Test
public void testDoubleUnparsedQuery() {
// Checks for RawSql caching issue https://github.com/ebean-orm/avaje-ebeanorm/issues/259
ResetBasicData.reset();
test();
test();
}
private static void test() {
RawSql rawSql = RawSqlBuilder
.unparsed("select r.id, r.name from o_customer r where r.id >= :a and r.name like :b")
.columnMapping("r.id", "id").columnMapping("r.name", "name").create();
Query<Customer> query = Ebean.find(Customer.class);
query.setRawSql(rawSql);
query.setParameter("a", 1);
query.setParameter("b", "R%");
List<Customer> list = query.findList();
Assert.assertNotNull(list);
}
}