From 8d39b0a99628e2a20812eb28e51da46150284372 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 9 Jan 2017 22:29:15 +1300 Subject: [PATCH] #940 - Allow findNative to use @Formula properties (add test for MySql := use with RawSql and findNative) --- .../server/deploy/BeanProperty.java | 14 +++++- .../tests/rawsql/TestRawSqlNamedParams.java | 44 +++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java b/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java index 827a7b4e0..9165ce6f0 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java +++ b/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java @@ -1427,8 +1427,18 @@ public class BeanProperty implements ElPropertyValue, Property { } public void registerColumn(BeanDescriptor desc, String prefix) { - if (dbColumn != null) { - desc.registerColumn(dbColumn, SplitName.add(prefix, name)); + + String path = SplitName.add(prefix, name); + if (formula && dbColumn != null) { + // trim off table alias placeholder if found + String[] split = dbColumn.split("}"); + if (split.length == 2) { + desc.registerColumn(split[1], path); + } else { + desc.registerColumn(dbColumn, path); + } + } else if (dbColumn != null) { + desc.registerColumn(dbColumn, path); } } } diff --git a/src/test/java/org/tests/rawsql/TestRawSqlNamedParams.java b/src/test/java/org/tests/rawsql/TestRawSqlNamedParams.java index d8bb7f41c..c3703719b 100644 --- a/src/test/java/org/tests/rawsql/TestRawSqlNamedParams.java +++ b/src/test/java/org/tests/rawsql/TestRawSqlNamedParams.java @@ -1,17 +1,22 @@ package org.tests.rawsql; import io.ebean.BaseTestCase; +import io.ebean.CallableSql; import io.ebean.Ebean; import io.ebean.Query; import io.ebean.RawSql; import io.ebean.RawSqlBuilder; +import io.ebean.Transaction; import org.tests.model.basic.Customer; +import org.tests.model.basic.Order; import org.tests.model.basic.ResetBasicData; import org.junit.Assert; import org.junit.Test; import java.util.List; +import static org.assertj.core.api.Assertions.assertThat; + public class TestRawSqlNamedParams extends BaseTestCase { @Test @@ -33,4 +38,43 @@ public class TestRawSqlNamedParams extends BaseTestCase { Assert.assertNotNull(list); } + + @Test + public void testMySqlColonEquals() { + + if (!isMySql()) { + return; + } + + ResetBasicData.reset(); + + Transaction transaction = Ebean.beginTransaction(); + + try { + CallableSql callableSql = Ebean.createCallableSql("set @total = 0"); + Ebean.execute(callableSql); + + String sql = "select id, @total := 0 + id as total_items from o_order"; + + Query query1 = Ebean.findNative(Order.class, sql); + List list = query1.findList(); + + assertThat(list.get(0).getTotalItems()).isNotNull(); + + Ebean.execute(callableSql); + + RawSql rawSql = RawSqlBuilder + .parse(sql) + .create(); + + Query query = Ebean.find(Order.class) + .setRawSql(rawSql); + + List list1 = query.findList(); + assertThat(list1.get(0).getTotalItems()).isNotNull(); + + } finally { + transaction.end(); + } + } }