Create Schema

SQLiteNow schema files contain the current database shape. Put CREATE TABLE, CREATE INDEX, and CREATE VIEW statements under the database schema/ directory.

lib/db/sql/AppDatabase/schema/
  task.sql

Table Definition

CREATE TABLE task
(
    id           INTEGER PRIMARY KEY NOT NULL,
    title        TEXT                NOT NULL,
    completed    INTEGER             NOT NULL DEFAULT 0,
    created_at   TEXT                NOT NULL
);

CREATE INDEX idx_task_completed ON task (completed);

SQLiteNow uses the schema to infer generated result fields, parameter types, and adapter contracts. A table file does not generate a public model by itself; the models come from query files that read or mutate that schema.

Property Names

Column names are converted to idiomatic generated property names. For example, created_at becomes createdAt.

Use field annotations when a column needs a custom generated name:

CREATE TABLE task
(
    id INTEGER PRIMARY KEY NOT NULL,

    -- @@{ field=display_title, propertyName=title }
    display_title TEXT NOT NULL
);

Custom Types

Use propertyType and adapter=custom when the generated API should expose a domain type instead of the raw SQLite storage type:

CREATE TABLE task
(
    id INTEGER PRIMARY KEY NOT NULL,

    -- @@{ field=status, adapter=custom, propertyType=TaskStatus }
    status TEXT NOT NULL
);

Generated Dart code expects an adapter that converts between the SQLite column value and your Dart type:

final db = AppDatabase(
  path: path,
  taskAdapters: TaskAdapters(
    sqlColumnToStatus: TaskStatus.parse,
    statusToSqlColumn: (status) => status.name,
  ),
);

Keep schema/ files up to date with the latest app version. Existing database upgrades belong in migration/; the schema directory describes what a fresh install should create today.