Skip to content

Releases: nMoncho/helenus

Helenus v1.10.0

Choose a tag to compare

@nMoncho nMoncho released this 23 Jul 11:47

v1.10.0 (2026-07-10)

Features

  • migrate to Flink 2.x (6d0c1 Gustavo De Micheli)

Dependency updates

  • update zio, zio-streams, zio-test, ... from 2.1.25 to 2.1.26 (e450e Scala Steward)
  • update slf4j-api from 2.0.17 to 2.0.18 (dca2b Scala Steward)
  • update jna from 5.18.1 to 5.19.0 (d0b1a Scala Steward)
  • update scalafmt-core from 3.11.0 to 3.11.1 (c353f Scala Steward)
  • update sbt, scripted-plugin from 1.12.10 to 1.12.11 (63356 Scala Steward)
  • update java-driver-core from 4.19.2 to 4.19.3 (5e39f Scala Steward)
  • update flink-connector-base, flink-core, ... from 1.20.2 to 1.20.4 (4a587 Scala Steward)
  • update logback-classic from 1.5.32 to 1.5.34 (48781 Scala Steward)
  • update sbt-scalafmt from 2.6.0 to 2.6.1 (05947 Scala Steward)
  • update pekko-stream, pekko-testkit from 1.5.0 to 1.6.0 (db9ca Scala Steward)
  • update sbt-scalafmt from 2.5.6 to 2.6.0 (4f91d Scala Steward)
  • update pekko-stream, pekko-testkit from 1.4.0 to 1.5.0 (86348 Scala Steward)
  • update zio, zio-streams, zio-test, ... from 2.1.24 to 2.1.25 (38e96 Scala Steward)
  • update scalafmt-core from 3.10.7 to 3.11.0 (d2a0e Scala Steward)
  • update sbt, scripted-plugin from 1.12.8 to 1.12.10 (a3bb0 Scala Steward)
  • update sbt-scalafix from 0.14.5 to 0.14.6 (e16d5 Scala Steward)
  • update sbt-scoverage from 2.4.3 to 2.4.4 (dde65 Scala Steward)
  • update scalafmt-core from 3.10.3 to 3.10.7 (5abe1 Scala Steward)
  • update logback-classic from 1.5.23 to 1.5.32 (6bc86 Scala Steward)
  • update sbt-mima-plugin from 1.1.4 to 1.1.5 (4139f Scala Steward)
  • update pekko-connectors-cassandra from 1.2.0 to 1.3.0 (938b9 Scala Steward)
  • update sbt, scripted-plugin from 1.11.7 to 1.12.8 (fa3f8 Scala Steward)
  • update scalatest from 3.2.19 to 3.2.20 (dc7f6 Scala Steward)
  • update zio, zio-streams, zio-test, ... from 2.1.23 to 2.1.24 (444cb Scala Steward)

Helenus v1.9.1

Choose a tag to compare

@nMoncho nMoncho released this 29 Dec 10:57

v1.9.1 (2025-12-29)

Other changes

Update logback-classic to 1.5.23

d20b8 Scala Steward 2025-12-29 08:10:52

Update scala-library, scala-reflect to 2.12.21

eac7c Scala Steward 2025-12-29 08:09:59

Update scala-library, scala-reflect to 2.13.18

94df9 Scala Steward 2025-12-29 08:08:18

Update pekko-stream, pekko-testkit to 1.4.0

80033 Scala Steward 2025-12-29 08:07:17

Update zio, zio-streams, zio-test, ... to 2.1.23

5f2f5 Scala Steward 2025-12-29 08:05:38

Update java-driver-core to 4.19.2

41615 Scala Steward 2025-12-26 20:22:46

Update sbt-scoverage to 2.4.3

acb1c Scala Steward 2025-12-26 19:45:59

Update sbt-scalafix to 0.14.5

159df Scala Steward 2025-12-26 19:43:31

Update scalafmt-core to 3.10.3

892c6 Scala Steward 2025-12-26 19:43:20

Update sbt-scalafmt to 2.5.6

1233f Scala Steward 2025-12-26 19:43:07

Update cassandra-unit to 3.11.19.2

e7fe0 Scala Steward 2025-12-26 19:42:39

Helenus v1.9.0

Choose a tag to compare

@nMoncho nMoncho released this 28 Oct 10:19

Helenus v1.9.0 (2025-10-27)

Features

  • Add statement option to control query idempotency (b8463 Gustavo De Micheli)
  • Add TokenCodec for Token Range queries

Other changes

Release v1.9.0

8ef58 Gustavo De Micheli 2025-10-27 14:42:47

Update zio, zio-streams, zio-test, ... to 2.1.22

361d7 Scala Steward 2025-10-27 14:35:07

Update scala-library, scala-reflect to 2.13.17

05c35 Scala Steward 2025-10-27 14:30:25

Update scala-collection-compat to 2.14.0

bd452 Scala Steward 2025-10-27 14:30:17

Update sbt-scoverage to 2.4.0

f8095 Scala Steward 2025-10-27 14:29:59

Update sbt-scalafix to 0.14.4

34870 Scala Steward 2025-10-27 14:29:56

Update logback-classic to 1.5.20

ad6ed Scala Steward 2025-10-27 14:29:52

Update java-driver-core to 4.19.1

70fe0 Scala Steward 2025-10-27 14:29:46

Update sbt-jmh to 0.4.8

01116 Scala Steward 2025-10-06 07:29:30

Update logback-classic to 1.5.19

8311f Scala Steward 2025-10-06 07:29:19

Update jna to 5.18.1

1a5e4 Scala Steward 2025-10-06 07:29:01

Update sbt, scripted-plugin to 1.11.7

080b7 Scala Steward 2025-10-06 07:28:51

Helenus v1.8.3

Choose a tag to compare

@nMoncho nMoncho released this 26 Sep 08:50

v1.8.3 (2025-09-26)

Other changes

86651 Gustavo De Micheli 2025-09-26 08:22:02

Update sbt-header to 5.11.0

b467d Scala Steward 2025-09-26 07:34:36

Update scalacheck to 1.19.0

18b00 Scala Steward 2025-09-26 07:34:27

Update pekko-connectors-cassandra to 1.2.0

423bc Scala Steward 2025-09-26 07:33:48

Update pekko-stream, pekko-testkit to 1.2.1

f9ea6 Scala Steward 2025-09-26 07:27:11

Update jna to 5.18.0

4294c Scala Steward 2025-09-26 07:26:52

Update scalafmt-core to 3.9.10

7671f Scala Steward 2025-09-26 07:26:21

Update sbt, scripted-plugin to 1.11.6

f8290 Scala Steward 2025-09-26 07:26:06

Update zio, zio-streams, zio-test, ... to 2.1.21

eabe9 Scala Steward 2025-09-26 07:25:48

Update sbt, scripted-plugin to 1.11.5

72a44 Scala Steward 2025-08-29 13:05:38

Update sbt-ci-release to 1.11.2

d1cf9 Scala Steward 2025-08-18 18:59:39

Update sbt, scripted-plugin to 1.11.4

31a38 Scala Steward 2025-08-18 18:59:05

Update scalafmt-core to 3.9.9

d567f Scala Steward 2025-08-18 18:58:54

Update zio, zio-streams, zio-test, ... to 2.1.20

7347a Scala Steward 2025-08-02 06:41:37

Update flink-connector-base, flink-core, ... to 1.20.2

f35c6 Scala Steward 2025-07-18 11:18:08

Update pekko-stream, pekko-testkit to 1.1.5

48318 Scala Steward 2025-07-18 11:17:56

Update sbt, scripted-plugin to 1.11.3

7266f Scala Steward 2025-07-09 08:06:49

Update sbt-scalafmt to 2.5.5

84b74 Scala Steward 2025-07-02 14:12:19

Helenus v1.8.2

Choose a tag to compare

@nMoncho nMoncho released this 01 Jul 09:42

Bug Fixes

  • Assertion on 'ScalaPreparedStatementSpec' where a 'java.util.concurrent.CompletionException' wraps an 'InvalidQueryException' (ed859 Gustavo De Micheli)
  • Fix SBT configuration after SBT 1.11.0 and sbt-ci-release 1.11.0 update (687b5 Gustavo De Micheli)

Other changes

Release v1.8.2

be0f0 Gustavo De Micheli 2025-07-01 09:07:16

Update scalafmt-core to 3.9.8

ee9d8 Scala Steward 2025-06-30 14:00:57

Update pekko-stream, pekko-testkit to 1.1.4

6c1d6 Scala Steward 2025-06-14 00:38:16

Add 'Reformat with scalafmt 3.9.7' to .git-blame-ignore-revs

d5ca3 Scala Steward 2025-06-10 15:22:16

Reformat with scalafmt 3.9.7

  • Executed command: scalafmt --non-interactive

a8b45 Scala Steward 2025-06-10 15:22:16

Update scalafmt-core to 3.9.7

33d0e Scala Steward 2025-06-10 15:22:16

Update zio, zio-streams, zio-test, ... to 2.1.19

27720 Scala Steward 2025-06-10 15:22:05

Update sbt-ci-release to 1.11.1

21572 Scala Steward 2025-06-10 15:21:15

Update zio, zio-streams, zio-test, ... to 2.1.18

ee86f Scala Steward 2025-05-25 13:20:42

Update sbt-ci-release to 1.11.0

f66e8 Scala Steward 2025-05-25 13:20:31

Update sbt-scalafix to 0.14.3

3f3f8 Scala Steward 2025-05-09 09:34:13

Update zio, zio-streams, zio-test, ... to 2.1.17

6e046 Scala Steward 2025-05-07 08:28:56

Update scalafmt-core to 3.9.6

a7290 Scala Steward 2025-05-07 08:28:46

Update shapeless to 2.3.13

d3bd7 Gustavo De Micheli 2025-03-14 09:59:25

Update scalafmt-core to 3.9.4

7ca3f Gustavo De Micheli 2025-03-14 09:57:47

Update sbt-ci-release to 1.9.3

6d1f4 Scala Steward 2025-03-14 09:53:36

Update sbt, scripted-plugin to 1.10.10

5636f Scala Steward 2025-03-14 09:53:25

Update mockito-core to 5.16.0

45b6b Scala Steward 2025-03-14 09:53:01

Update zio, zio-streams, zio-test, ... to 2.1.16

02a7c Scala Steward 2025-03-14 09:49:39

Update slf4j-api to 2.0.17

67f94 Scala Steward 2025-03-14 09:45:31

Update logback-classic to 1.5.17

b0ac6 Scala Steward 2025-03-14 09:45:20

Update sbt-scalafix to 0.14.2

3ac7f Scala Steward 2025-02-24 08:23:26

Update scalafmt-core to 3.9.1

e8717 Scala Steward 2025-02-24 08:23:17

Update sbt-scoverage to 2.3.1

c6ec0 Scala Steward 2025-02-24 08:23:06

Update sbt-ci-release to 1.9.2

0e4ea Scala Steward 2025-02-15 20:34:43

Update scala-collection-compat to 2.13.0

02f56 Scala Steward 2025-02-14 15:45:56

Update mdoc, sbt-mdoc to 2.6.4

cb622 Scala Steward 2025-02-14 15:45:42

Update pekko-connectors-cassandra to 1.1.0

0497a Scala Steward 2025-02-14 15:45:29

Update zio, zio-streams, zio-test, ... to 2.1.15

4f179 Scala Steward 2025-02-14 15:45:15

Update scalafmt-core to 3.8.6

3c021 Scala Steward 2025-02-14 15:45:02

Update pekko-stream, pekko-testkit to 1.1.3

ff168 Scala Steward 2025-01-25 20:23:07

Update logback-classic to 1.5.16

f6472 Scala Steward 2025-01-24 16:04:53

Update scala-library, scala-reflect to 2.13.16

be263 Scala Steward 2025-01-24 16:04:53

Update zio, zio-streams, zio-test, ... to 2.1.14

5104b Scala Steward 2025-01-24 16:04:53

Update sbt, scripted-plugin to 1.10.7

14ee4 Scala Steward 2025-01-24 16:04:53

Update jna to 5.16.0

00fe6 Scala Steward 2025-01-24 16:04:53

Update sbt-scoverage to 2.3.0

9425c Scala Steward 2025-01-24 16:04:52

Update sbt-scalafmt to 2.5.4

d7450 Scala Steward 2025-01-24 16:02:12

Add 'Reformat with scalafmt 3.8.5' to .git-blame-ignore-revs

dd038 Scala Steward 2025-01-19 01:33:51

Reformat with scalafmt 3.8.5

  • Executed command: scalafmt --non-interactive

2ea46 Scala Steward 2025-01-19 01:33:51

Update scalafmt-core to 3.8.5

d7026 Scala Steward 2025-01-19 01:33:18

Helenus v1.8.1

Choose a tag to compare

@nMoncho nMoncho released this 23 Dec 11:12

v1.8.1 (2024-12-23)

Features

  • Add nextOption Pagination for sync results on ZIO operations (38fb4 Gustavo De Micheli)

Refactors

  • Use CassandraException as base error type on ZIO operations (33937 Gustavo De Micheli)

Chores

  • Add documentation to ZIO methods (a3c9d Gustavo De Micheli)

Helenus v1.8.0

Choose a tag to compare

@nMoncho nMoncho released this 23 Dec 11:08

Features

  • Add ZIO integration (47e60 Gustavo De Micheli)

To read more about this integration, feel free to take a look at our wiki.

Bug Fixes

  • Add setup-sbt to GitHub actions to fix missing sbt command from ubuntu-latest (30440 Gustavo De Micheli)
  • Add 'styleFix' and 'styleCheck' to Scala 2.12 source code (1dd60 Gustavo De Micheli)

Helenus v1.7.0

Choose a tag to compare

@nMoncho nMoncho released this 09 Dec 09:10

v1.7.0 (2024-12-08)

Features

  • Add Monix support (8fac8 Gustavo De Micheli)
  • Add withOptions extension method to Future[ScalaPreparedStatement[In, Out]] (fa91a Gustavo De Micheli)
  • Add UnifiedUDTCodec to bring IdenticalUDTCodec and NonIndenticalUDTCodec. (700fb Gustavo De Micheli)

Monix Support

This version includes integration with Monix. This is done with Observables for data sources, and Consumers for data sinks.

As with other integrations we start from a CQL query:

val query = "SELECT * FROM ice_creams".toCQL.prepareUnit.as[IceCream].asObservable()

val consumer = "INSERT INTO ice_creams(name, numCherries, cone) VALUES(?, ?, ?)".toCQL
        .prepare[String, Int, Boolean]
        .from[IceCream]
        .asConsumer()

Both sync and async API are supported.

Unified UDT Codecs

On previous releases we offered 2 ways of creating TypeCodecs for UDTs: udtOf and udtFrom. These offered different ways of mapping a case class to a UDT, depending if the fields of both were aligned or not. This required implementation knowledge on both sides. We always thought this was bad design, but the library evolved that way.

After we made the release for Scala 3, where we wanted to support using the derives keyword, we developed a way to have a single way to create these TypeCodecs. This feature is back-ported to its Scala 2 counterpart.

We still support users who want to specify the specific implementation with two new methods, which make evident the implementation. Also in preparation for Helenus 2.x we deprecated udtOf and udtFrom.

To use the new methods:

case class IceCream(name: String, numCherries: Int, cone: Boolean)

// these codecs methods also supports overriding "keyspace", "name", and "frozen"

val unified = Codec.of[IceCream]()

val identical = Codec.identicalUdtOf[IceCream]()

val nonIdentical = Codec.nonIdenticalUdtCodecOf[IceCream]()

Bug Fixes

  • Replace addOne on Factory.Builder for += operator failing on Scala 2.12 (96ef0 Gustavo De Micheli)
  • Properly accept DataType when using Identical and NonIdentical UDT Codecs (9bb8b Gustavo De Micheli)

Other changes

Release v1.7.0

c090f Gustavo De Micheli 2024-12-08 18:10:17

Update logback-classic to 1.5.12

bf943 Scala Steward 2024-11-10 17:04:12

Update sbt-ci-release to 1.9.0

65aeb Scala Steward 2024-11-10 17:03:54

Update pekko-stream, pekko-testkit to 1.1.2

9b8af Scala Steward 2024-11-10 17:03:37

Update mockito-core to 5.14.2

f3d9a Scala Steward 2024-11-10 17:03:20

Update scala-library, scala-reflect to 2.12.20

9fa89 Scala Steward 2024-11-10 17:03:05

Update mdoc, sbt-mdoc to 2.6.1

8c3c0 Scala Steward 2024-09-30 07:33:59

Update scala-library, scala-reflect to 2.13.15

411ff Scala Steward 2024-09-30 07:33:39

Update sbt-scalafix to 0.13.0

40ba4 Scala Steward 2024-09-30 07:33:17

Update mockito-core to 5.14.0

1dafe Scala Steward 2024-09-30 07:33:04

Update pekko-stream, pekko-testkit to 1.1.1

794c1 Scala Steward 2024-09-17 09:34:36

Update jna to 5.15.0

59248 Scala Steward 2024-09-17 09:34:17

Update scalacheck to 1.18.1

8b1eb Scala Steward 2024-09-17 09:34:02

Update mdoc, sbt-mdoc to 2.6.0

04d06 Scala Steward 2024-09-17 08:59:47

Update pekko-stream, pekko-testkit to 1.1.0

5bedd Scala Steward 2024-09-06 07:12:30

Update mockito-core to 5.13.0

760e6 Scala Steward 2024-08-30 15:45:26

Update sbt-mima-plugin to 1.1.4

5c1b3 Scala Steward 2024-08-22 07:24:02

Update slf4j-api to 2.0.16

da350 Scala Steward 2024-08-22 07:23:47

Update logback-classic to 1.5.7

d3e5a Scala Steward 2024-08-22 07:23:32

Update sbt-ci-release to 1.6.1

380f8 Scala Steward 2024-08-22 07:23:17

Update scalafmt-core to 3.8.3

15993 Scala Steward 2024-07-30 07:25:05

Update flink-connector-base, flink-core, ... to 1.18.1

8cc25 Scala Steward 2024-07-11 09:43:10

Update pekko-stream, pekko-testkit to 1.0.3

a9bd0 Scala Steward 2024-07-11 09:42:54

Update scalatest to 3.2.19

589ce Scala Steward 2024-07-11 09:41:28

Update mdoc, sbt-mdoc to 2.5.4

1cc56 Scala Steward 2024-07-11 09:41:07

Helenus v1.6.1

Choose a tag to compare

@nMoncho nMoncho released this 24 Jun 09:08

Helenus v1.6.1 (2024-06-24)

Bug Fixes

  • Tag Adapter Serializable so it can be used on Flink Streams (e902d Gustavo De Micheli)

Other changes

Update scala-library, scala-reflect to 2.13.14

c3189 Scala Steward 2024-06-24 08:52:31

Update scalafmt-core to 3.8.2

6ae40 Scala Steward 2024-06-24 08:52:09

v1.6.0

Choose a tag to compare

@nMoncho nMoncho released this 11 Jun 08:45

Helenus v1.6.0 (2024-06-11)

Features

Flink Experimental Support

On this release we add support for Apache Flink. You can use Helenus as either a Source or a Sink.

The way this works is a bit different from Akka/Pekko, or just plain Helenus. Since the statements will be ran in different nodes, these have to be late prepared. This means that we provide a thunk to Flink, instead of an already prepared statement.

For example, if we want to define a Source, we can do:

val query = (session: CqlSession) => "SELECT * FROM hotels".toCQL(session).prepareUnit.as[Hotel].apply()

val input: DataStream[Hotel] = env.fromSource(
    query.asSource(CassandraSource.Config()),
    WatermarkStrategy.noWatermarks(),
    "Cassandra Source"
)

Notice that we must provide a thunk of the type: CqlSession => ScalaBoundStatement[Out]. We don't provide a ScalaPreparedStatement instead since query parameters cannot be bound during parallel execution.

We can also provide the previous snippet in curried form:

val input: DataStream[Hotel] = env.fromSource(
    "SELECT * FROM hotels".toCQL(_)
        .prepareUnit
        .as[Hotel]
        .apply()
        .asSource(CassandraSource.Config()),
    WatermarkStrategy.noWatermarks(),
    "Cassandra Source"
)

The current implementation is heavily influenced by Flink's Cassandra Connector. After we get more experience and feedback, we'll probably adjust and improve our implementation.

This was implemented in this commit:

  • Add Flink Source/Sink for DataStream and DataSet (9dbb3 Gustavo De Micheli)

Ignoring null values

By default Helenus ignores null values provided to ScalaPreparedStatements. The way this works is that after a statement is bound, null values are just skipped from the bind parameters.

Nonetheless sometimes users may want to insert null into a row (e.g. they are updating a row and want to set that column as empty).

To this purpose you can use the withIgnoreNullFields method to decided if you want to ignore null fields or not (true by default):

"INSERT INTO hotels(id, name, phone, address, pois) VALUES (?, ?, ?, ?, ?)".stripMargin.toCQL
    .prepare[String, String, String, Address, Set[String]]
    .withIgnoreNullFields(ignore = false)

This was implemented in these two commits:

  • Allow prepareFrom queries to ignore 'null/None' through options (441a8 Gustavo De Micheli)
  • Allow users to choose if 'null/None' fields are ignored or not when binding parameters to a statement. (fab1d Gustavo De Micheli)

Add oneOption extension method as convenience for queries with a single result

In previous releases we added the nextOption method which would return an
Future[Option[(T, MappedAsyncPagingIterable)]]. This was done to provide a similar
API to Pager, in which the client code could iterate over results while keeping
track of the mutated paging iterable, which would change when fetching the next page.

An example can be seen on the tests:

        result <- "SELECT * FROM hotels".toCQLAsync.prepareUnit
          .as[Hotel]
          .map(_.withPageSize(2))
          .executeAsync()

        Some((hotelA, iteratorA)) <- result.nextOption()
        Some((hotelB, iteratorB)) <- iteratorA.nextOption() // we use 'iteratorA', not 'result'
        Some((hotelC, iteratorC)) <- iteratorB.nextOption()
        Some((hotelD, iteratorD)) <- iteratorC.nextOption()
        Some((hotelE, iteratorE)) <- iteratorD.nextOption()
        lastResult <- iteratorE.nextOption()

This is cumbersome when we want only the first result, for example when
we use a LIMIT 1 in the query, which is where oneOption becomes useful:

        result <- "SELECT * FROM hotels LIMIT 1".toCQLAsync.prepareUnit
          .as[Hotel]
          .executeAsync()

        firstResult = result.oneOption  // this should be Some
        nextResult  = result.oneOption  // this will always be None

oneOption is no longer providing a Future but only an Option as the
page is already fetched.

This was implemented in this commit:

  • Add oneOption extension method to MappedAsyncPagingIterable. (e7878 Gustavo De Micheli)

Other Features

  • Add extension methods to Future[ScalaBoundStatement[Out]] like the synchronous counterpart had: (f0d44 Gustavo De Micheli)

Other changes

Update shapeless to 2.3.12

5e46a Scala Steward 2024-05-20 08:25:26

Update mockito-core to 5.12.0

f5ff3 Scala Steward 2024-05-11 17:32:11

Update logback-classic to 1.5.6

546c4 Scala Steward 2024-05-11 10:10:21

Update sbt-scalafix to 0.12.1

7f359 Scala Steward 2024-05-11 10:10:09

Update scalacheck to 1.18.0

b4a90 Scala Steward 2024-05-11 10:09:59

Update scalacheck to 1.17.1

2fe71 Scala Steward 2024-04-19 13:06:41

Update scala-collection-compat to 2.12.0

725b3 Scala Steward 2024-04-19 12:54:52

Update logback-classic to 1.5.5

a1805 Scala Steward 2024-04-14 09:34:43

Update slf4j-api to 2.0.13

43062 Scala Steward 2024-04-14 09:34:23

Update scalafmt-core to 3.8.1

eaceb Scala Steward 2024-04-10 12:54:39

Update logback-classic to 1.5.4

0037c Scala Steward 2024-04-10 12:54:23

Update scalafmt-core to 3.8.0

1a034 Scala Steward 2024-03-01 16:10:53