defmodule Immudb.Database do
use Immudb.Grpc, :schema
alias Immudb.Util
alias Immudb.Socket
@spec create_database(Socket.t(), binary()) ::
{:error, String.t() | atom()} | {:ok, nil}
def create_database(%Socket{channel: %GRPC.Channel{} = channel, token: token}, database_name) do
channel
|> Stub.create_database(Schema.Database.new(databaseName: database_name),
metadata: token |> Util.metadata()
)
|> case do
{:ok, v} ->
{:ok, v}
{:error, %GRPC.RPCError{message: message}} ->
{:error, message}
_ ->
{:error, :unknown}
end
end
def create_database(_, _) do
{:error, :invalid_params}
end
@spec list_databases(Socket.t()) ::
{:error, String.t() | atom()} | {:ok, nil}
def list_databases(%Socket{channel: %GRPC.Channel{} = channel, token: token}) do
channel
|> Stub.database_list(Protobuf.Empty.new(), metadata: token |> Util.metadata())
|> case do
{:ok, v} ->
{:ok, v}
{:error, %GRPC.RPCError{message: message}} ->
{:error, message}
_ ->
{:error, :unknown}
end
end
def list_database(_) do
{:error, :invalid_params}
end
@spec use_database(Socket.t(), database_name: String.t()) ::
{:error, String.t()} | {:ok, String.t()}
def use_database(%Socket{channel: %GRPC.Channel{} = channel, token: token}, database_name) do
channel
|> Stub.use_database(Schema.Database.new(databaseName: database_name),
metadata: token |> Util.metadata()
)
|> case do
{:error, %GRPC.RPCError{message: message}} ->
{:error, message}
{:ok, %{token: token}} ->
{:ok, token}
_ ->
{:error, :unknown}
end
end
def use_database(_, _) do
{:error, :invalid_params}
end
@spec compact_index(Socket.t()) ::
{:error, String.t()} | {:ok, nil}
def compact_index(%Socket{channel: %GRPC.Channel{} = channel, token: token}) do
channel
|> Stub.compact_index(Protobuf.Empty.new(), metadata: token |> Util.metadata())
|> case do
{:ok, _} ->
{:ok, nil}
{:error, %GRPC.RPCError{message: message}} ->
{:error, message}
_ ->
{:error, :unknown}
end
end
def compact_index(_, _) do
{:error, :invalid_params}
end
@spec change_permission(Socket.t(),
action: :GRANT | :REVOKE,
username: String.t(),
database: String.t(),
permission: atom()
) ::
{:error, String.t()} | {:ok, nil}
def change_permission(%Socket{channel: %GRPC.Channel{} = channel, token: token},
action: action,
username: username,
database: database,
permission: permission
) do
channel
|> Stub.change_permission(
Schema.ChangePermissionRequest.new(
action: action,
username: username,
database: database,
permission: permission |> Immudb.Schemas.Permission.to_int()
),
metadata: token |> Util.metadata()
)
|> case do
{:ok, _} ->
{:ok, nil}
{:error, %GRPC.RPCError{message: message}} ->
{:error, message}
_ ->
{:error, :unknown}
end
end
def change_permission(_, _) do
{:error, :invalid_params}
end
@spec set_active_user(Socket.t(),
active: boolean(),
username: String.t()
) ::
{:error, String.t()} | {:ok, nil}
def set_active_user(%Socket{channel: %GRPC.Channel{} = channel, token: token},
active: active,
username: username
) do
channel
|> Stub.set_active_user(
Schema.SetActiveUserRequest.new(
active: active,
username: username
),
metadata: token |> Util.metadata()
)
|> case do
{:ok, _} ->
{:ok, nil}
{:error, %GRPC.RPCError{message: message}} ->
{:error, message}
_ ->
{:error, :unknown}
end
end
def set_active_user(_, _) do
{:error, :invalid_params}
end
end