Quill v3.18.0 Release Notes
-
- Check all columns for null-ness for Option[Product] to be None
- Fixing Correlated Subquery Issues
- Corrects Like operator generating wrong SQLs
- Implement filterIfDefined
- ๐ Remove invalid 'AS' for Oracle Queries
- ๐ Remove twitter-chill library
๐ Version Bumps:
- sbt-scalajs-crossproject to 1.2.0
- logback-classic to 1.2.11
- h2 to 2.1.212
- zio, zio-streams to 1.0.14
- cassandra-driver-core to 3.11.2
- java-driver-core to 4.14.1
- scala-collection-compat to 2.7.0
- mysql-connector-java to 8.0.29
- scala3-library, ... to 3.1.2
- sbt-sonatype to 3.9.13
- postgresql to 42.3.6
Migration Notes:
- As a result of 2504, the handling of optional-product rows (technically parts of rows) is now different. Whereas before, if any non-optional column of an optional-product row was null, then entre optional-product would be null. Now however, an optional-product will only be null if every column inside is null. For example, before, if a query returning
Person(name:Option(Name(first:String, last:String)), age: Int)
resulted in the rowResultRow("Joe", null, 123)
before the entity would be decoded intoPerson(None, 123)
(i.e. the optional-productOption[Name]
would decode toNone
). Now however,Option[Name]
only decodes toNone
if every column inside it is null. This means that theResultRow("Joe", null, 123)
decodes toPerson(Name("Joe", 0 /*default-placeholder for null*/), 123)
. Only when the bothfirst
andlast
columns in Name are null i.e.ResultRow(null, null, 123)
will the result be:Person(None, 123)
. Have a look at the PR 2504 as well as it's corresponding issue 2505 for more details on how this works and the rationale for it.