Skip to content

Commit 7cb7405

Browse files
loiclefevrebeikov
authored andcommitted
HHH-16876 Update Oracle testing to 23c
1 parent 875e0ca commit 7cb7405

File tree

7 files changed

+113
-2
lines changed

7 files changed

+113
-2
lines changed

README.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ The following table illustrates a list of commands for various databases that ca
177177

178178
|Oracle XE
179179
|`./docker_db.sh oracle`
180-
|`./gradlew test -Pdb=oracle_ci`
180+
|`./gradlew test -Pdb=oracle_free_ci`
181181

182182
|DB2
183183
|`./docker_db.sh db2`

ci/build.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ elif [ "$RDBMS" == "edb" ] || [ "$RDBMS" == "edb_10" ]; then
2020
goal="-Pdb=edb_ci -DdbHost=localhost:5444"
2121
elif [ "$RDBMS" == "oracle" ]; then
2222
goal="-Pdb=oracle_ci"
23+
elif [ "$RDBMS" == "oracle_xe" ]; then
24+
# I have no idea why, but these tests don't seem to work on CI...
25+
goal="-Pdb=oracle_xe_ci"
2326
elif [ "$RDBMS" == "oracle_atps" ]; then
2427
echo "Managing Oracle Autonomous Database..."
2528
export INFO=$(curl -s -k -L -X GET "https://api.atlas-controller.oraclecloud.com/ords/atlas/admin/database?type=autonomous&hostname=`hostname`" -H 'accept: application/json')

docker_db.sh

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,85 @@ grant all privileges to hibernate_orm_test;
566566
EOF\""
567567
}
568568

569+
oracle_free_setup() {
570+
HEALTHSTATUS=
571+
until [ "$HEALTHSTATUS" == "healthy" ];
572+
do
573+
echo "Waiting for Oracle Free to start..."
574+
sleep 5;
575+
# On WSL, health-checks intervals don't work for Podman, so run them manually
576+
if command -v podman > /dev/null; then
577+
$PRIVILEGED_CLI $CONTAINER_CLI healthcheck run oracle > /dev/null
578+
fi
579+
HEALTHSTATUS="`$PRIVILEGED_CLI $CONTAINER_CLI inspect -f $HEALTCHECK_PATH oracle`"
580+
HEALTHSTATUS=${HEALTHSTATUS##+( )} #Remove longest matching series of spaces from the front
581+
HEALTHSTATUS=${HEALTHSTATUS%%+( )} #Remove longest matching series of spaces from the back
582+
done
583+
sleep 2;
584+
echo "Oracle successfully started"
585+
# We increase file sizes to avoid online resizes as that requires lots of CPU which is restricted in XE
586+
$PRIVILEGED_CLI $CONTAINER_CLI exec oracle bash -c "source /home/oracle/.bashrc; bash -c \"
587+
cat <<EOF | \$ORACLE_HOME/bin/sqlplus / as sysdba
588+
set timing on
589+
-- Remove DISABLE_OOB parameter from Listener configuration and restart it
590+
!echo Enabling OOB for Listener...
591+
!echo NAMES.DIRECTORY_PATH=\(EZCONNECT,TNSNAMES\) > /opt/oracle/oradata/dbconfig/FREE/sqlnet.ora
592+
!lsnrctl reload
593+
-- Increasing redo logs
594+
alter database add logfile group 4 '\$ORACLE_BASE/oradata/FREE/redo04.log' size 500M reuse;
595+
alter database add logfile group 5 '\$ORACLE_BASE/oradata/FREE/redo05.log' size 500M reuse;
596+
alter database add logfile group 6 '\$ORACLE_BASE/oradata/FREE/redo06.log' size 500M reuse;
597+
alter system switch logfile;
598+
alter system switch logfile;
599+
alter system switch logfile;
600+
alter system checkpoint;
601+
alter database drop logfile group 1;
602+
alter database drop logfile group 2;
603+
alter database drop logfile group 3;
604+
!rm \$ORACLE_BASE/oradata/FREE/redo01.log
605+
!rm \$ORACLE_BASE/oradata/FREE/redo02.log
606+
!rm \$ORACLE_BASE/oradata/FREE/redo03.log
607+
608+
-- Increasing SYSAUX data file
609+
alter database datafile '\$ORACLE_BASE/oradata/FREE/sysaux01.dbf' resize 600M;
610+
611+
-- Modifying database init parameters
612+
alter system set open_cursors=1000 sid='*' scope=both;
613+
alter system set session_cached_cursors=500 sid='*' scope=spfile;
614+
alter system set db_securefile=ALWAYS sid='*' scope=spfile;
615+
alter system set dispatchers='(PROTOCOL=TCP)(SERVICE=FREEXDB)(DISPATCHERS=0)' sid='*' scope=spfile;
616+
alter system set recyclebin=OFF sid='*' SCOPE=SPFILE;
617+
618+
-- Comment the 2 next lines to be able to use Diagnostics Pack features
619+
alter system set sga_target=0m sid='*' scope=both;
620+
-- alter system set statistics_level=BASIC sid='*' scope=spfile;
621+
622+
-- Restart the database
623+
SHUTDOWN IMMEDIATE;
624+
STARTUP MOUNT;
625+
ALTER DATABASE OPEN;
626+
627+
-- Switch to the FREEPDB1 pluggable database
628+
alter session set container=freepdb1;
629+
630+
-- Modify FREEPDB1 datafiles and tablespaces
631+
alter database datafile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/system01.dbf' resize 320M;
632+
alter database datafile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/sysaux01.dbf' resize 360M;
633+
alter database datafile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/undotbs01.dbf' resize 400M;
634+
alter database datafile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/undotbs01.dbf' autoextend on next 16M;
635+
alter database tempfile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/temp01.dbf' resize 400M;
636+
alter database tempfile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/temp01.dbf' autoextend on next 16M;
637+
alter database datafile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/users01.dbf' resize 100M;
638+
alter database datafile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/users01.dbf' autoextend on next 16M;
639+
alter tablespace USERS nologging;
640+
alter tablespace SYSTEM nologging;
641+
alter tablespace SYSAUX nologging;
642+
643+
create user hibernate_orm_test identified by hibernate_orm_test quota unlimited on users;
644+
grant all privileges to hibernate_orm_test;
645+
EOF\""
646+
}
647+
569648
oracle_setup_old() {
570649
HEALTHSTATUS=
571650
until [ "$HEALTHSTATUS" == "healthy" ];
@@ -700,7 +779,7 @@ EOF
700779
}
701780

702781
oracle() {
703-
oracle_21
782+
oracle_23
704783
}
705784

706785
oracle_11() {
@@ -731,6 +810,20 @@ oracle_21() {
731810
oracle_setup
732811
}
733812

813+
oracle_23() {
814+
$PRIVILEGED_CLI $CONTAINER_CLI rm -f oracle || true
815+
disable_userland_proxy
816+
# We need to use the defaults
817+
# SYSTEM/Oracle18
818+
$PRIVILEGED_CLI $CONTAINER_CLI run --name oracle -d -p 1521:1521 -e ORACLE_PASSWORD=Oracle18 \
819+
--health-cmd healthcheck.sh \
820+
--health-interval 5s \
821+
--health-timeout 5s \
822+
--health-retries 10 \
823+
docker.io/gvenzl/oracle-free:23-full
824+
oracle_free_setup
825+
}
826+
734827
hana() {
735828
temp_dir=$(mktemp -d)
736829
echo '{"master_password" : "H1bernate_test"}' >$temp_dir/password.json
@@ -985,6 +1078,7 @@ if [ -z ${1} ]; then
9851078
echo -e "\tmysql_8_0"
9861079
echo -e "\tmysql_5_7"
9871080
echo -e "\toracle"
1081+
echo -e "\toracle_23"
9881082
echo -e "\toracle_21"
9891083
echo -e "\toracle_11"
9901084
echo -e "\tpostgresql"

gradle/databases.gradle

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,14 @@ ext {
141141
'connection.init_sql' : ''
142142
],
143143
oracle_ci : [
144+
'db.dialect' : 'org.hibernate.dialect.OracleDialect',
145+
'jdbc.driver': 'oracle.jdbc.OracleDriver',
146+
'jdbc.user' : 'hibernate_orm_test',
147+
'jdbc.pass' : 'hibernate_orm_test',
148+
'jdbc.url' : 'jdbc:oracle:thin:@' + dbHost + ':1521/freepdb1',
149+
'connection.init_sql' : ''
150+
],
151+
oracle_xe_ci : [
144152
'db.dialect' : 'org.hibernate.dialect.OracleDialect',
145153
'jdbc.driver': 'oracle.jdbc.OracleDriver',
146154
'jdbc.user' : 'hibernate_orm_test',

hibernate-core/src/test/java/org/hibernate/orm/test/filter/FilterParameterTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public void testYesNo(SessionFactoryScope scope) {
8787
@SkipForDialect(dialectClass = CockroachDialect.class, matchSubTypes = true, reason = "Cockroach silently converts a boolean to string types")
8888
@SkipForDialect(dialectClass = PostgresPlusDialect.class, reason = "PostgresPlus silently converts a boolean to string types")
8989
@SkipForDialect(dialectClass = FirebirdDialect.class, reason = "Firebird silently converts a boolean to string")
90+
@SkipForDialect(dialectClass = OracleDialect.class, majorVersion = 23, reason = "Oracle 23 interprets Y and T as true and N and F as false, so this works")
9091
public void testYesNoMismatch(SessionFactoryScope scope) {
9192
scope.inTransaction( (session) -> {
9293
final EntityOne loaded = session.byId( EntityOne.class ).load( 1 );

hibernate-core/src/test/java/org/hibernate/orm/test/query/EntityValuedInSubqueryGroupAndOrderTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@
66
*/
77
package org.hibernate.orm.test.query;
88

9+
import org.hibernate.dialect.OracleDialect;
10+
911
import org.hibernate.testing.orm.junit.DomainModel;
1012
import org.hibernate.testing.orm.junit.Jira;
1113
import org.hibernate.testing.orm.junit.SessionFactory;
1214
import org.hibernate.testing.orm.junit.SessionFactoryScope;
15+
import org.hibernate.testing.orm.junit.SkipForDialect;
1316
import org.junit.jupiter.api.AfterAll;
1417
import org.junit.jupiter.api.BeforeAll;
1518
import org.junit.jupiter.api.Test;
@@ -51,6 +54,7 @@ public void tearDown(SessionFactoryScope scope) {
5154
}
5255

5356
@Test
57+
@SkipForDialect(dialectClass = OracleDialect.class, majorVersion = 23, reason = "Oracle 23c bug")
5458
public void testInSubqueryGroupBy(SessionFactoryScope scope) {
5559
scope.inTransaction( session -> {
5660
final EntityB result = session.createQuery(

hibernate-spatial/hibernate-spatial.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ tasks.test {
5050
'mysql_ci',
5151
'oracle',
5252
'oracle_ci',
53+
'oracle_xe_ci',
5354
'mssql',
5455
'mssql_ci'
5556
].contains( project.db )

0 commit comments

Comments
 (0)