]> Entropealabs - cluster_kv.git/commitdiff
upsert on batch
authorChristopher <chris@entropealabs.com>
Sun, 8 Mar 2020 02:49:45 +0000 (20:49 -0600)
committerChristopher <chris@entropealabs.com>
Sun, 8 Mar 2020 02:49:45 +0000 (20:49 -0600)
lib/cluster_kv/db.ex

index df91ffee49b2f39e6eb9c749d2c3089bcdfc1ffe..3d48b99f207ca88759b3045d0c81f7cec0feadc7 100644 (file)
@@ -27,8 +27,8 @@ defmodule ClusterKV.DB do
     GenServer.cast(name, {:upsert, key, value, fun})
   end
 
-  def batch(name, batch) do
-    GenServer.cast(name, {:batch, batch})
+  def batch(name, batch, fun \\ &{elem(&1, 0), Enum.uniq([&2 | elem(&1, 1)])}) do
+    GenServer.cast(name, {:batch, batch, fun})
   end
 
   def stream(name, timeout \\ :infinity) do
@@ -63,9 +63,9 @@ defmodule ClusterKV.DB do
     {:noreply, state}
   end
 
-  def handle_cast({:batch, batch}, %DB{db: db} = state) do
+  def handle_cast({:batch, batch, fun}, %DB{db: db} = state) do
     Enum.each(batch, fn {k, v} ->
-      :ets.insert(db, {k, [v]})
+      do_upsert(db, k, v, fun)
     end)
 
     {:noreply, state}