Misc
This commit is contained in:
parent
e20b863c9b
commit
1db04f54af
|
@ -1,33 +0,0 @@
|
||||||
= Query
|
|
||||||
|
|
||||||
== Expressions
|
|
||||||
|
|
||||||
=== Paths
|
|
||||||
|
|
||||||
=== Literals
|
|
||||||
|
|
||||||
=== Parameters
|
|
||||||
|
|
||||||
=== Unary expressions
|
|
||||||
|
|
||||||
=== Arithmetic operations
|
|
||||||
|
|
||||||
Numeric v. temporal
|
|
||||||
|
|
||||||
=== Functions
|
|
||||||
|
|
||||||
- Standard functions
|
|
||||||
- SqmFunctionRegistry
|
|
||||||
- Role of Dialect
|
|
||||||
|
|
||||||
=== Concatenation operations
|
|
||||||
|
|
||||||
=== Entity-type references
|
|
||||||
|
|
||||||
=== CASE statements
|
|
||||||
|
|
||||||
=== COALESCE statements
|
|
||||||
|
|
||||||
=== NULLIF statements
|
|
||||||
|
|
||||||
=== Sub-queries
|
|
|
@ -1,10 +0,0 @@
|
||||||
`OffsetDateTime` is not safe to store in database. This form does not understand "zone rules" relating to things
|
|
||||||
such as DST. An offset of +5, e.g., does not change when DST starts/ends - its just +5.
|
|
||||||
|
|
||||||
A `ZonedDateTime` on the other hand knows the actual timezone as well as the offset for the LocalDateTime portion in
|
|
||||||
that timezone. It is much more complete picture of the actual Instant.
|
|
||||||
|
|
||||||
The proper solution for storing "with tz" would be to always use a `ZonedDateTime`, converted from `OffsetDateTime`
|
|
||||||
if needed. In this case, I assume we need to transform a `LocalDateTime` to `ZonedDateTime`?
|
|
||||||
|
|
||||||
^^ what about Dialects that do not support "with tz" datatype variants? Are there any anymore?
|
|
|
@ -31,7 +31,7 @@ Assuming bi-directionality, we have 2 `Association` refs:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
There is a single ForeignKeyDescriptor instance for this FK in our metamodel, with 2 Sides:
|
There is a single `ForeignKeyDescriptor` instance for this FK in our metamodel, with 2 Sides:
|
||||||
|
|
||||||
```
|
```
|
||||||
ForeignKeyDescriptor (
|
ForeignKeyDescriptor (
|
|
@ -30,10 +30,11 @@ The actual tree nodes are defined in the `org.hibernate.sql.ast.tree` package.
|
||||||
|
|
||||||
== Building SQL AST
|
== Building SQL AST
|
||||||
|
|
||||||
There are 2 main producers of SQL AST atm:
|
There are 3 main producers of SQL AST:
|
||||||
|
|
||||||
* SQM translation - see `org.hibernate.query.sqm.sql`
|
SQM:: Translation of HQL and criteria queries. See `org.hibernate.query.sqm.sql`
|
||||||
* metamodel-based loading - see `org.hibernate.loader.internal.MetamodelSelectBuilderProcess`
|
Loading:: SQL generated for persistence-context events to load entities and collections. This includes `Session#find`, `Session#get`, `Session#lock`, ... See `org.hibernate.loader.internal.MetamodelSelectBuilderProcess`
|
||||||
|
Mutations:: SQL generated for persistence-context flush events to write entity and collection state to the database. See `org.hibernate.persister.entity.mutation` and `org.hibernate.persister.collection.mutation`
|
||||||
|
|
||||||
|
|
||||||
== Translating SQL AST
|
== Translating SQL AST
|
||||||
|
|
|
@ -37,7 +37,7 @@ from the removal of deprecated stuff. There are a few one-off changes that brea
|
||||||
source compatibility; these are covered in the link:{migration-guide-url}[migration guide].
|
source compatibility; these are covered in the link:{migration-guide-url}[migration guide].
|
||||||
|
|
||||||
One specific change to note is that many of these contracts have been better defined with type
|
One specific change to note is that many of these contracts have been better defined with type
|
||||||
parameters. Theses were inconsistently and sometimes poorly defined in previous versions.
|
parameters. Theses were inconsistently (and sometimes poorly) defined in previous versions.
|
||||||
|
|
||||||
Quite a few SPI contracts have changed to support many of the topics discussed here as well as in
|
Quite a few SPI contracts have changed to support many of the topics discussed here as well as in
|
||||||
the link:{migration-guide-url}[migration guide]. Many will also be the subject of the mentioned
|
the link:{migration-guide-url}[migration guide]. Many will also be the subject of the mentioned
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
package org.hibernate.internal.util.collections;
|
package org.hibernate.internal.util.collections;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -275,6 +276,10 @@ public final class CollectionHelper {
|
||||||
return objects == null || objects.length == 0;
|
return objects == null || objects.length == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isNotEmpty(Object[] objects) {
|
||||||
|
return objects != null && objects.length > 0;
|
||||||
|
}
|
||||||
|
|
||||||
public static <T> List<T> listOf(T value1) {
|
public static <T> List<T> listOf(T value1) {
|
||||||
final List<T> list = new ArrayList<>( 1 );
|
final List<T> list = new ArrayList<>( 1 );
|
||||||
list.add( value1 );
|
list.add( value1 );
|
||||||
|
@ -418,6 +423,17 @@ public final class CollectionHelper {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Map<String,Object> toSettingsMap(Object... pairs) {
|
||||||
|
assert pairs.length % 2 == 0;
|
||||||
|
if ( pairs.length == 2 ) {
|
||||||
|
return Collections.singletonMap( (String) pairs[0], pairs[1] );
|
||||||
|
}
|
||||||
|
|
||||||
|
final Map<String,Object> result = new HashMap<>();
|
||||||
|
applyToMap( result, pairs );
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||||
private static void applyToMap(Map<String,?> map, Object... pairs) {
|
private static void applyToMap(Map<String,?> map, Object... pairs) {
|
||||||
assert pairs.length % 2 == 0;
|
assert pairs.length % 2 == 0;
|
||||||
|
@ -472,4 +488,12 @@ public final class CollectionHelper {
|
||||||
public static int size(List<?> values) {
|
public static int size(List<?> values) {
|
||||||
return values == null ? 0 : values.size();
|
return values == null ? 0 : values.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static <X> Set<X> toSet(X... values) {
|
||||||
|
final HashSet<X> result = new HashSet<>();
|
||||||
|
if ( isNotEmpty( values ) ) {
|
||||||
|
result.addAll( Arrays.asList( values ) );
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue