#733 - RawSqlBuilder.columnMapping() not working using DB column alias ... java.lang.IllegalArgumentException: DB Column [detail_count] not found in mapping.

This commit is contained in:
Robin Bygrave
2016-06-07 17:10:37 +12:00
parent 1a3acb86df
commit 353175626d
4 changed files with 96 additions and 36 deletions
@@ -1,16 +1,16 @@
package com.avaje.tests.query;
import java.util.List;
import com.avaje.ebean.RawSql;
import com.avaje.ebean.RawSqlBuilder;
import org.junit.Assert;
import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.Query;
import com.avaje.ebean.RawSql;
import com.avaje.ebean.RawSqlBuilder;
import com.avaje.tests.model.basic.MyAdHoc;
import com.avaje.tests.model.basic.ResetBasicData;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertNotNull;
public class TestMyAdHocSqlSelect extends BaseTestCase {
@@ -20,12 +20,44 @@ public class TestMyAdHocSqlSelect extends BaseTestCase {
ResetBasicData.reset();
String sql = "select order_id, count(*) as detailCount from o_order_detail group by order_id";
RawSql rawSql = RawSqlBuilder.parse(sql).columnMapping("order_id", "order.id").create();
List<MyAdHoc> list = Ebean.find(MyAdHoc.class).setRawSql(rawSql).where().gt("order_id", 0).having()
.gt("detailCount", 0).findList();
RawSql rawSql = RawSqlBuilder
.parse(sql)
.columnMapping("order_id", "order.id")
.create();
Assert.assertNotNull(list);
Query<MyAdHoc> query = Ebean.find(MyAdHoc.class)
.setRawSql(rawSql)
.where().gt("order_id", 0)
.having().gt("detailCount", 0)
.query();
assertNotNull(query.findList());
assertThat(query.getGeneratedSql()).contains(" group by order_id having count(*) > ?");
}
@Test
public void test_when_explicitColumnMapping() {
ResetBasicData.reset();
String sql = "select order_id, count(*) as detail_count from o_order_detail group by order_id";
RawSql rawSql = RawSqlBuilder
.parse(sql)
.columnMapping("order_id", "order.id")
.columnMapping("detail_count", "detailCount")
.create();
Query<MyAdHoc> query = Ebean.find(MyAdHoc.class)
.setRawSql(rawSql)
.where().gt("order_id", 0)
.having().gt("detailCount", 0)
.query();
assertNotNull(query.findList());
assertThat(query.getGeneratedSql()).contains(" group by order_id having count(*) > ?");
}
}