CQL schema generation helpers for ScyllaDB.
This module generates raw CQL DDL statements (CREATE TABLE, CREATE INDEX, CREATE TYPE, etc.) from Ash resource definitions. It is NOT an Ecto SQL migration runner — CQL has no transactional DDL concept.
These helpers return CQL strings that you execute via Ecto.Migration.execute/1
in your migration modules, or directly through your repo at runtime.
Example Migration
defmodule MyApp.Repo.Migrations.CreateUsers do
use Ecto.Migration
def change do
AshScylla.Migration.create_table_cql(MyApp.User)
|> then(&execute/1)
end
endImportant Note on create_table_cql/1
This function reads compile-time module attributes set by the Ash resource DSL.
For runtime use, prefer Ash.Resource.Info.attributes/1 combined with
AshScylla.DataLayer.Dsl.table/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.
Returns a raw CQL string. Execute it in a migration via Ecto.Migration.execute/1
or directly through your repo at runtime.
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.