Files
qinglong/packages/ql3-local-sqlite/src/migrations/0079-plugin-package-automation-publications.ts
T

163 lines
6.9 KiB
TypeScript

import { defineLocalSqliteMigration } from './sqlMigration';
export const local0079PluginPackageAutomationPublicationsMigration =
defineLocalSqliteMigration({
id: '0079-plugin-package-automation-publications',
statements: [
`
CREATE TABLE "QingLong3PluginPackageAutomationPublications" (
publication_digest TEXT PRIMARY KEY NOT NULL,
project_id TEXT NOT NULL,
package_name TEXT NOT NULL,
installation_id TEXT NOT NULL,
lock_digest TEXT NOT NULL,
generation INTEGER NOT NULL,
generation_digest TEXT NOT NULL,
materialized_revision_digest TEXT NOT NULL,
state TEXT NOT NULL,
version INTEGER NOT NULL,
previous_publication_digest TEXT,
lifecycle_event_digest TEXT,
published_at_ms INTEGER NOT NULL,
publication_json TEXT NOT NULL,
CONSTRAINT ql3_plugin_package_automation_publication_revision_fk
FOREIGN KEY (generation_digest)
REFERENCES "QingLong3PluginPackageMaterializedRevisions" (
generation_digest
) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT ql3_plugin_package_automation_publication_previous_fk
FOREIGN KEY (previous_publication_digest)
REFERENCES "QingLong3PluginPackageAutomationPublications" (
publication_digest
) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT ql3_plugin_package_automation_publication_lifecycle_fk
FOREIGN KEY (lifecycle_event_digest)
REFERENCES "QingLong3PluginPackageLifecycleEvents" (event_digest)
ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT ql3_plugin_package_automation_publication_identity_check CHECK (
length(project_id) BETWEEN 1 AND 128 AND
length(package_name) BETWEEN 1 AND 63 AND
length(installation_id) BETWEEN 1 AND 128 AND
generation BETWEEN 1 AND 2147483647 AND
state IN ('active','withdrawn','absent') AND
version BETWEEN 1 AND 2147483647 AND
published_at_ms >= 0 AND
(
version = 1 AND state IN ('active','absent') AND
previous_publication_digest IS NULL AND
lifecycle_event_digest IS NULL
OR
version > 1 AND previous_publication_digest IS NOT NULL
) AND
(state <> 'withdrawn' OR lifecycle_event_digest IS NOT NULL)
),
CONSTRAINT ql3_plugin_package_automation_publication_digest_check CHECK (
length(publication_digest) = 64 AND
publication_digest NOT GLOB '*[^0-9a-f]*' AND
length(lock_digest) = 64 AND
lock_digest NOT GLOB '*[^0-9a-f]*' AND
length(generation_digest) = 64 AND
generation_digest NOT GLOB '*[^0-9a-f]*' AND
length(materialized_revision_digest) = 64 AND
materialized_revision_digest NOT GLOB '*[^0-9a-f]*' AND
(
previous_publication_digest IS NULL OR
length(previous_publication_digest) = 64 AND
previous_publication_digest NOT GLOB '*[^0-9a-f]*'
) AND
(
lifecycle_event_digest IS NULL OR
length(lifecycle_event_digest) = 64 AND
lifecycle_event_digest NOT GLOB '*[^0-9a-f]*'
)
),
CONSTRAINT ql3_plugin_package_automation_publication_json_check CHECK (
length(CAST(publication_json AS BLOB)) BETWEEN 2 AND 12582912 AND
json_valid(publication_json) AND
json_type(publication_json) = 'object' AND
json_extract(publication_json, '$.schema') =
'qinglong/plugin-package-automation-publication@v1' AND
json_extract(publication_json, '$.target.projectId') = project_id AND
json_extract(publication_json, '$.target.packageName') = package_name AND
json_extract(publication_json, '$.target.installationId') =
installation_id AND
json_extract(publication_json, '$.target.lockDigest') = lock_digest AND
json_extract(publication_json, '$.target.generation') = generation AND
json_extract(publication_json, '$.target.generationDigest') =
generation_digest AND
json_extract(publication_json, '$.target.materializedRevisionDigest') =
materialized_revision_digest AND
json_extract(publication_json, '$.state') = state AND
json_extract(publication_json, '$.version') = version AND
(
previous_publication_digest IS NULL AND
json_type(publication_json, '$.previousPublicationDigest') = 'null'
OR
json_extract(publication_json, '$.previousPublicationDigest') =
previous_publication_digest
) AND
(
lifecycle_event_digest IS NULL AND
json_type(publication_json, '$.lifecycleEventDigest') = 'null'
OR
json_extract(publication_json, '$.lifecycleEventDigest') =
lifecycle_event_digest
) AND
json_extract(publication_json, '$.publishedAtMs') = published_at_ms AND
json_extract(publication_json, '$.publicationDigest') =
publication_digest AND
json_type(publication_json, '$.definitions.workflows') = 'array' AND
json_type(publication_json, '$.definitions.prompts') = 'array' AND
(
state = 'absent' AND
json_array_length(
json_extract(publication_json, '$.definitions.workflows')
) + json_array_length(
json_extract(publication_json, '$.definitions.prompts')
) = 0
OR
state <> 'absent' AND
json_array_length(
json_extract(publication_json, '$.definitions.workflows')
) + json_array_length(
json_extract(publication_json, '$.definitions.prompts')
) > 0
)
)
)
`,
`CREATE UNIQUE INDEX ql3_plugin_package_automation_publication_version_uidx ON "QingLong3PluginPackageAutomationPublications" (project_id, package_name, version)`,
`CREATE UNIQUE INDEX ql3_plugin_package_automation_publication_previous_uidx ON "QingLong3PluginPackageAutomationPublications" (previous_publication_digest) WHERE previous_publication_digest IS NOT NULL`,
`CREATE INDEX ql3_plugin_package_automation_publication_generation_idx ON "QingLong3PluginPackageAutomationPublications" (generation_digest, publication_digest)`,
`
CREATE TABLE "QingLong3PluginPackageAutomationPublicationHeads" (
project_id TEXT NOT NULL,
package_name TEXT NOT NULL,
publication_digest TEXT NOT NULL,
generation_digest TEXT NOT NULL,
state TEXT NOT NULL,
version INTEGER NOT NULL,
updated_at_ms INTEGER NOT NULL,
PRIMARY KEY (project_id, package_name),
CONSTRAINT ql3_plugin_package_automation_publication_head_publication_fk
FOREIGN KEY (publication_digest)
REFERENCES "QingLong3PluginPackageAutomationPublications" (
publication_digest
) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT ql3_plugin_package_automation_publication_head_state_check CHECK (
length(project_id) BETWEEN 1 AND 128 AND
length(package_name) BETWEEN 1 AND 63 AND
length(publication_digest) = 64 AND
publication_digest NOT GLOB '*[^0-9a-f]*' AND
length(generation_digest) = 64 AND
generation_digest NOT GLOB '*[^0-9a-f]*' AND
state IN ('active','withdrawn','absent') AND
version BETWEEN 1 AND 2147483647 AND
updated_at_ms >= 0
)
)
`,
`CREATE UNIQUE INDEX ql3_plugin_package_automation_publication_head_digest_uidx ON "QingLong3PluginPackageAutomationPublicationHeads" (publication_digest)`,
],
});