Skip to content

Commit 680037d

Browse files
committed
Fix license headers
1 parent 98fab35 commit 680037d

File tree

4 files changed

+221
-223
lines changed

4 files changed

+221
-223
lines changed
Lines changed: 98 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
/*
2-
* Hibernate, Relational Persistence for Idiomatic Java
3-
*
4-
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5-
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
64
*/
75
package org.hibernate.orm.test.hql.customFunctions;
86

@@ -31,111 +29,111 @@
3129

3230
//tag::hql-user-defined-dialect-function-sqm-renderer[]
3331
public class CountItemsGreaterValSqmFunction extends AbstractSqmSelfRenderingFunctionDescriptor {
34-
private final CastFunction castFunction;
35-
private final BasicType<BigDecimal> bigDecimalType;
32+
private final CastFunction castFunction;
33+
private final BasicType<BigDecimal> bigDecimalType;
3634

37-
public CountItemsGreaterValSqmFunction(String name, Dialect dialect, TypeConfiguration typeConfiguration) {
38-
super(
39-
name,
40-
FunctionKind.AGGREGATE,
41-
/* Function consumes 2 numeric typed args:
42-
- the aggregation argument
43-
- the bottom edge for the count predicate*/
44-
new ArgumentTypesValidator(StandardArgumentsValidators.exactly(2),
45-
FunctionParameterType.NUMERIC,
46-
FunctionParameterType.NUMERIC
47-
),
48-
// Function returns one value - the number of items
49-
StandardFunctionReturnTypeResolvers.invariant(
50-
typeConfiguration.getBasicTypeRegistry()
51-
.resolve(StandardBasicTypes.BIG_INTEGER)
52-
),
53-
StandardFunctionArgumentTypeResolvers.invariant(
54-
typeConfiguration, NUMERIC, NUMERIC
55-
)
56-
);
57-
// Extracting cast function for setting input arguments to correct the type
58-
castFunction = new CastFunction(
59-
dialect,
60-
dialect.getPreferredSqlTypeCodeForBoolean()
61-
);
62-
bigDecimalType = typeConfiguration.getBasicTypeRegistry()
63-
.resolve(StandardBasicTypes.BIG_DECIMAL);
64-
}
35+
public CountItemsGreaterValSqmFunction(String name, Dialect dialect, TypeConfiguration typeConfiguration) {
36+
super(
37+
name,
38+
FunctionKind.AGGREGATE,
39+
/* Function consumes 2 numeric typed args:
40+
- the aggregation argument
41+
- the bottom edge for the count predicate*/
42+
new ArgumentTypesValidator(StandardArgumentsValidators.exactly(2),
43+
FunctionParameterType.NUMERIC,
44+
FunctionParameterType.NUMERIC
45+
),
46+
// Function returns one value - the number of items
47+
StandardFunctionReturnTypeResolvers.invariant(
48+
typeConfiguration.getBasicTypeRegistry()
49+
.resolve(StandardBasicTypes.BIG_INTEGER)
50+
),
51+
StandardFunctionArgumentTypeResolvers.invariant(
52+
typeConfiguration, NUMERIC, NUMERIC
53+
)
54+
);
55+
// Extracting cast function for setting input arguments to correct the type
56+
castFunction = new CastFunction(
57+
dialect,
58+
dialect.getPreferredSqlTypeCodeForBoolean()
59+
);
60+
bigDecimalType = typeConfiguration.getBasicTypeRegistry()
61+
.resolve(StandardBasicTypes.BIG_DECIMAL);
62+
}
6563

66-
@Override
67-
public void render(
68-
SqlAppender sqlAppender,
69-
List<? extends SqlAstNode> sqlAstArguments,
70-
SqlAstTranslator<?> walker) {
71-
render(sqlAppender, sqlAstArguments, null, walker);
72-
}
64+
@Override
65+
public void render(
66+
SqlAppender sqlAppender,
67+
List<? extends SqlAstNode> sqlAstArguments,
68+
SqlAstTranslator<?> walker) {
69+
render(sqlAppender, sqlAstArguments, null, walker);
70+
}
7371

74-
//tag::hql-user-defined-dialect-function-sqm-renderer-definition[]
75-
@Override
76-
public void render(
77-
SqlAppender sqlAppender,
78-
List<? extends SqlAstNode> sqlAstArguments,
79-
Predicate filter,
80-
SqlAstTranslator<?> translator) {
81-
// Renderer definition
82-
//end::hql-user-defined-dialect-function-sqm-renderer[]
72+
//tag::hql-user-defined-dialect-function-sqm-renderer-definition[]
73+
@Override
74+
public void render(
75+
SqlAppender sqlAppender,
76+
List<? extends SqlAstNode> sqlAstArguments,
77+
Predicate filter,
78+
SqlAstTranslator<?> translator) {
79+
// Renderer definition
80+
//end::hql-user-defined-dialect-function-sqm-renderer[]
8381

84-
// Appending name of SQL function to result query
85-
sqlAppender.appendSql(getName());
86-
sqlAppender.appendSql('(');
82+
// Appending name of SQL function to result query
83+
sqlAppender.appendSql(getName());
84+
sqlAppender.appendSql('(');
8785

88-
// Extracting 2 arguments
89-
final Expression first_arg = (Expression) sqlAstArguments.get(0);
90-
final Expression second_arg = (Expression) sqlAstArguments.get(1);
86+
// Extracting 2 arguments
87+
final Expression first_arg = (Expression) sqlAstArguments.get(0);
88+
final Expression second_arg = (Expression) sqlAstArguments.get(1);
9189

92-
// If JPQL contains "filter" expression, but database doesn't support it
93-
// then append: function_name(case when (filter_expr) then (argument) else null end)
94-
final boolean caseWrapper = filter != null && !translator.supportsFilterClause();
95-
if (caseWrapper) {
96-
translator.getCurrentClauseStack().push(Clause.WHERE);
97-
sqlAppender.appendSql("case when ");
90+
// If JPQL contains "filter" expression, but database doesn't support it
91+
// then append: function_name(case when (filter_expr) then (argument) else null end)
92+
final boolean caseWrapper = filter != null && !translator.supportsFilterClause();
93+
if (caseWrapper) {
94+
translator.getCurrentClauseStack().push(Clause.WHERE);
95+
sqlAppender.appendSql("case when ");
9896

99-
filter.accept(translator);
100-
translator.getCurrentClauseStack().pop();
97+
filter.accept(translator);
98+
translator.getCurrentClauseStack().pop();
10199

102-
sqlAppender.appendSql(" then ");
103-
renderArgument(sqlAppender, translator, first_arg);
104-
sqlAppender.appendSql(" else null end)");
105-
} else {
106-
renderArgument(sqlAppender, translator, first_arg);
107-
sqlAppender.appendSql(", ");
108-
renderArgument(sqlAppender, translator, second_arg);
109-
sqlAppender.appendSql(')');
110-
if (filter != null) {
111-
translator.getCurrentClauseStack().push(Clause.WHERE);
112-
sqlAppender.appendSql(" filter (where ");
100+
sqlAppender.appendSql(" then ");
101+
renderArgument(sqlAppender, translator, first_arg);
102+
sqlAppender.appendSql(" else null end)");
103+
} else {
104+
renderArgument(sqlAppender, translator, first_arg);
105+
sqlAppender.appendSql(", ");
106+
renderArgument(sqlAppender, translator, second_arg);
107+
sqlAppender.appendSql(')');
108+
if (filter != null) {
109+
translator.getCurrentClauseStack().push(Clause.WHERE);
110+
sqlAppender.appendSql(" filter (where ");
113111

114-
filter.accept(translator);
115-
sqlAppender.appendSql(')');
116-
translator.getCurrentClauseStack().pop();
117-
}
118-
}
119-
//tag::hql-user-defined-dialect-function-sqm-renderer[]
120-
}
112+
filter.accept(translator);
113+
sqlAppender.appendSql(')');
114+
translator.getCurrentClauseStack().pop();
115+
}
116+
}
117+
//tag::hql-user-defined-dialect-function-sqm-renderer[]
118+
}
121119

122-
//end::hql-user-defined-dialect-function-sqm-renderer[]
123-
private void renderArgument(
124-
SqlAppender sqlAppender,
125-
SqlAstTranslator<?> translator,
126-
Expression arg) {
127-
// Extracting the type of argument
128-
final JdbcMapping sourceMapping = arg.getExpressionType().getJdbcMappings().get(0);
129-
if (sourceMapping.getJdbcType().isNumber()) {
130-
castFunction.render(sqlAppender,
131-
Arrays.asList(arg, new CastTarget(bigDecimalType)),
132-
translator
133-
);
134-
} else {
135-
arg.accept(translator);
136-
}
137-
}
138-
//tag::hql-user-defined-dialect-function-sqm-renderer[]
139-
//end::hql-user-defined-dialect-function-sqm-renderer-definition[]
120+
//end::hql-user-defined-dialect-function-sqm-renderer[]
121+
private void renderArgument(
122+
SqlAppender sqlAppender,
123+
SqlAstTranslator<?> translator,
124+
Expression arg) {
125+
// Extracting the type of argument
126+
final JdbcMapping sourceMapping = arg.getExpressionType().getJdbcMappings().get(0);
127+
if (sourceMapping.getJdbcType().isNumber()) {
128+
castFunction.render(sqlAppender,
129+
Arrays.asList(arg, new CastTarget(bigDecimalType)),
130+
translator
131+
);
132+
} else {
133+
arg.accept(translator);
134+
}
135+
}
136+
//tag::hql-user-defined-dialect-function-sqm-renderer[]
137+
//end::hql-user-defined-dialect-function-sqm-renderer-definition[]
140138
}
141139
//end::hql-user-defined-dialect-function-sqm-renderer[]
Lines changed: 46 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
/*
2-
* Hibernate, Relational Persistence for Idiomatic Java
3-
*
4-
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5-
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
64
*/
75
package org.hibernate.orm.test.hql.customFunctions;
86

@@ -24,55 +22,55 @@
2422
@RequiresDialect(PostgreSQLDialect.class)
2523
public class CustomDialectFunctionTest extends BaseCoreFunctionalTestCase {
2624

27-
@Override
28-
protected void configure(Configuration configuration) {
29-
super.configure(configuration);
30-
configuration.addAnnotatedClass(Employee.class);
25+
@Override
26+
protected void configure(Configuration configuration) {
27+
super.configure(configuration);
28+
configuration.addAnnotatedClass(Employee.class);
3129

32-
configuration.setProperty(AvailableSettings.DIALECT, "org.hibernate.orm.test.hql.customFunctions.ExtendedPGDialect");
33-
}
30+
configuration.setProperty(AvailableSettings.DIALECT, "org.hibernate.orm.test.hql.customFunctions.ExtendedPGDialect");
31+
}
3432

35-
@Override
36-
protected Class<?>[] getAnnotatedClasses() {
37-
return new Class<?>[]{
38-
Employee.class
39-
};
40-
}
33+
@Override
34+
protected Class<?>[] getAnnotatedClasses() {
35+
return new Class<?>[]{
36+
Employee.class
37+
};
38+
}
4139

42-
@Test
43-
@RequiresDialect(PostgreSQLDialect.class)
44-
public void test_custom_sqm_functions() {
45-
doInJPA(this::sessionFactory, session -> {
46-
try (EntityManager entityManager = session.getEntityManagerFactory().createEntityManager()) {
47-
var tx = entityManager.getTransaction();
48-
tx.begin();
40+
@Test
41+
@RequiresDialect(PostgreSQLDialect.class)
42+
public void test_custom_sqm_functions() {
43+
doInJPA(this::sessionFactory, session -> {
44+
try (EntityManager entityManager = session.getEntityManagerFactory().createEntityManager()) {
45+
var tx = entityManager.getTransaction();
46+
tx.begin();
4947

50-
entityManager.unwrap(Session.class).doWork(connection -> {
51-
try (Statement statement = connection.createStatement()) {
52-
statement.executeUpdate(
53-
"create or replace function greater_than(c bigint, val numeric, gr_val numeric) returns bigint as $$ begin return case when val > gr_val then (c + 1)::bigint else c::bigint end; end; $$ language 'plpgsql'; " +
54-
"create or replace function agg_final(c bigint) returns bigint as $$ begin return c; end; $$ language 'plpgsql'; " +
55-
"create or replace aggregate count_items_greater_val(numeric, numeric) (sfunc = greater_than, stype = bigint, finalfunc = agg_final, initcond = 0);"
56-
);
57-
}
58-
});
48+
entityManager.unwrap(Session.class).doWork(connection -> {
49+
try (Statement statement = connection.createStatement()) {
50+
statement.executeUpdate(
51+
"create or replace function greater_than(c bigint, val numeric, gr_val numeric) returns bigint as $$ begin return case when val > gr_val then (c + 1)::bigint else c::bigint end; end; $$ language 'plpgsql'; " +
52+
"create or replace function agg_final(c bigint) returns bigint as $$ begin return c; end; $$ language 'plpgsql'; " +
53+
"create or replace aggregate count_items_greater_val(numeric, numeric) (sfunc = greater_than, stype = bigint, finalfunc = agg_final, initcond = 0);"
54+
);
55+
}
56+
});
5957

60-
//tag::hql-user-defined-dialect-function-inital-data[]
61-
entityManager.persist(new Employee(1L, 200L, "Jonn", "Robson"));
62-
entityManager.persist(new Employee(2L, 350L, "Bert", "Marshall"));
63-
entityManager.persist(new Employee(3L, 360L, "Joey", "Barton"));
64-
entityManager.persist(new Employee(4L, 400L, "Bert", "Marshall"));
65-
//end::hql-user-defined-dialect-function-inital-data[]
58+
//tag::hql-user-defined-dialect-function-inital-data[]
59+
entityManager.persist(new Employee(1L, 200L, "Jonn", "Robson"));
60+
entityManager.persist(new Employee(2L, 350L, "Bert", "Marshall"));
61+
entityManager.persist(new Employee(3L, 360L, "Joey", "Barton"));
62+
entityManager.persist(new Employee(4L, 400L, "Bert", "Marshall"));
63+
//end::hql-user-defined-dialect-function-inital-data[]
6664

67-
tx.commit();
68-
//tag::hql-user-defined-dialect-function-test[]
69-
var res = entityManager
70-
.createQuery("select count_items_greater_val(salary, 220) from Employee")
71-
.getSingleResult();
72-
assertEquals(3L, res);
73-
//end::hql-user-defined-dialect-function-test[]
74-
}
75-
});
76-
}
65+
tx.commit();
66+
//tag::hql-user-defined-dialect-function-test[]
67+
var res = entityManager
68+
.createQuery("select count_items_greater_val(salary, 220) from Employee")
69+
.getSingleResult();
70+
assertEquals(3L, res);
71+
//end::hql-user-defined-dialect-function-test[]
72+
}
73+
});
74+
}
7775

7876
}

0 commit comments

Comments
 (0)