Skip to main content

mz_deploy/project/compiler/cache/
schema.rs

1// Copyright Materialize, Inc. and contributors. All rights reserved.
2//
3// Use of this software is governed by the Business Source License
4// included in the LICENSE file.
5//
6// As of the Change Date specified in that file, in accordance with
7// the Business Source License, use of this software will be governed
8// by the Apache License, Version 2.0.
9
10//! Schema for the compiler cache database.
11//!
12//! All cached state is advisory. On schema-version mismatch every table is
13//! dropped and recreated from [`CREATE_SQL`] — safe because nothing here is
14//! authoritative.
15
16pub(super) const SCHEMA_VERSION: i64 = 11;
17
18pub(super) const DROP_SQL: &str = "
19    DROP TABLE IF EXISTS meta;
20    DROP TABLE IF EXISTS file_state;
21    DROP TABLE IF EXISTS object_state;
22    DROP TABLE IF EXISTS object_state_indexes;
23    DROP TABLE IF EXISTS object_state_grants;
24    DROP TABLE IF EXISTS object_state_comments;
25    DROP TABLE IF EXISTS object_state_tests;
26    DROP TABLE IF EXISTS typecheck_state;
27    DROP TABLE IF EXISTS typecheck_columns;
28    DROP TABLE IF EXISTS typecheck_objects;
29    DROP TABLE IF EXISTS external_type_digest;
30    DROP TABLE IF EXISTS project_aliases;
31    DROP TABLE IF EXISTS project_databases;
32    DROP TABLE IF EXISTS project_schemas;
33    DROP TABLE IF EXISTS project_objects;
34    DROP TABLE IF EXISTS project_dependencies;
35    DROP TABLE IF EXISTS project_external_dependencies;
36    DROP TABLE IF EXISTS project_cluster_dependencies;
37    DROP TABLE IF EXISTS project_replacement_schemas;
38    DROP TABLE IF EXISTS project_comments;
39    DROP TABLE IF EXISTS project_indexes;
40    DROP TABLE IF EXISTS project_grants;
41    DROP TABLE IF EXISTS project_tests;
42    DROP TABLE IF EXISTS project_infrastructure;
43    DROP TABLE IF EXISTS project_infrastructure_properties;
44    DROP TABLE IF EXISTS project_mod_statements;
45";
46
47pub(super) const CREATE_SQL: &str = "
48    CREATE TABLE IF NOT EXISTS meta (
49        key TEXT PRIMARY KEY,
50        value TEXT NOT NULL
51    );
52    CREATE TABLE IF NOT EXISTS file_state (
53        path TEXT PRIMARY KEY,
54        size INTEGER NOT NULL,
55        mtime_ns INTEGER NOT NULL,
56        content_hash TEXT NOT NULL,
57        contents TEXT
58    );
59    CREATE TABLE IF NOT EXISTS object_state (
60        object_key TEXT PRIMARY KEY,
61        fingerprint TEXT NOT NULL,
62        -- 'object' or 'skipped'. When 'skipped', every column below is NULL.
63        kind TEXT NOT NULL,
64        db_name TEXT,
65        schema_name TEXT,
66        file_path TEXT,
67        stmt_sql TEXT
68    );
69    CREATE TABLE IF NOT EXISTS object_state_indexes (
70        object_key TEXT NOT NULL,
71        position INTEGER NOT NULL,
72        sql_text TEXT NOT NULL,
73        PRIMARY KEY (object_key, position)
74    );
75    CREATE TABLE IF NOT EXISTS object_state_grants (
76        object_key TEXT NOT NULL,
77        position INTEGER NOT NULL,
78        sql_text TEXT NOT NULL,
79        PRIMARY KEY (object_key, position)
80    );
81    CREATE TABLE IF NOT EXISTS object_state_comments (
82        object_key TEXT NOT NULL,
83        position INTEGER NOT NULL,
84        sql_text TEXT NOT NULL,
85        PRIMARY KEY (object_key, position)
86    );
87    CREATE TABLE IF NOT EXISTS object_state_tests (
88        object_key TEXT NOT NULL,
89        position INTEGER NOT NULL,
90        sql_text TEXT NOT NULL,
91        PRIMARY KEY (object_key, position)
92    );
93    CREATE TABLE IF NOT EXISTS typecheck_objects (
94        object_key TEXT PRIMARY KEY,
95        object_kind TEXT NOT NULL
96    );
97    CREATE TABLE IF NOT EXISTS typecheck_columns (
98        object_key TEXT NOT NULL,
99        column_name TEXT NOT NULL,
100        column_type TEXT NOT NULL,
101        nullable INTEGER NOT NULL,
102        position INTEGER NOT NULL,
103        PRIMARY KEY (object_key, column_name),
104        FOREIGN KEY (object_key) REFERENCES typecheck_objects(object_key)
105    );
106    CREATE TABLE IF NOT EXISTS external_type_digest (
107        object_key TEXT PRIMARY KEY,
108        digest TEXT NOT NULL
109    );
110    CREATE TABLE IF NOT EXISTS project_databases (
111        name TEXT PRIMARY KEY
112    );
113    CREATE TABLE IF NOT EXISTS project_schemas (
114        database TEXT NOT NULL,
115        name TEXT NOT NULL,
116        schema_type TEXT NOT NULL,
117        PRIMARY KEY (database, name)
118    );
119    CREATE TABLE IF NOT EXISTS project_objects (
120        object_key TEXT PRIMARY KEY,
121        database TEXT NOT NULL,
122        schema TEXT NOT NULL,
123        name TEXT NOT NULL,
124        object_kind TEXT NOT NULL,
125        cluster TEXT,
126        file_path TEXT NOT NULL,
127        sql_text TEXT NOT NULL
128    );
129    CREATE INDEX IF NOT EXISTS idx_project_objects_file_path
130        ON project_objects(file_path);
131    CREATE INDEX IF NOT EXISTS idx_project_objects_db_schema
132        ON project_objects(database, schema);
133    CREATE TABLE IF NOT EXISTS project_dependencies (
134        object_key TEXT NOT NULL,
135        dependency_key TEXT NOT NULL,
136        PRIMARY KEY (object_key, dependency_key)
137    );
138    CREATE INDEX IF NOT EXISTS idx_project_dependencies_dependency_key
139        ON project_dependencies(dependency_key);
140    CREATE TABLE IF NOT EXISTS project_external_dependencies (
141        object_key TEXT NOT NULL PRIMARY KEY
142    );
143    CREATE TABLE IF NOT EXISTS project_cluster_dependencies (
144        cluster_name TEXT NOT NULL PRIMARY KEY
145    );
146    CREATE TABLE IF NOT EXISTS project_replacement_schemas (
147        database TEXT NOT NULL,
148        schema TEXT NOT NULL,
149        PRIMARY KEY (database, schema)
150    );
151    CREATE TABLE IF NOT EXISTS project_comments (
152        object_key TEXT NOT NULL,
153        comment_type TEXT NOT NULL,
154        target_column TEXT,
155        comment_text TEXT NOT NULL,
156        sql_text TEXT NOT NULL,
157        PRIMARY KEY (object_key, comment_type, target_column)
158    );
159    CREATE TABLE IF NOT EXISTS project_indexes (
160        object_key TEXT NOT NULL,
161        index_name TEXT,
162        cluster TEXT,
163        columns TEXT NOT NULL,
164        sql_text TEXT NOT NULL,
165        PRIMARY KEY (object_key, index_name)
166    );
167    CREATE TABLE IF NOT EXISTS project_grants (
168        object_key TEXT NOT NULL,
169        privilege TEXT NOT NULL,
170        grantee TEXT NOT NULL,
171        sql_text TEXT NOT NULL,
172        PRIMARY KEY (object_key, privilege, grantee)
173    );
174    CREATE TABLE IF NOT EXISTS project_tests (
175        object_key TEXT NOT NULL,
176        test_name TEXT NOT NULL,
177        sql_text TEXT NOT NULL,
178        PRIMARY KEY (object_key, test_name)
179    );
180    CREATE TABLE IF NOT EXISTS project_infrastructure (
181        object_key TEXT NOT NULL PRIMARY KEY,
182        infra_type TEXT NOT NULL,
183        connector_type TEXT,
184        connection_ref TEXT,
185        source_ref TEXT,
186        external_reference TEXT
187    );
188    CREATE TABLE IF NOT EXISTS project_infrastructure_properties (
189        object_key TEXT NOT NULL,
190        property_key TEXT NOT NULL,
191        property_value TEXT NOT NULL,
192        secret_ref TEXT,
193        object_ref TEXT,
194        PRIMARY KEY (object_key, property_key)
195    );
196    CREATE TABLE IF NOT EXISTS project_aliases (
197        object_key TEXT NOT NULL,
198        alias TEXT NOT NULL,
199        target_fqn TEXT NOT NULL,
200        PRIMARY KEY (object_key, alias)
201    );
202    CREATE TABLE IF NOT EXISTS project_mod_statements (
203        database TEXT NOT NULL,
204        schema TEXT,
205        position INTEGER NOT NULL,
206        sql_text TEXT NOT NULL,
207        PRIMARY KEY (database, schema, position)
208    );
209";