/* Copyright 2026. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package registry var bootstrapStatements = []string{ `CREATE SCHEMA IF NOT EXISTS postgresql_tenant_operator`, `CREATE TABLE IF NOT EXISTS postgresql_tenant_operator.schema_version ( singleton boolean PRIMARY KEY DEFAULT true CHECK (singleton), version integer NOT NULL )`, `INSERT INTO postgresql_tenant_operator.schema_version (singleton, version) VALUES (true, 1) ON CONFLICT (singleton) DO NOTHING`, `CREATE TABLE IF NOT EXISTS postgresql_tenant_operator.tenant_ownership ( instance_uid text NOT NULL, tenant_uid text NOT NULL, tenant_namespace text NOT NULL, tenant_name text NOT NULL, database_name text NOT NULL, role_name text NOT NULL, credential_path text NOT NULL, managed boolean NOT NULL DEFAULT true, created_at timestamptz NOT NULL DEFAULT clock_timestamp(), updated_at timestamptz NOT NULL DEFAULT clock_timestamp(), retained_at timestamptz, PRIMARY KEY (instance_uid, tenant_uid), UNIQUE (instance_uid, tenant_namespace, tenant_name), UNIQUE (instance_uid, database_name), UNIQUE (instance_uid, role_name), UNIQUE (credential_path), CHECK (managed OR retained_at IS NOT NULL) )`, } const claimStatement = ` INSERT INTO postgresql_tenant_operator.tenant_ownership ( instance_uid, tenant_uid, tenant_namespace, tenant_name, database_name, role_name, credential_path ) VALUES ($1, $2, $3, $4, $5, $6, $7) ON CONFLICT DO NOTHING` const getByTenantUIDStatement = ` SELECT instance_uid, tenant_uid, tenant_namespace, tenant_name, database_name, role_name, credential_path, managed, created_at, updated_at, retained_at FROM postgresql_tenant_operator.tenant_ownership WHERE instance_uid = $1 AND tenant_uid = $2` const getByTenantUIDForUpdateStatement = getByTenantUIDStatement + ` FOR UPDATE` const markRetainedStatement = ` UPDATE postgresql_tenant_operator.tenant_ownership SET managed = false, retained_at = clock_timestamp(), updated_at = clock_timestamp() WHERE instance_uid = $1 AND tenant_uid = $2 AND managed = true` const deleteStatement = ` DELETE FROM postgresql_tenant_operator.tenant_ownership WHERE instance_uid = $1 AND tenant_uid = $2 AND managed = true`