Skip to content

Commit 3a4382a

Browse files
committed
Add an extension-comparison test to QueryDslSqlSelectTest
1 parent ded78ca commit 3a4382a

File tree

2 files changed

+155
-0
lines changed

2 files changed

+155
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* Copyright Doma Authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.seasar.doma.jdbc.criteria;
17+
18+
import org.seasar.doma.jdbc.criteria.declaration.UserDefinedCriteriaContext;
19+
import org.seasar.doma.jdbc.criteria.expression.Expressions;
20+
import org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel;
21+
22+
record MyExtension(UserDefinedCriteriaContext context) {
23+
public void likeMultiple(PropertyMetamodel<?> entityMetamodel, String... patterns) {
24+
context.add(
25+
(b) -> {
26+
for (String pattern : patterns) {
27+
b.appendExpression(entityMetamodel);
28+
b.appendSql(" like ");
29+
b.appendExpression(Expressions.literal("%" + pattern + "%"));
30+
b.appendSql(" or ");
31+
}
32+
b.cutBackSql(4);
33+
});
34+
}
35+
}

doma-core/src/test/java/org/seasar/doma/jdbc/criteria/QueryDslSqlSelectTest.java

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,6 +1775,126 @@ void userDefinedExpression_countDistinctMultiple() {
17751775
sql.getFormattedSql());
17761776
}
17771777

1778+
@Test
1779+
void extension() {
1780+
var e = new Emp_();
1781+
var stmt =
1782+
dsl.from(e)
1783+
.where(
1784+
c -> {
1785+
c.extension(
1786+
MyExtension::new,
1787+
(ext) -> {
1788+
ext.likeMultiple(e.name, "SA");
1789+
});
1790+
})
1791+
.select(e.id);
1792+
1793+
var sql = stmt.asSql();
1794+
assertEquals("select t0_.ID from EMP t0_ where t0_.NAME like '%SA%'", sql.getFormattedSql());
1795+
}
1796+
1797+
@Test
1798+
void extension_multiple_condition() {
1799+
var e = new Emp_();
1800+
var stmt =
1801+
dsl.from(e)
1802+
.where(
1803+
c -> {
1804+
c.extension(
1805+
MyExtension::new,
1806+
(ext) -> {
1807+
ext.likeMultiple(e.name, "SA");
1808+
ext.likeMultiple(e.name, "LE");
1809+
});
1810+
})
1811+
.select(e.id);
1812+
1813+
var sql = stmt.asSql();
1814+
assertEquals(
1815+
"select t0_.ID from EMP t0_ where t0_.NAME like '%SA%' and t0_.NAME like '%LE%'",
1816+
sql.getFormattedSql());
1817+
}
1818+
1819+
@Test
1820+
void extension_and() {
1821+
var e = new Emp_();
1822+
var stmt =
1823+
dsl.from(e)
1824+
.where(
1825+
c -> {
1826+
c.extension(
1827+
MyExtension::new,
1828+
(ext) -> {
1829+
ext.likeMultiple(e.name, "SA");
1830+
c.and(
1831+
() -> {
1832+
ext.likeMultiple(e.name, "LE");
1833+
});
1834+
});
1835+
})
1836+
.select(e.id);
1837+
1838+
var sql = stmt.asSql();
1839+
assertEquals(
1840+
"select t0_.ID from EMP t0_ where t0_.NAME like '%SA%' and (t0_.NAME like '%LE%')",
1841+
sql.getFormattedSql());
1842+
}
1843+
1844+
@Test
1845+
void extension_or() {
1846+
var e = new Emp_();
1847+
var stmt =
1848+
dsl.from(e)
1849+
.where(
1850+
c -> {
1851+
c.extension(
1852+
MyExtension::new,
1853+
(ext) -> {
1854+
ext.likeMultiple(e.name, "CC");
1855+
c.or(
1856+
() -> {
1857+
ext.likeMultiple(e.name, "SA");
1858+
});
1859+
});
1860+
})
1861+
.select(e.id);
1862+
1863+
var sql = stmt.asSql();
1864+
assertEquals(
1865+
"select t0_.ID from EMP t0_ where t0_.NAME like '%CC%' or (t0_.NAME like '%SA%')",
1866+
sql.getFormattedSql());
1867+
}
1868+
1869+
@Test
1870+
void extension_or_and() {
1871+
var e = new Emp_();
1872+
var stmt =
1873+
dsl.from(e)
1874+
.where(
1875+
c -> {
1876+
c.extension(
1877+
MyExtension::new,
1878+
(ext) -> {
1879+
ext.likeMultiple(e.name, "CC");
1880+
c.or(
1881+
() -> {
1882+
ext.likeMultiple(e.name, "SA");
1883+
c.and(
1884+
() -> {
1885+
ext.likeMultiple(e.name, "LE");
1886+
});
1887+
});
1888+
});
1889+
})
1890+
.select(e.id);
1891+
1892+
var sql = stmt.asSql();
1893+
assertEquals(
1894+
"select t0_.ID from EMP t0_ where t0_.NAME like '%CC%' or (t0_.NAME like '%SA%' and (t0_.NAME like '%LE%'))",
1895+
sql.getFormattedSql());
1896+
}
1897+
17781898
private static UserDefinedExpression<Long> countDistinctMultiple(
17791899
PropertyMetamodel<?>... propertyMetamodels) {
17801900
return userDefined(

0 commit comments

Comments
 (0)