Skip to content

Commit 9e36095

Browse files
committed
refactor(appengine): port Device.insert_alias to exandra
the insert was left as-is, while for the update Repo.to_sql was used Signed-off-by: Francesco Noacco <francesco.noacco@secomind.com>
1 parent 8e5e566 commit 9e36095

File tree

1 file changed

+17
-36
lines changed
  • apps/astarte_appengine_api/lib/astarte_appengine_api/device

1 file changed

+17
-36
lines changed

apps/astarte_appengine_api/lib/astarte_appengine_api/device/queries.ex

Lines changed: 17 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -597,46 +597,35 @@ defmodule Astarte.AppEngine.API.Device.Queries do
597597
end
598598

599599
def insert_alias(realm_name, client, device_id, alias_tag, alias_value) do
600+
keyspace = keyspace_name(realm_name)
601+
names_table = Name.__schema__(:source)
602+
600603
insert_alias_to_names_statement = """
601-
INSERT INTO names
604+
INSERT INTO #{keyspace}.#{names_table}
602605
(object_name, object_type, object_uuid)
603-
VALUES (:alias, 1, :device_id)
606+
VALUES (?, 1, ?)
604607
"""
605608

606-
insert_alias_to_names_query =
607-
DatabaseQuery.new()
608-
|> DatabaseQuery.statement(insert_alias_to_names_statement)
609-
|> DatabaseQuery.put(:alias, alias_value)
610-
|> DatabaseQuery.put(:device_id, device_id)
611-
|> DatabaseQuery.consistency(:each_quorum)
612-
|> DatabaseQuery.convert()
609+
insert_alias_to_names_params = [alias_value, device_id]
610+
insert_alias_to_names_query = {insert_alias_to_names_statement, insert_alias_to_names_params}
613611

614-
insert_alias_to_device_statement = """
615-
UPDATE devices
616-
SET aliases[:alias_tag] = :alias
617-
WHERE device_id = :device_id
618-
"""
612+
new_alias = %{alias_tag => alias_value}
619613

620-
insert_alias_to_device_query =
621-
DatabaseQuery.new()
622-
|> DatabaseQuery.statement(insert_alias_to_device_statement)
623-
|> DatabaseQuery.put(:alias_tag, alias_tag)
624-
|> DatabaseQuery.put(:alias, alias_value)
625-
|> DatabaseQuery.put(:device_id, device_id)
626-
|> DatabaseQuery.consistency(:each_quorum)
627-
|> DatabaseQuery.convert()
614+
insert_alias_to_device =
615+
from DatabaseDevice,
616+
prefix: ^keyspace,
617+
where: [device_id: ^device_id],
618+
update: [set: [aliases: fragment("aliases + ?", ^new_alias)]]
619+
620+
insert_alias_to_device_query = Repo.to_sql(:update_all, insert_alias_to_device)
628621

629622
insert_batch =
630-
CQEx.cql_query_batch(
631-
consistency: :each_quorum,
632-
mode: :logged,
633-
queries: [insert_alias_to_names_query, insert_alias_to_device_query]
634-
)
623+
%Exandra.Batch{queries: [insert_alias_to_names_query, insert_alias_to_device_query]}
635624

636625
with {:existing, {:error, :device_not_found}} <-
637626
{:existing, device_alias_to_device_id(realm_name, alias_value)},
638627
:ok <- try_delete_alias(realm_name, client, device_id, alias_tag),
639-
{:ok, _result} <- DatabaseQuery.call(client, insert_batch) do
628+
:ok <- Exandra.execute_batch(Repo, insert_batch, consistency: :each_quorum) do
640629
:ok
641630
else
642631
{:existing, {:ok, _device_uuid}} ->
@@ -647,14 +636,6 @@ defmodule Astarte.AppEngine.API.Device.Queries do
647636

648637
{:error, :device_not_found} ->
649638
{:error, :device_not_found}
650-
651-
%{acc: _, msg: error_message} ->
652-
_ = Logger.warning("Database error: #{error_message}.", tag: "db_error")
653-
{:error, :database_error}
654-
655-
{:error, reason} ->
656-
_ = Logger.warning("Database error, reason: #{inspect(reason)}.", tag: "db_error")
657-
{:error, :database_error}
658639
end
659640
end
660641

0 commit comments

Comments
 (0)