Skip to content

Commit

Permalink
Add spec and Fix WithContext
Browse files Browse the repository at this point in the history
  • Loading branch information
momosetkn committed Nov 24, 2024
1 parent add3be4 commit e303dde
Show file tree
Hide file tree
Showing 7 changed files with 277 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.Objects;
import org.seasar.doma.jdbc.criteria.metamodel.EntityMetamodel;
import org.seasar.doma.jdbc.criteria.statement.SetOperand;

public record WithContext(
EntityMetamodel<?> entityMetamodel, SetOperationContext<?> setOperationContext) {
Expand All @@ -10,4 +11,8 @@ public WithContext(
this.entityMetamodel = Objects.requireNonNull(entityMetamodel);
this.setOperationContext = Objects.requireNonNull(setOperationContext);
}

public WithContext(EntityMetamodel<?> entityMetamodel, SetOperand<?> setOperand) {
this(entityMetamodel, setOperand.getContext());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@
import org.seasar.doma.DomaException;
import org.seasar.doma.internal.jdbc.mock.MockConfig;
import org.seasar.doma.jdbc.Sql;
import org.seasar.doma.jdbc.criteria.context.WithContext;
import org.seasar.doma.jdbc.criteria.entity.Dept;
import org.seasar.doma.jdbc.criteria.entity.Dept_;
import org.seasar.doma.jdbc.criteria.entity.Emp;
import org.seasar.doma.jdbc.criteria.entity.Emp_;
import org.seasar.doma.jdbc.criteria.option.AssociationOption;
import org.seasar.doma.jdbc.criteria.option.DistinctOption;
import org.seasar.doma.jdbc.criteria.statement.Buildable;
import org.seasar.doma.jdbc.criteria.statement.Statement;
import org.seasar.doma.message.Message;

Expand All @@ -34,7 +36,7 @@ void from() {

@Test
void with1() {
Emp_ e = new Emp_();
var e = new Emp_();
Statement<List<Emp>> stmt = dsl.with(e, dsl.from(e).select()).from(e);

Sql<?> sql = stmt.asSql();
Expand All @@ -45,8 +47,8 @@ void with1() {

@Test
void with2() {
Emp_ e = new Emp_();
Emp_ e2 = new Emp_("EMP2");
var e = new Emp_();
var e2 = new Emp_("EMP2");
Statement<List<Emp>> stmt =
dsl.with(
e, dsl.from(e).select(),
Expand All @@ -59,6 +61,22 @@ void with2() {
sql.getFormattedSql());
}

@Test
void with_multiple() {
var e = new Emp_();
var e2 = new Emp_("EMP2");

var withContexts =
List.of(
new WithContext(e, dsl.from(e).select()), new WithContext(e2, dsl.from(e).select()));
Buildable<?> stmt = dsl.with(withContexts).from(e);

Sql<?> sql = stmt.asSql();
assertEquals(
"with EMP(ID, NAME, SALARY, VERSION) as (select t0_.ID, t0_.NAME, t0_.SALARY, t0_.VERSION from EMP t0_), EMP2(ID, NAME, SALARY, VERSION) as (select t0_.ID, t0_.NAME, t0_.SALARY, t0_.VERSION from EMP t0_) select t0_.ID, t0_.NAME, t0_.SALARY, t0_.VERSION from EMP t0_",
sql.getFormattedSql());
}

@Test
void innerJoin() {
Emp_ e = new Emp_();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.seasar.doma.jdbc.Commenter;
import org.seasar.doma.jdbc.Config;
import org.seasar.doma.jdbc.Sql;
import org.seasar.doma.jdbc.criteria.context.WithContext;
import org.seasar.doma.jdbc.criteria.entity.Dept_;
import org.seasar.doma.jdbc.criteria.entity.Emp;
import org.seasar.doma.jdbc.criteria.entity.Emp_;
Expand Down Expand Up @@ -66,7 +67,7 @@ class QueryDslNativeSqlSelectTest {

@Test
void with1() {
Emp_ e = new Emp_();
var e = new Emp_();
Buildable<?> stmt = dsl.with(e, dsl.from(e).select()).from(e).select(e.id);

Sql<?> sql = stmt.asSql();
Expand All @@ -77,8 +78,8 @@ void with1() {

@Test
void with2() {
Emp_ e = new Emp_();
Emp_ e2 = new Emp_("EMP2");
var e = new Emp_();
var e2 = new Emp_("EMP2");
Buildable<?> stmt =
dsl.with(
e, dsl.from(e).select(),
Expand All @@ -92,6 +93,22 @@ void with2() {
sql.getFormattedSql());
}

@Test
void with_multiple() {
var e = new Emp_();
var e2 = new Emp_("EMP2");

var withContexts =
List.of(
new WithContext(e, dsl.from(e).select()), new WithContext(e2, dsl.from(e).select()));
Buildable<?> stmt = dsl.with(withContexts).from(e).select(e.id);

Sql<?> sql = stmt.asSql();
assertEquals(
"with EMP(ID, NAME, SALARY, VERSION) as (select t0_.ID, t0_.NAME, t0_.SALARY, t0_.VERSION from EMP t0_), EMP2(ID, NAME, SALARY, VERSION) as (select t0_.ID, t0_.NAME, t0_.SALARY, t0_.VERSION from EMP t0_) select t0_.ID from EMP t0_",
sql.getFormattedSql());
}

@Test
void where_eq() {
Emp_ e = new Emp_();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.seasar.doma.it.criteria;

import org.seasar.doma.Column;
import org.seasar.doma.Entity;
import org.seasar.doma.Id;
import org.seasar.doma.Metamodel;

@Entity(metamodel = @Metamodel)
public class DepartmentCount {

@Id private Integer departmentId;
@Column private Integer count;

public Integer getDepartmentId() {
return departmentId;
}

public void setDepartmentId(Integer departmentId) {
this.departmentId = departmentId;
}

public Integer getCount() {
return count;
}

public void setCount(Integer count) {
this.count = count;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,15 @@ static UserDefinedExpression<String> tpStringWithUserDefined(
}
});
}

static UserDefinedExpression<Integer> addOne(PropertyMetamodel<?> propertyMetamodel) {
return userDefined(
Integer.class,
"addOne",
propertyMetamodel,
c -> {
c.appendExpression(propertyMetamodel);
c.appendSql(" + 1");
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.seasar.doma.it.criteria.CustomExpressions.addOne;
import static org.seasar.doma.jdbc.criteria.expression.Expressions.literal;

import java.math.BigDecimal;
Expand All @@ -28,6 +29,7 @@
import org.seasar.doma.jdbc.Sql;
import org.seasar.doma.jdbc.SqlLogType;
import org.seasar.doma.jdbc.criteria.QueryDsl;
import org.seasar.doma.jdbc.criteria.context.WithContext;
import org.seasar.doma.jdbc.criteria.expression.Expressions;
import org.seasar.doma.jdbc.criteria.option.AssociationOption;
import org.seasar.doma.jdbc.criteria.statement.EmptyWhereClauseException;
Expand Down Expand Up @@ -76,6 +78,95 @@ void allowEmptyWhere_disabled() {
() -> dsl.from(e, settings -> settings.setAllowEmptyWhere(false)).fetch());
}

@Test
void with1() {
var e = new Employee_();
var dcCte = new DepartmentCount_();
var dCteInner = new Department_();
var eCteInner = new Employee_();
var query =
dsl.with(
dcCte,
dsl.from(dCteInner)
.leftJoin(
eCteInner, on -> on.eq(dCteInner.departmentId, eCteInner.departmentId))
.groupBy(dCteInner.departmentId)
.select(dCteInner.departmentId, Expressions.count(eCteInner.addressId)))
.from(e)
.leftJoin(dcCte, on -> on.eq(e.departmentId, dcCte.departmentId));
var list = query.fetch();

assertEquals(14, list.size());
}

@Test
void with2() {
var e = new Employee_();
var dcCte1 = new DepartmentCount_();
var dCteInner1 = new Department_();
var eCteInner1 = new Employee_();
var dcCte2 = new DepartmentCount_("dcCte2");
var dCteInner2 = new Department_();
var eCteInner2 = new Employee_();
var query =
dsl.with(
dcCte1,
dsl.from(dCteInner1)
.leftJoin(
eCteInner1, on -> on.eq(dCteInner1.departmentId, eCteInner1.departmentId))
.groupBy(dCteInner1.departmentId)
.select(dCteInner1.departmentId, Expressions.count(eCteInner1.addressId)),
dcCte2,
dsl.from(dCteInner2)
.leftJoin(
eCteInner2, on -> on.eq(dCteInner2.departmentId, eCteInner2.departmentId))
.groupBy(dCteInner2.departmentId)
.select(
dCteInner2.departmentId, addOne(Expressions.count(eCteInner2.addressId))))
.from(e)
.leftJoin(dcCte1, on -> on.eq(e.departmentId, dcCte1.departmentId))
.leftJoin(dcCte2, on -> on.eq(e.departmentId, dcCte2.departmentId));
var list = query.fetch();

assertEquals(14, list.size());
}

@Test
void withMultiple() {
var e = new Employee_();
var dcCte1 = new DepartmentCount_();
var dCteInner1 = new Department_();
var eCteInner1 = new Employee_();
var dcCte2 = new DepartmentCount_("dcCte2");
var dCteInner2 = new Department_();
var eCteInner2 = new Employee_();
var withContexts =
List.of(
new WithContext(
dcCte1,
dsl.from(dCteInner1)
.leftJoin(
eCteInner1, on -> on.eq(dCteInner1.departmentId, eCteInner1.departmentId))
.groupBy(dCteInner1.departmentId)
.select(dCteInner1.departmentId, Expressions.count(eCteInner1.addressId))),
new WithContext(
dcCte2,
dsl.from(dCteInner2)
.leftJoin(
eCteInner2, on -> on.eq(dCteInner2.departmentId, eCteInner2.departmentId))
.groupBy(dCteInner2.departmentId)
.select(
dCteInner2.departmentId, addOne(Expressions.count(eCteInner2.addressId)))));
var query =
dsl.with(withContexts)
.from(e)
.leftJoin(dcCte1, on -> on.eq(e.departmentId, dcCte1.departmentId))
.leftJoin(dcCte2, on -> on.eq(e.departmentId, dcCte2.departmentId));
var list = query.fetch();

assertEquals(14, list.size());
}

@Test
void fetch() {
Employee_ e = new Employee_();
Expand Down
Loading

0 comments on commit e303dde

Please sign in to comment.