Allow you to write x'DEADBEEF' as {0xDE, 0xAD, 0xBE, 0xEF}.
For now I'm being quite restrictive here:
- byte literals must be written in hexadecimal not in decimal
- they must be exactly two digits in length
(I would like to allow decimal format but I think that would start to
collide with other rules with braces in the grammar.)
And fix up the parsing and formatting in VarbinaryTypeDescriptor which
was inconsistent with how the JDBC drivers handle the conversion to
signed bytes.
- changed EntityReadWriteAccess to remove the no-op unlockRegion method (now uses the method inherited from
AbstractCachedDomainDataAccess, which calls evictAll)
- changed AbstractReadWriteAccess to add a no-op removeAll method (as this is called by the constructor in
BulkOperationCleanupAction.EntityCleanup, during the transaction)
- added new file ReadWriteCacheTest with some test scenarios:
- testDeleteHQL/testDeleteNativeQuery/testUpdateHQL/testUpdateNativeQuery which confirm that the fix corrects the
scenario where stale entities could be loaded into the cache and remain there (because the eviction was
happening before the transaction had committed)
- testDelete/testUpdate show that entity updates/deletions were not affected by this issue (only HQL/native queries)
For the datetime stuff we need integer literals with leading zeros, and
surely there is not a single breathing person who has ever written an
octal literal in HQL.
- make it work for DriverManagerConnectionProviderImpl
- improve logging and some confusing exceptions
- make it respect explicit database setting properties
- add TimestampWithTimeZoneDescriptor and use it in OffsetDateTimeJD
and ZonedDateTimeJD
- add ZoneOffsetJavaDescriptor for ZoneOffset attributes
- clean up string rendering for temporal types using ISO formats;
note that they do not need to implement objectToSQLString()
since they cannot be discriminators
Note that at this time very few databases have meaningful support
for the ANSI-standard TIMESTAMP WITH TIME ZONE type. This limits
the usefulness of TimestampWithTimeZoneDescriptor for now.
Also add in some missing but needed type mappings for temporal types
And make the various function implementations work in more common ways.
- remove some unnecessary flexibility
- simplify some function descriptors to do their work during render()
- fix generics of QueryLiteral
- fix DerbyConcatEmulation