Skip to content

Commit 839793e

Browse files
committed
HHH-16159 Fix some JSON related issues that came up
1 parent 4a07b5e commit 839793e

15 files changed

+168
-66
lines changed

docker_db.sh

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
#! /bin/bash
22

3-
if command -v podman > /dev/null; then
3+
if command -v docker > /dev/null; then
4+
CONTAINER_CLI=$(command -v docker)
5+
HEALTCHECK_PATH="{{.State.Health.Status}}"
6+
PRIVILEGED_CLI=""
7+
else
48
CONTAINER_CLI=$(command -v podman)
59
HEALTCHECK_PATH="{{.State.Healthcheck.Status}}"
610
# Only use sudo for podman
@@ -9,10 +13,6 @@ if command -v podman > /dev/null; then
913
else
1014
PRIVILEGED_CLI=""
1115
fi
12-
else
13-
CONTAINER_CLI=$(command -v docker)
14-
HEALTCHECK_PATH="{{.State.Health.Status}}"
15-
PRIVILEGED_CLI=""
1616
fi
1717

1818
mysql() {
@@ -489,7 +489,7 @@ oracle_setup() {
489489
echo "Waiting for Oracle to start..."
490490
sleep 5;
491491
# On WSL, health-checks intervals don't work for Podman, so run them manually
492-
if command -v podman > /dev/null; then
492+
if ! command -v docker > /dev/null; then
493493
$PRIVILEGED_CLI $CONTAINER_CLI healthcheck run oracle > /dev/null
494494
fi
495495
HEALTHSTATUS="`$PRIVILEGED_CLI $CONTAINER_CLI inspect -f $HEALTCHECK_PATH oracle`"
@@ -569,7 +569,7 @@ oracle_free_setup() {
569569
echo "Waiting for Oracle Free to start..."
570570
sleep 5;
571571
# On WSL, health-checks intervals don't work for Podman, so run them manually
572-
if command -v podman > /dev/null; then
572+
if ! command -v docker > /dev/null; then
573573
$PRIVILEGED_CLI $CONTAINER_CLI healthcheck run oracle > /dev/null
574574
fi
575575
HEALTHSTATUS="`$PRIVILEGED_CLI $CONTAINER_CLI inspect -f $HEALTCHECK_PATH oracle`"
@@ -658,9 +658,13 @@ disable_userland_proxy() {
658658
echo "Stopping docker..."
659659
sudo service docker stop
660660
echo "Updating /etc/docker/daemon.json..."
661-
sudo bash -c 'echo "${docker_daemon_json/\}/,}\"userland-proxy\": false}" > /etc/docker/daemon.json'
661+
sudo bash -c "export docker_daemon_json='$docker_daemon_json'; echo \"\${docker_daemon_json/\}/,}\\\"userland-proxy\\\": false}\" > /etc/docker/daemon.json"
662+
echo "New docker daemon config:"
663+
cat /etc/docker/daemon.json
662664
echo "Starting docker..."
663665
sudo service docker start
666+
echo "Service status:"
667+
sudo journalctl -xeu docker.service
664668
echo "Docker successfully started with userland proxies disabled"
665669
fi
666670
fi
@@ -733,6 +737,21 @@ oracle() {
733737
oracle_23
734738
}
735739

740+
oracle_18() {
741+
$PRIVILEGED_CLI $CONTAINER_CLI rm -f oracle || true
742+
disable_userland_proxy
743+
# We need to use the defaults
744+
# SYSTEM/Oracle18
745+
$PRIVILEGED_CLI $CONTAINER_CLI run --name oracle -d -p 1521:1521 -e ORACLE_PASSWORD=Oracle18 \
746+
--cap-add cap_net_raw \
747+
--health-cmd healthcheck.sh \
748+
--health-interval 5s \
749+
--health-timeout 5s \
750+
--health-retries 10 \
751+
${DB_IMAGE_ORACLE_21:-docker.io/gvenzl/oracle-xe:18.4.0}
752+
oracle_setup
753+
}
754+
736755
oracle_21() {
737756
$PRIVILEGED_CLI $CONTAINER_CLI rm -f oracle || true
738757
disable_userland_proxy
@@ -765,7 +784,7 @@ oracle_23() {
765784
hana() {
766785
temp_dir=$(mktemp -d)
767786
echo '{"master_password" : "H1bernate_test"}' >$temp_dir/password.json
768-
chmod 777 -R $temp_dir
787+
chmod -R 777 $temp_dir
769788
$PRIVILEGED_CLI $CONTAINER_CLI rm -f hana || true
770789
$PRIVILEGED_CLI $CONTAINER_CLI run -d --name hana -p 39013:39013 -p 39017:39017 -p 39041-39045:39041-39045 -p 1128-1129:1128-1129 -p 59013-59014:59013-59014 \
771790
--memory=8g \
@@ -775,7 +794,7 @@ hana() {
775794
--sysctl kernel.shmmni=4096 \
776795
--sysctl kernel.shmall=8388608 \
777796
-v $temp_dir:/config:Z \
778-
${DB_IMAGE_HANA:-docker.io/saplabs/hanaexpress:2.00.072.00.20231123.1} \
797+
${DB_IMAGE_HANA:-docker.io/saplabs/hanaexpress:2.00.076.00.20240701.1} \
779798
--passwords-url file:///config/password.json \
780799
--agree-to-sap-license
781800
# Give the container some time to start

hibernate-core/src/main/java/org/hibernate/dialect/aggregate/OracleAggregateSupport.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import org.hibernate.sql.ast.SqlAstTranslator;
3030
import org.hibernate.sql.ast.spi.AbstractSqlAstTranslator;
3131
import org.hibernate.sql.ast.spi.SqlAppender;
32+
import org.hibernate.sql.ast.tree.expression.Expression;
33+
import org.hibernate.sql.ast.tree.expression.Literal;
3234
import org.hibernate.type.BasicPluralType;
3335
import org.hibernate.type.BasicType;
3436
import org.hibernate.type.SqlTypes;
@@ -589,7 +591,14 @@ public void append(
589591
// We use NO_UNTYPED here so that expressions which require type inference are casted explicitly,
590592
// since we don't know how the custom write expression looks like where this is embedded,
591593
// so we have to be pessimistic and avoid ambiguities
592-
translator.render( expression.getValueExpression( selectableMapping ), SqlAstNodeRenderingMode.NO_UNTYPED );
594+
final Expression valueExpression = expression.getValueExpression( selectableMapping );
595+
if ( valueExpression instanceof Literal literal && literal.getLiteralValue() == null ) {
596+
// Except for the null literal. That is just rendered as-is
597+
sb.append( "null" );
598+
}
599+
else {
600+
translator.render( valueExpression, SqlAstNodeRenderingMode.NO_UNTYPED );
601+
}
593602
sb.append( customWriteExpressionEnd );
594603
}
595604
}

hibernate-core/src/main/java/org/hibernate/dialect/function/H2GenerateSeriesFunction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
import org.hibernate.query.sqm.tree.SqmTypedNode;
2020
import org.hibernate.spi.NavigablePath;
2121
import org.hibernate.sql.ast.SqlAstTranslator;
22+
import org.hibernate.sql.ast.spi.AbstractSqlAstTranslator;
2223
import org.hibernate.sql.ast.spi.SqlAppender;
2324
import org.hibernate.sql.ast.tree.SqlAstNode;
2425
import org.hibernate.sql.ast.tree.expression.ColumnReference;
2526
import org.hibernate.sql.ast.tree.expression.Expression;
26-
import org.hibernate.sql.ast.tree.expression.JdbcParameter;
2727
import org.hibernate.sql.ast.tree.expression.Literal;
2828
import org.hibernate.sql.ast.tree.from.FunctionTableGroup;
2929
import org.hibernate.sql.ast.tree.from.TableGroup;
@@ -232,6 +232,6 @@ protected void renderGenerateSeries(
232232
}
233233

234234
private static boolean needsEmulation(Expression expression) {
235-
return !( expression instanceof Literal || expression instanceof JdbcParameter);
235+
return !( expression instanceof Literal || AbstractSqlAstTranslator.isParameter( expression ) );
236236
}
237237
}

hibernate-core/src/main/java/org/hibernate/dialect/function/json/CockroachDBJsonExistsFunction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
import org.hibernate.dialect.Dialect;
1212
import org.hibernate.query.ReturnableType;
1313
import org.hibernate.sql.ast.SqlAstTranslator;
14+
import org.hibernate.sql.ast.spi.AbstractSqlAstTranslator;
1415
import org.hibernate.sql.ast.spi.SqlAppender;
1516
import org.hibernate.sql.ast.tree.expression.Expression;
16-
import org.hibernate.sql.ast.tree.expression.JdbcParameter;
1717
import org.hibernate.sql.ast.tree.expression.JsonExistsErrorBehavior;
1818
import org.hibernate.sql.ast.tree.expression.JsonPathPassingClause;
1919
import org.hibernate.type.spi.TypeConfiguration;
@@ -61,7 +61,7 @@ static void appendJsonExists(
6161
boolean isJsonType,
6262
@Nullable JsonPathPassingClause jsonPathPassingClause,
6363
SqlAstTranslator<?> walker) {
64-
final boolean needsCast = !isJsonType && jsonDocument instanceof JdbcParameter;
64+
final boolean needsCast = !isJsonType && AbstractSqlAstTranslator.isParameter( jsonDocument );
6565
if ( needsCast ) {
6666
sqlAppender.appendSql( "cast(" );
6767
}

hibernate-core/src/main/java/org/hibernate/dialect/function/json/CockroachDBJsonQueryFunction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
import org.hibernate.dialect.Dialect;
1212
import org.hibernate.query.ReturnableType;
1313
import org.hibernate.sql.ast.SqlAstTranslator;
14+
import org.hibernate.sql.ast.spi.AbstractSqlAstTranslator;
1415
import org.hibernate.sql.ast.spi.SqlAppender;
1516
import org.hibernate.sql.ast.tree.expression.Expression;
16-
import org.hibernate.sql.ast.tree.expression.JdbcParameter;
1717
import org.hibernate.sql.ast.tree.expression.JsonPathPassingClause;
1818
import org.hibernate.sql.ast.tree.expression.JsonQueryEmptyBehavior;
1919
import org.hibernate.sql.ast.tree.expression.JsonQueryErrorBehavior;
@@ -76,7 +76,7 @@ static void appendJsonQuery(
7676
boolean isJsonType,
7777
@Nullable JsonPathPassingClause jsonPathPassingClause,
7878
SqlAstTranslator<?> walker) {
79-
final boolean needsCast = !isJsonType && jsonDocumentExpression instanceof JdbcParameter;
79+
final boolean needsCast = !isJsonType && AbstractSqlAstTranslator.isParameter( jsonDocumentExpression );
8080
if ( needsCast ) {
8181
sqlAppender.appendSql( "cast(" );
8282
}

hibernate-core/src/main/java/org/hibernate/dialect/function/json/CockroachDBJsonRemoveFunction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
import org.hibernate.metamodel.mapping.JdbcMappingContainer;
1111
import org.hibernate.query.ReturnableType;
1212
import org.hibernate.sql.ast.SqlAstTranslator;
13+
import org.hibernate.sql.ast.spi.AbstractSqlAstTranslator;
1314
import org.hibernate.sql.ast.spi.SqlAppender;
1415
import org.hibernate.sql.ast.tree.SqlAstNode;
1516
import org.hibernate.sql.ast.tree.expression.Expression;
16-
import org.hibernate.sql.ast.tree.expression.JdbcParameter;
1717
import org.hibernate.type.spi.TypeConfiguration;
1818

1919
/**
@@ -34,7 +34,7 @@ public void render(
3434
final Expression json = (Expression) arguments.get( 0 );
3535
final Expression jsonPath = (Expression) arguments.get( 1 );
3636
sqlAppender.appendSql( "json_remove_path(" );
37-
final boolean needsCast = !isJsonType( json ) && json instanceof JdbcParameter;
37+
final boolean needsCast = !isJsonType( json ) && AbstractSqlAstTranslator.isParameter( json );
3838
if ( needsCast ) {
3939
sqlAppender.appendSql( "cast(" );
4040
}

hibernate-core/src/main/java/org/hibernate/dialect/function/json/CockroachDBJsonValueFunction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
import org.hibernate.dialect.Dialect;
1111
import org.hibernate.query.ReturnableType;
1212
import org.hibernate.sql.ast.SqlAstTranslator;
13+
import org.hibernate.sql.ast.spi.AbstractSqlAstTranslator;
1314
import org.hibernate.sql.ast.spi.SqlAppender;
1415
import org.hibernate.sql.ast.tree.expression.CastTarget;
1516
import org.hibernate.sql.ast.tree.expression.Expression;
16-
import org.hibernate.sql.ast.tree.expression.JdbcParameter;
1717
import org.hibernate.sql.ast.tree.expression.JsonPathPassingClause;
1818
import org.hibernate.sql.ast.tree.expression.JsonValueEmptyBehavior;
1919
import org.hibernate.sql.ast.tree.expression.JsonValueErrorBehavior;
@@ -63,7 +63,7 @@ static void appendJsonValue(SqlAppender sqlAppender, Expression jsonDocument, Li
6363
if ( castTarget != null ) {
6464
sqlAppender.appendSql( "cast(" );
6565
}
66-
final boolean needsCast = !isJsonType && jsonDocument instanceof JdbcParameter;
66+
final boolean needsCast = !isJsonType && AbstractSqlAstTranslator.isParameter( jsonDocument );
6767
if ( needsCast ) {
6868
sqlAppender.appendSql( "cast(" );
6969
}

0 commit comments

Comments
 (0)