pub(super) const CREATE_SQL: &str = "
CREATE TABLE IF NOT EXISTS meta (
key TEXT PRIMARY KEY,
value TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS file_state (
path TEXT PRIMARY KEY,
size INTEGER NOT NULL,
mtime_ns INTEGER NOT NULL,
content_hash TEXT NOT NULL,
contents TEXT
);
CREATE TABLE IF NOT EXISTS object_state (
object_key TEXT PRIMARY KEY,
fingerprint TEXT NOT NULL,
-- 'object' or 'skipped'. When 'skipped', every column below is NULL.
kind TEXT NOT NULL,
db_name TEXT,
schema_name TEXT,
file_path TEXT,
stmt_sql TEXT
);
CREATE TABLE IF NOT EXISTS object_state_indexes (
object_key TEXT NOT NULL,
position INTEGER NOT NULL,
sql_text TEXT NOT NULL,
PRIMARY KEY (object_key, position)
);
CREATE TABLE IF NOT EXISTS object_state_grants (
object_key TEXT NOT NULL,
position INTEGER NOT NULL,
sql_text TEXT NOT NULL,
PRIMARY KEY (object_key, position)
);
CREATE TABLE IF NOT EXISTS object_state_comments (
object_key TEXT NOT NULL,
position INTEGER NOT NULL,
sql_text TEXT NOT NULL,
PRIMARY KEY (object_key, position)
);
CREATE TABLE IF NOT EXISTS object_state_tests (
object_key TEXT NOT NULL,
position INTEGER NOT NULL,
sql_text TEXT NOT NULL,
PRIMARY KEY (object_key, position)
);
CREATE TABLE IF NOT EXISTS typecheck_objects (
object_key TEXT PRIMARY KEY,
object_kind TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS typecheck_columns (
object_key TEXT NOT NULL,
column_name TEXT NOT NULL,
column_type TEXT NOT NULL,
nullable INTEGER NOT NULL,
position INTEGER NOT NULL,
PRIMARY KEY (object_key, column_name),
FOREIGN KEY (object_key) REFERENCES typecheck_objects(object_key)
);
CREATE TABLE IF NOT EXISTS external_type_digest (
object_key TEXT PRIMARY KEY,
digest TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS project_databases (
name TEXT PRIMARY KEY
);
CREATE TABLE IF NOT EXISTS project_schemas (
database TEXT NOT NULL,
name TEXT NOT NULL,
schema_type TEXT NOT NULL,
PRIMARY KEY (database, name)
);
CREATE TABLE IF NOT EXISTS project_objects (
object_key TEXT PRIMARY KEY,
database TEXT NOT NULL,
schema TEXT NOT NULL,
name TEXT NOT NULL,
object_kind TEXT NOT NULL,
cluster TEXT,
file_path TEXT NOT NULL,
sql_text TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_project_objects_file_path
ON project_objects(file_path);
CREATE INDEX IF NOT EXISTS idx_project_objects_db_schema
ON project_objects(database, schema);
CREATE TABLE IF NOT EXISTS project_dependencies (
object_key TEXT NOT NULL,
dependency_key TEXT NOT NULL,
PRIMARY KEY (object_key, dependency_key)
);
CREATE INDEX IF NOT EXISTS idx_project_dependencies_dependency_key
ON project_dependencies(dependency_key);
CREATE TABLE IF NOT EXISTS project_external_dependencies (
object_key TEXT NOT NULL PRIMARY KEY
);
CREATE TABLE IF NOT EXISTS project_cluster_dependencies (
cluster_name TEXT NOT NULL PRIMARY KEY
);
CREATE TABLE IF NOT EXISTS project_replacement_schemas (
database TEXT NOT NULL,
schema TEXT NOT NULL,
PRIMARY KEY (database, schema)
);
CREATE TABLE IF NOT EXISTS project_comments (
object_key TEXT NOT NULL,
comment_type TEXT NOT NULL,
target_column TEXT,
comment_text TEXT NOT NULL,
sql_text TEXT NOT NULL,
PRIMARY KEY (object_key, comment_type, target_column)
);
CREATE TABLE IF NOT EXISTS project_indexes (
object_key TEXT NOT NULL,
index_name TEXT,
cluster TEXT,
columns TEXT NOT NULL,
sql_text TEXT NOT NULL,
PRIMARY KEY (object_key, index_name)
);
CREATE TABLE IF NOT EXISTS project_grants (
object_key TEXT NOT NULL,
privilege TEXT NOT NULL,
grantee TEXT NOT NULL,
sql_text TEXT NOT NULL,
PRIMARY KEY (object_key, privilege, grantee)
);
CREATE TABLE IF NOT EXISTS project_tests (
object_key TEXT NOT NULL,
test_name TEXT NOT NULL,
sql_text TEXT NOT NULL,
PRIMARY KEY (object_key, test_name)
);
CREATE TABLE IF NOT EXISTS project_infrastructure (
object_key TEXT NOT NULL PRIMARY KEY,
infra_type TEXT NOT NULL,
connector_type TEXT,
connection_ref TEXT,
source_ref TEXT,
external_reference TEXT
);
CREATE TABLE IF NOT EXISTS project_infrastructure_properties (
object_key TEXT NOT NULL,
property_key TEXT NOT NULL,
property_value TEXT NOT NULL,
secret_ref TEXT,
object_ref TEXT,
PRIMARY KEY (object_key, property_key)
);
CREATE TABLE IF NOT EXISTS project_aliases (
object_key TEXT NOT NULL,
alias TEXT NOT NULL,
target_fqn TEXT NOT NULL,
PRIMARY KEY (object_key, alias)
);
CREATE TABLE IF NOT EXISTS project_mod_statements (
database TEXT NOT NULL,
schema TEXT,
position INTEGER NOT NULL,
sql_text TEXT NOT NULL,
PRIMARY KEY (database, schema, position)
);
";