Skip to content

Commit 36b7374

Browse files
committed
HHH-17335 Add array_length function
1 parent 7f10a48 commit 36b7374

File tree

15 files changed

+205
-1
lines changed

15 files changed

+205
-1
lines changed

documentation/src/main/asciidoc/userguide/chapters/query/hql/QueryLanguage.adoc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,6 +1121,7 @@ The following functions deal with SQL array types, which are not supported on ev
11211121
| `array_contains()` | Whether an array contains an element
11221122
| `array_contains_null()` | Whether an array contains a null
11231123
| `array_position()` | Determines the position of an element in an array
1124+
| `array_length()` | Determines the length of an array
11241125
|===
11251126
11261127
===== `array()`
@@ -1167,6 +1168,19 @@ include::{array-example-dir-hql}/ArrayPositionTest.java[tags=hql-array-position-
11671168
----
11681169
====
11691170
1171+
[[hql-array-length-functions]]
1172+
===== `array_length()`
1173+
1174+
Returns size of the passed array. Returns `null` if the array is `null`.
1175+
1176+
[[hql-array-length-example]]
1177+
====
1178+
[source, JAVA, indent=0]
1179+
----
1180+
include::{array-example-dir-hql}/ArrayLengthTest.java[tags=hql-array-length-example]
1181+
----
1182+
====
1183+
11701184
[[hql-user-defined-functions]]
11711185
==== Native and user-defined functions
11721186

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/CockroachLegacyDialect.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
466466
functionFactory.arrayContains_operator();
467467
functionFactory.arrayContainsNull_array_position();
468468
functionFactory.arrayPosition_postgresql();
469+
functionFactory.arrayLength_cardinality();
469470

470471
functionContributions.getFunctionRegistry().register(
471472
"trunc",

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/H2LegacyDialect.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
374374
functionFactory.arrayAggregate();
375375
functionFactory.arrayContains();
376376
functionFactory.arrayContainsNull();
377+
functionFactory.arrayLength_cardinality();
377378
}
378379
else {
379380
// Use group_concat until 2.x as listagg was buggy

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/HSQLLegacyDialect.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
252252
functionFactory.arrayContains_hsql();
253253
functionFactory.arrayContainsNull_hsql();
254254
functionFactory.arrayPosition_hsql();
255+
functionFactory.arrayLength_cardinality();
255256
}
256257

257258
@Override

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/OracleLegacyDialect.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
288288
functionFactory.arrayContains_oracle();
289289
functionFactory.arrayContainsNull_oracle();
290290
functionFactory.arrayPosition_oracle();
291+
functionFactory.arrayLength_oracle();
291292
}
292293

293294
@Override

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/PostgreSQLLegacyDialect.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
586586
functionFactory.arrayContains_operator();
587587
functionFactory.arrayContainsNull_array_position();
588588
functionFactory.arrayPosition_postgresql();
589+
functionFactory.arrayLength_cardinality();
589590

590591
if ( getVersion().isSameOrAfter( 9, 4 ) ) {
591592
functionFactory.makeDateTimeTimestamp();

hibernate-core/src/main/java/org/hibernate/dialect/CockroachDialect.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
453453
functionFactory.arrayContains_operator();
454454
functionFactory.arrayContainsNull_array_position();
455455
functionFactory.arrayPosition_postgresql();
456+
functionFactory.arrayLength_cardinality();
456457

457458
functionContributions.getFunctionRegistry().register(
458459
"trunc",

hibernate-core/src/main/java/org/hibernate/dialect/H2Dialect.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
314314
functionFactory.arrayAggregate();
315315
functionFactory.arrayContains();
316316
functionFactory.arrayContainsNull();
317+
functionFactory.arrayLength_cardinality();
317318
}
318319

319320
@Override

hibernate-core/src/main/java/org/hibernate/dialect/HSQLDialect.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
192192
functionFactory.arrayContains_hsql();
193193
functionFactory.arrayContainsNull_hsql();
194194
functionFactory.arrayPosition_hsql();
195+
functionFactory.arrayLength_cardinality();
195196
}
196197

197198
@Override

hibernate-core/src/main/java/org/hibernate/dialect/OracleArrayJdbcType.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,23 @@ public void addAuxiliaryDatabaseObjects(
251251
"return 0; " +
252252
"end;"
253253
},
254-
new String[] { "drop function " + arrayTypeName + "_contains" },
254+
new String[] { "drop function " + arrayTypeName + "_position" },
255+
emptySet(),
256+
false
257+
)
258+
);
259+
database.addAuxiliaryDatabaseObject(
260+
new NamedAuxiliaryDatabaseObject(
261+
arrayTypeName + "_length",
262+
database.getDefaultNamespace(),
263+
new String[]{
264+
"create or replace function " + arrayTypeName + "_length(arr in " + arrayTypeName +
265+
") return number deterministic is begin " +
266+
"if arr is null then return null; end if; " +
267+
"return arr.count; " +
268+
"end;"
269+
},
270+
new String[] { "drop function " + arrayTypeName + "_length" },
255271
emptySet(),
256272
false
257273
)

0 commit comments

Comments
 (0)