diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JsonHelper.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JsonHelper.java index 8e5fbb1ff73d..7c9a85203947 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JsonHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JsonHelper.java @@ -56,75 +56,6 @@ public class JsonHelper { */ private static X consumeJsonDocumentItems(JsonDocumentReader reader, EmbeddableMappingType embeddableMappingType, boolean returnEmbeddable, WrapperOptions options) throws SQLException { - record SelectableData(String selectableName, int selectableIndex, SelectableMapping selectableMapping){} - record ParseLevel( - @Nullable SelectableData selectableData, - @Nullable EmbeddableMappingType embeddableMappingType, - @Nullable BasicPluralType arrayType, - @Nullable List subArrayObjectList, - @Nullable Object [] objectArray - ) { - ParseLevel(EmbeddableMappingType embeddableMappingType) { - this(null, embeddableMappingType); - } - ParseLevel(@Nullable SelectableData selectableData, EmbeddableMappingType embeddableMappingType) { - this( - selectableData, - embeddableMappingType, - null, - null, - new Object[embeddableMappingType.getJdbcValueCount()+ ( embeddableMappingType.isPolymorphic() ? 1 : 0 )] - ); - } - ParseLevel(@Nullable SelectableData selectableData, BasicPluralType arrayType) { - this( selectableData, null, arrayType, new ArrayList<>(), null ); - } - - public void addValue(@Nullable SelectableData selectableData, @Nullable Object value) { - if ( embeddableMappingType != null ) { - assert selectableData != null; - objectArray[selectableData.selectableIndex] = value; - } - else { - assert subArrayObjectList != null; - subArrayObjectList.add(value); - } - } - - public JdbcMapping determineJdbcMapping(@Nullable SelectableData currentSelectableData) { - if ( currentSelectableData != null ) { - return currentSelectableData.selectableMapping.getJdbcMapping(); - } - else if ( arrayType != null ) { - return arrayType.getElementType(); - } - else { - assert selectableData != null; - return selectableData.selectableMapping.getJdbcMapping(); - } - } - - public static String determineSelectablePath(StandardStack parseLevel, @Nullable SelectableData currentSelectableData) { - if ( currentSelectableData != null ) { - return currentSelectableData.selectableName; - } - else { - return determineSelectablePath( parseLevel, 0 ); - } - } - - private static String determineSelectablePath(StandardStack stack, int level) { - final ParseLevel parseLevel = stack.peek( level ); - assert parseLevel != null; - if ( parseLevel.selectableData != null ) { - return parseLevel.selectableData.selectableName; - } - else { - assert parseLevel.arrayType != null; - return determineSelectablePath( stack, level + 1 ) + ".{element}"; - } - } - } final StandardStack parseLevel = new StandardStack<>(); final JsonValueJDBCTypeAdapter adapter = JsonValueJDBCTypeAdapterFactory.getAdapter(reader,returnEmbeddable); @@ -458,4 +389,74 @@ public T[] toArray(T[] a) { } } + private record SelectableData(String selectableName, int selectableIndex, SelectableMapping selectableMapping){} + private record ParseLevel( + @Nullable SelectableData selectableData, + @Nullable EmbeddableMappingType embeddableMappingType, + @Nullable BasicPluralType arrayType, + @Nullable List subArrayObjectList, + @Nullable Object [] objectArray + ) { + ParseLevel(EmbeddableMappingType embeddableMappingType) { + this(null, embeddableMappingType); + } + ParseLevel(@Nullable SelectableData selectableData, EmbeddableMappingType embeddableMappingType) { + this( + selectableData, + embeddableMappingType, + null, + null, + new Object[embeddableMappingType.getJdbcValueCount()+ ( embeddableMappingType.isPolymorphic() ? 1 : 0 )] + ); + } + ParseLevel(@Nullable SelectableData selectableData, BasicPluralType arrayType) { + this( selectableData, null, arrayType, new ArrayList<>(), null ); + } + + public void addValue(@Nullable SelectableData selectableData, @Nullable Object value) { + if ( embeddableMappingType != null ) { + assert selectableData != null; + objectArray[selectableData.selectableIndex] = value; + } + else { + assert subArrayObjectList != null; + subArrayObjectList.add(value); + } + } + + public JdbcMapping determineJdbcMapping(@Nullable SelectableData currentSelectableData) { + if ( currentSelectableData != null ) { + return currentSelectableData.selectableMapping.getJdbcMapping(); + } + else if ( arrayType != null ) { + return arrayType.getElementType(); + } + else { + assert selectableData != null; + return selectableData.selectableMapping.getJdbcMapping(); + } + } + + public static String determineSelectablePath(StandardStack parseLevel, @Nullable SelectableData currentSelectableData) { + if ( currentSelectableData != null ) { + return currentSelectableData.selectableName; + } + else { + return determineSelectablePath( parseLevel, 0 ); + } + } + + private static String determineSelectablePath(StandardStack stack, int level) { + final ParseLevel parseLevel = stack.peek( level ); + assert parseLevel != null; + if ( parseLevel.selectableData != null ) { + return parseLevel.selectableData.selectableName; + } + else { + assert parseLevel.arrayType != null; + return determineSelectablePath( stack, level + 1 ) + ".{element}"; + } + } + } + } diff --git a/local-build-plugins/src/main/groovy/local.java-module.gradle b/local-build-plugins/src/main/groovy/local.java-module.gradle index ac895043ac1a..e8ad687c6206 100644 --- a/local-build-plugins/src/main/groovy/local.java-module.gradle +++ b/local-build-plugins/src/main/groovy/local.java-module.gradle @@ -157,7 +157,7 @@ tasks.withType( JavaCompile ).configureEach { options.compilerArgumentProviders.add(new CompilerStubsArgumentProvider(stubsDir: new File(project.rootDir, "checkerstubs"))) if (System.getProperty('APT_DEBUG', 'false') == 'true') { - task.options.forkOptions.jvmArgs += ['-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9099'] + options.forkOptions.jvmArgs += ['-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9099'] } }