Helpers for working with ScyllaDB migrations using Exandra.
This module provides utilities to help generate CQL statements for ScyllaDB tables based on Ash resource definitions.
Note: For actual migrations, use Exandra with Ecto.Migration directly. See the Exandra documentation for more details on writing migrations.
Example Migration
defmodule MyApp.Repo.Migrations.CreateUsers do
use Ecto.Migration
def change do
execute "CREATE TABLE users (id UUID PRIMARY KEY, name TEXT, email TEXT)"
end
endImportant Note on create_table_cql/1
This function reads compile-time module attributes (:table, :attributes)
set by the Ash resource DSL. It is intended to be called at compile time
within a migration module (e.g., inside a defmacro or at the module top level).
It will not work correctly at runtime when called with a resource module that
has already been compiled, because Module.get_attribute/2 only works during
compilation of that module.
For runtime use, prefer passing explicit parameters or use the AshScylla DSL
getter functions (AshScylla.DataLayer.Dsl.table/1) combined with
Ash.Resource.Info.attributes/1.
Summary
Functions
Generates CQL CREATE INDEX statements for secondary indexes.
Generates a CQL CREATE TABLE statement for an Ash resource.
Define a User Defined Type (UDT) in ScyllaDB.
Generates a CQL DROP INDEX statement for a secondary index.
Drop a User Defined Type (UDT) in ScyllaDB.
Returns the keyspace for a resource if configured via DSL. Note: This is a placeholder for future DSL implementation.
Functions
Generates CQL CREATE INDEX statements for secondary indexes.
Returns a list of CQL strings that should be executed in migrations.
Example
defmodule MyApp.Repo.Migrations.CreateUserIndexes do
use Ecto.Migration
def change do
AshScylla.Migration.create_secondary_indexes_cql(MyApp.User)
|> Enum.each(&execute/1)
end
end
Generates a CQL CREATE TABLE statement for an Ash resource.
Important: This function reads compile-time module attributes (:table, :attributes)
and must be called during the resource module's compilation. For runtime use,
build the CQL explicitly or use Ash.Resource.Info.attributes/1 combined with
AshScylla.DataLayer.Dsl.table/1.
Note: This is a helper that returns a CQL string.
You need to execute this in an Ecto migration using execute/1.
Define a User Defined Type (UDT) in ScyllaDB.
Example
create_type "full_name" do
field :first_name, :text
field :last_name, :text
endThis generates:
CREATE TYPE full_name (first_name TEXT, last_name TEXT)
Generates a CQL DROP INDEX statement for a secondary index.
Drop a User Defined Type (UDT) in ScyllaDB.
Returns the keyspace for a resource if configured via DSL. Note: This is a placeholder for future DSL implementation.