View Source Upgrading from v1 to v2

The database format is completely backward compatible, so version v2 of CubDB can load databases created with v1, and vice-versa. Upgrading from v1 to v2 requires a few code changes though, as some functions changed signature.

When calling get_and_update, get_and_update_multi, and select the return value is not a {:ok, result} tuple anymore, but just result.

The function get_and_update_multi does not take a fourth option argument anymore. The only available option was :timeout, which was now removed. In case you want to enforce a timeout for the update function, you can use a Task and Task.yield like explained here.

The select function does not accept the :pipe and :reduce options anymore. Instead, it returns a lazy stream that can be used with functions in the Stream and Enum modules. For example:

# This v1 code:
{:ok, product} =
  CubDB.select(db, [
    min_key: :foo,
    max_key: :bar,
    pipe: [
      map: fn {_, val} -> val end,
      filter: fn val -> val > 0 end
    ],
    reduce: fn val, acc -> val * acc end
  ])

# Can be rewritten to this code in v2:
product =
  CubDB.select(db, min_key: :foo, max_key: :bar)
  |> Stream.map(fn {_, val} -> val end)
  |> Stream.filter(fn val -> val > 0 end)
  |> Enum.reduce(fn val, acc -> val * acc end)

The select function also does not support a :timeout option anymore, so it will be ignored if passed. In order to enforce a timeout, you can wrap the select in a Task and use Task.yield like shown here