Slick 2.0.0-M3
We have just released Slick 2.0.0-M3, the third milestone for Slick 2.0. It should show up on Maven Central within the next few hours. You can find the source code here: https://github.com/slick/slick/tree/2.0.0-M3. Please see http://slick.typesafe.com/docs/ for documentation.
We published M2 in July but it was never officially announced and did not come with updated documentation, so these release notes include the changes for both, M2 and M3.
These are the major new features added since M1:
-
Table definitions in the Lifted Embedding use a new syntax which is slightly more verbose but also more robust and logical, avoiding several pitfalls from earlier versions.
-
Table definitions (and their
*
projections) are not restricted to flat tuples of columns anymore. They can use any type that would be valid as the return type of a Query. The old projection concatenation methods~
and~:
are still supported but not imported by default. -
In addition to Scala tuples, Slick supports its own
HList
abstraction for records of arbitrary size. You can also add support for your own record types with only a few lines of code. All record types can be used everywhere (including table definitions and mapped projections) and they can be mixed and nested arbitrarily. -
Some changes to the API to bring it closer to Scala Collections syntax.
-
threadLocalSession
has been renamed todynamicSession
and the corresponding methods have distinct names (e.g.withDynSession
vs the standardwithSession
). This allows the use of the standard methods without extra type annotations. Thread-local sessions are not deprecated but we want to push explicit session management (with the now simpler syntax) as the default. -
Some important parts of the query compiler have been rewritten. Column flattening and the emulation of
Boolean
which is required by some databases should now be more robust. -
Soft inserts are now the default, i.e.
AutoInc
columns are automatically skipped when inserting with+=
,++=
,insert
andinsertAll
. This means that you no longer need separate projections (without the primary key) for inserts. There are separate methodsforceInsert
andforceInsertAll
inJdbcProfile
for the old behavior. -
A new model for pre-compiled queries replaces the old
QueryTemplate
abstraction. Any query (both, actual collection-valuedQuery
objects and scalar queries) or function fromColumn
types to such a query can now be lifted into aCompiled
wrapper. Lifted functions can be applied (without having to recompile the query), and you can use both monadic composition ofCompiled
values or just get the underlying query and use that for further composition.
Note that this is not a production-ready or beta release. The Slick Extensions package is not available for this milestone release and the Slick Examples and Slick Testkit Example projects have not been updated yet.
We expect that the next published version of Slick will be 2.0.0-RC1 which will integrate code-generator-based type providers and add more documentation and bug fixes. It will also come with an updated Slick Extensions package.
Here is a complete list of changes since M1:
b70a2c7
Update build for 2.0.0-M31c488ea
Deprecate notIn, add filterNot for orthogonality and conformity with Scala collections see https://github.com/slick/slick/pull/204d1849b8
Add a separate compiler phase for boolean emulation.32e8cee
bumped scala to 2.10.3, sbt to 0.13.0, mima to 0.1.624b0ed7
Fix existing doctests, execute all doctests (including required fixes)2a4d156
Fix fusion of Take and Drop operators.3464b5e
Fix compilation error introduced by merging #232 and #243 together.48f0648
Add test case for multi-level mapping with <>, prompted by issue #78.c2eb8da
Add createDDLInvoker (similar to createInsertInvoker).c897ad9
Add HList and Nat implementations with Shapes for the HList.d6428b7
Simplify custom Shape definitions99f19fc
Use bind variables for types which do not support literals.68996f0
Skip AutoInc columns by default when inserting data.bda93a7
Introduce “Compiled” computations to replace parameterized queries.4ee1c5c
Treat Unit as an empty product type.bbf9694
Add a common abstraction for literal and parameter columns.b8eaa59
Improve Shape encoding to support Columns-level Shapes.942d98f
Add a nested Shape for Queries.f16915d
Allow unit tests which assure that some code does not type-check.ff992bb
Add Shape levels to differentiate between flat and nested Shapes.e9d6f69
Running a query to match a specific UUID in MySQL fails in 1.0.1. For example, the following code will fail with error “UUID does not support a literal representation”.1c1bf30
Fuse simple mappings before resolving GroupBy.009dc35
Flatten nested ProductNodes in GroupBy keys.01410cd
Use fixed version numbers for fmpp’s dependencies.d054bf5
Rename .elements to .iterator.64b1a12
Allow identity (primary key auto-increment) types to be overridden.2721a90
Quote the table name correctly in InsertBuilder.1be8a52
Add hashCode() implementation to ProductValue.5be75d3
Add regression test for grouping by 3 columns.05ded5c
Add documentation about using connection pools.57d886f
Update documentation for new table definitions and tuple syntax.b28d2a1
Fix build for building against Scala 2.1174ecd59
Don’t mark types as observed in dumps and when building typed copies.56cdd2d
Fix MatchError in tree dumps.3efe3d6
Fix typos81e50a7
Fix code style, transaction example, line wrap, search button layout, typos8829bf9
updates docs to not show dynamicSession as default621947a
adjusted docs to match changes regarding dynamicSession in 83d470796c2836d1a66d5b00726bc152bec63ac698eee6d
fixes compilation errors in dockets:test (which somehow creeped in)5bb13eb
adjusted docs for OSXc3b771a
Add Google Analytics token to the generated docs fixes assembla ticket #188d755e69
added connection / transaction docsa67ca6c
changed to docs Slick themee75919e
prepare for theme change (code lines < 100 chars)fa3c659
Add some scaladoc comments to the lifted embedding.353a260
Update the Typesafe Project & Developer Guidelines.27fc9ca
Remove some cruft from the AST.5bc8d29
Implement the new column expansion and flattening scheme.7b114bf
Find all referenced table columns in inferTypes.29fc842
Create a TableExpansion when creating a TableNode.697dc78
Simplify tagging and ref encoding.e33ba26
Simplify the Shape API + implementation and MapperTeste0c8db6
Support for easy type mapping in Shapes.9e566e2
Remove Node.apply and rename NodeGenerator.nodeDelegate to .toNode.379b649
Move the conversion of values to Nodes into Shape.78bad9e
Move encodeRef functionality for container types into Shape.5e98612
Simplify the creation of packed Shape of QueryParameters.531607d
fixes doctest:test compilation errors introduced by 83d470796c2836d1a66d5b00726bc152bec63ac6db9116d
Slick 2.0.0-M2 release36f95d7
Use the ++ operator for unionAll.5978155
Allow the use of += and ++= for more complex inserts in JdbcProfile.b16cbc5
Improve threadLocalSession API6cd987e
Make tuple extension methods optional.820670b
Sprinkle some macro sugar on TableQuery.6a3467e
Introduce the new table model.5506063
Add query-based DDL and Insert APIs.cf1b244
Complete separation of Nodes and Reps.2f6e031
Disentangle lifted embedding tables from TableNodes.73c79b3
Remove WithOp.cd1e60c
Rebase topic/tuples-everywhere.8239fb7
Simplify typing of Nodes.64e1f6b
Some minor cleanup worka63846d
Remove “by” Symbol from GroupBy.11afbd6
Implement SQL-likecount(*)
semantics workaround in QueryInterpreter.83c487d
Improve handling of types in the AST and query compiler.