Skip to content

Commit 950423e

Browse files
committed
HHH-17335 Add array_remove_index function
1 parent 865365e commit 950423e

File tree

17 files changed

+358
-19
lines changed

17 files changed

+358
-19
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1288,6 +1288,19 @@ include::{array-example-dir-hql}/ArrayRemoveTest.java[tags=hql-array-remove-exam
12881288
----
12891289
====
12901290
1291+
[[hql-array-remove-index-functions]]
1292+
===== `array_remove_index()`
1293+
1294+
Returns an array copy with the element at the given index removed from the array.
1295+
1296+
[[hql-array-remove-index-example]]
1297+
====
1298+
[source, JAVA, indent=0]
1299+
----
1300+
include::{array-example-dir-hql}/ArrayRemoveIndexTest.java[tags=hql-array-remove-index-example]
1301+
----
1302+
====
1303+
12911304
[[hql-user-defined-functions]]
12921305
==== Native and user-defined functions
12931306

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,8 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
474474
functionFactory.arrayContainsAnyNullable_operator();
475475
functionFactory.arrayGet_bracket();
476476
functionFactory.arraySet_unnest();
477-
functionFactory.arrayRemove_unnest();
477+
functionFactory.arrayRemove();
478+
functionFactory.arrayRemoveIndex_postgresql();
478479

479480
functionContributions.getFunctionRegistry().register(
480481
"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
@@ -383,6 +383,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
383383
functionFactory.arrayGet_h2();
384384
functionFactory.arraySet_h2();
385385
functionFactory.arrayRemove_h2();
386+
functionFactory.arrayRemoveIndex_h2();
386387
}
387388
else {
388389
// 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
@@ -261,6 +261,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
261261
functionFactory.arrayGet_unnest();
262262
functionFactory.arraySet_hsql();
263263
functionFactory.arrayRemove_hsql();
264+
functionFactory.arrayRemoveIndex_unnest();
264265
}
265266

266267
@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
@@ -297,6 +297,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
297297
functionFactory.arrayGet_oracle();
298298
functionFactory.arraySet_oracle();
299299
functionFactory.arrayRemove_oracle();
300+
functionFactory.arrayRemoveIndex_oracle();
300301
}
301302

302303
@Override

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,8 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
594594
functionFactory.arrayContainsAnyNullable_operator();
595595
functionFactory.arrayGet_bracket();
596596
functionFactory.arraySet_unnest();
597-
functionFactory.arrayRemove_unnest();
597+
functionFactory.arrayRemove();
598+
functionFactory.arrayRemoveIndex_postgresql();
598599

599600
if ( getVersion().isSameOrAfter( 9, 4 ) ) {
600601
functionFactory.makeDateTimeTimestamp();

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,8 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
461461
functionFactory.arrayContainsAnyNullable_operator();
462462
functionFactory.arrayGet_bracket();
463463
functionFactory.arraySet_unnest();
464-
functionFactory.arrayRemove_unnest();
464+
functionFactory.arrayRemove();
465+
functionFactory.arrayRemoveIndex_postgresql();
465466

466467
functionContributions.getFunctionRegistry().register(
467468
"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
@@ -323,6 +323,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
323323
functionFactory.arrayGet_h2();
324324
functionFactory.arraySet_h2();
325325
functionFactory.arrayRemove_h2();
326+
functionFactory.arrayRemoveIndex_h2();
326327
}
327328

328329
@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
@@ -201,6 +201,7 @@ public void initializeFunctionRegistry(FunctionContributions functionContributio
201201
functionFactory.arrayGet_unnest();
202202
functionFactory.arraySet_hsql();
203203
functionFactory.arrayRemove_hsql();
204+
functionFactory.arrayRemoveIndex_unnest();
204205
}
205206

206207
@Override

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,26 @@ public void addAuxiliaryDatabaseObjects(
399399
false
400400
)
401401
);
402+
database.addAuxiliaryDatabaseObject(
403+
new NamedAuxiliaryDatabaseObject(
404+
arrayTypeName + "_remove_index",
405+
database.getDefaultNamespace(),
406+
new String[]{
407+
"create or replace function " + arrayTypeName + "_remove_index(arr in " + arrayTypeName +
408+
", idx in number) return " + arrayTypeName + " deterministic is " +
409+
"res " + arrayTypeName + ":=" + arrayTypeName + "(); begin " +
410+
"if arr is null or idx is null then return arr; end if; " +
411+
"for i in 1 .. arr.count loop " +
412+
"if i<>idx then res.extend; res(res.last) := arr(i); end if; " +
413+
"end loop; " +
414+
"return res; " +
415+
"end;"
416+
},
417+
new String[] { "drop function " + arrayTypeName + "_remove_index" },
418+
emptySet(),
419+
false
420+
)
421+
);
402422
}
403423

404424
protected String createOrReplaceConcatFunction(String arrayTypeName) {

0 commit comments

Comments
 (0)