Slick 2.0.0-M3

November 08 2013
by Stefan Zeiger

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 to dynamicSession and the corresponding methods have distinct names (e.g. withDynSession vs the standard withSession). 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 and insertAll. This means that you no longer need separate projections (without the primary key) for inserts. There are separate methods forceInsert and forceInsertAll in JdbcProfile for the old behavior.

  • A new model for pre-compiled queries replaces the old QueryTemplate abstraction. Any query (both, actual collection-valued Query objects and scalar queries) or function from Column types to such a query can now be lifted into a Compiled wrapper. Lifted functions can be applied (without having to recompile the query), and you can use both monadic composition of Compiled 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-M3
  • 1c488ea Deprecate notIn, add filterNot for orthogonality and conformity with Scala collections see https://github.com/slick/slick/pull/204
  • d1849b8 Add a separate compiler phase for boolean emulation.
  • 32e8cee bumped scala to 2.10.3, sbt to 0.13.0, mima to 0.1.6
  • 24b0ed7 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 definitions
  • 99f19fc 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.11
  • 74ecd59 Don’t mark types as observed in dumps and when building typed copies.
  • 56cdd2d Fix MatchError in tree dumps.
  • 3efe3d6 Fix typos
  • 81e50a7 Fix code style, transaction example, line wrap, search button layout, typos
  • 8829bf9 updates docs to not show dynamicSession as default
  • 621947a adjusted docs to match changes regarding dynamicSession in 83d470796c2836d1a66d5b00726bc152bec63ac6
  • 98eee6d fixes compilation errors in dockets:test (which somehow creeped in)
  • 5bb13eb adjusted docs for OSX
  • c3b771a Add Google Analytics token to the generated docs fixes assembla ticket #188
  • d755e69 added connection / transaction docs
  • a67ca6c changed to docs Slick theme
  • e75919e 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 MapperTest
  • e0c8db6 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 83d470796c2836d1a66d5b00726bc152bec63ac6
  • db9116d Slick 2.0.0-M2 release
  • 36f95d7 Use the ++ operator for unionAll.
  • 5978155 Allow the use of += and ++= for more complex inserts in JdbcProfile.
  • b16cbc5 Improve threadLocalSession API
  • 6cd987e 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 work
  • a63846d Remove “by” Symbol from GroupBy.
  • 11afbd6 Implement SQL-like count(*) semantics workaround in QueryInterpreter.
  • 83c487d Improve handling of types in the AST and query compiler.

Past News Items

Feb 10 2017
We have just released Slick 3.2.0-RC1, the first release candidate for Slick 3.2.0. You can find the source code here: . Builds for Scala 2.11 and 2.12 are available from...
Dec 05 2016
We have just released Slick 3.2.0-M2, the second milestone for Slick 3.2. It should show up on Maven Central within the next few hours. You can find the source code...
Jul 04 2016
We have just released Slick 3.2.0-M1, the first milestone for Slick 3.2. It should show up on Maven Central within the next few hours. You can find the source code...
Mar 18 2016
I'd like to draw your attention to the new [community process](/community/process.html) and [code of conduct](/community/conduct.html) for Slick, both of which are based on [Play Framework's](https://playframework.com/community-process). Back in 2008 [I](https://github.com/szeiger) started...
Feb 01 2016
Because nearly every application is driven by some sort of data source, we invested in building Slick, a Functional Relational Mapping (FRM) library for Scala that makes it easy to...
Dec 15 2015
We are happy to announce the release of [Slick](http://slick.typesafe.com/) 3.1.1. The artifacts are available on Maven Central, as usual. You can find the source code here: . Please see for...
Oct 09 2015
We are happy to announce the release of [Slick](http://slick.typesafe.com/) 3.1.0. These are the major new features compared to Slick 3.0.0: * New query compiler back-end. The main goal is to...
Oct 02 2015
We have just released Slick 3.1.0-RC3, the third release candidate for Slick 3.1.0. You can find the source code here: . Builds for Scala 2.10 and 2.11 are available from...