106 lines
5.6 KiB
SQL
106 lines
5.6 KiB
SQL
-- Migration: Runtime Versions
|
|
-- Description: Adds support for multiple versions of the same runtime (e.g., Python 3.11, 3.12, 3.14).
|
|
-- - New `runtime_version` table to store version-specific execution configurations
|
|
-- - New `runtime_version_constraint` columns on action and sensor tables
|
|
-- Version: 20260226000000
|
|
|
|
-- ============================================================================
|
|
-- RUNTIME VERSION TABLE
|
|
-- ============================================================================
|
|
|
|
CREATE TABLE runtime_version (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
runtime BIGINT NOT NULL REFERENCES runtime(id) ON DELETE CASCADE,
|
|
runtime_ref TEXT NOT NULL,
|
|
|
|
-- Semantic version string (e.g., "3.12.1", "20.11.0")
|
|
version TEXT NOT NULL,
|
|
|
|
-- Individual version components for efficient range queries.
|
|
-- Nullable because some runtimes may use non-numeric versioning.
|
|
version_major INT,
|
|
version_minor INT,
|
|
version_patch INT,
|
|
|
|
-- Complete execution configuration for this specific version.
|
|
-- This is NOT a diff/override — it is a full standalone config that can
|
|
-- replace the parent runtime's execution_config when this version is selected.
|
|
-- Structure is identical to runtime.execution_config (RuntimeExecutionConfig).
|
|
execution_config JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
|
|
-- Version-specific distribution/verification metadata.
|
|
-- Structure mirrors runtime.distributions but with version-specific commands.
|
|
-- Example: verification commands that check for a specific binary like python3.12.
|
|
distributions JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
|
|
-- Whether this version is the default for the parent runtime.
|
|
-- At most one version per runtime should be marked as default.
|
|
is_default BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
-- Whether this version has been verified as available on the current system.
|
|
available BOOLEAN NOT NULL DEFAULT TRUE,
|
|
|
|
-- When this version was last verified (via running verification commands).
|
|
verified_at TIMESTAMPTZ,
|
|
|
|
-- Arbitrary version-specific metadata (e.g., EOL date, release notes URL,
|
|
-- feature flags, platform-specific notes).
|
|
meta JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
|
|
created TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
|
|
-- Constraints
|
|
CONSTRAINT runtime_version_unique UNIQUE(runtime, version)
|
|
);
|
|
|
|
-- Indexes
|
|
CREATE INDEX idx_runtime_version_runtime ON runtime_version(runtime);
|
|
CREATE INDEX idx_runtime_version_runtime_ref ON runtime_version(runtime_ref);
|
|
CREATE INDEX idx_runtime_version_version ON runtime_version(version);
|
|
CREATE INDEX idx_runtime_version_available ON runtime_version(available) WHERE available = TRUE;
|
|
CREATE INDEX idx_runtime_version_is_default ON runtime_version(is_default) WHERE is_default = TRUE;
|
|
CREATE INDEX idx_runtime_version_components ON runtime_version(runtime, version_major, version_minor, version_patch);
|
|
CREATE INDEX idx_runtime_version_created ON runtime_version(created DESC);
|
|
CREATE INDEX idx_runtime_version_execution_config ON runtime_version USING GIN (execution_config);
|
|
CREATE INDEX idx_runtime_version_meta ON runtime_version USING GIN (meta);
|
|
|
|
-- Trigger
|
|
CREATE TRIGGER update_runtime_version_updated
|
|
BEFORE UPDATE ON runtime_version
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_column();
|
|
|
|
-- Comments
|
|
COMMENT ON TABLE runtime_version IS 'Specific versions of a runtime (e.g., Python 3.11, 3.12) with version-specific execution configuration';
|
|
COMMENT ON COLUMN runtime_version.runtime IS 'Parent runtime this version belongs to';
|
|
COMMENT ON COLUMN runtime_version.runtime_ref IS 'Parent runtime ref (e.g., core.python) for display/filtering';
|
|
COMMENT ON COLUMN runtime_version.version IS 'Semantic version string (e.g., "3.12.1", "20.11.0")';
|
|
COMMENT ON COLUMN runtime_version.version_major IS 'Major version component for efficient range queries';
|
|
COMMENT ON COLUMN runtime_version.version_minor IS 'Minor version component for efficient range queries';
|
|
COMMENT ON COLUMN runtime_version.version_patch IS 'Patch version component for efficient range queries';
|
|
COMMENT ON COLUMN runtime_version.execution_config IS 'Complete execution configuration for this version (same structure as runtime.execution_config)';
|
|
COMMENT ON COLUMN runtime_version.distributions IS 'Version-specific distribution/verification metadata';
|
|
COMMENT ON COLUMN runtime_version.is_default IS 'Whether this is the default version for the parent runtime (at most one per runtime)';
|
|
COMMENT ON COLUMN runtime_version.available IS 'Whether this version has been verified as available on the system';
|
|
COMMENT ON COLUMN runtime_version.verified_at IS 'Timestamp of last availability verification';
|
|
COMMENT ON COLUMN runtime_version.meta IS 'Arbitrary version-specific metadata';
|
|
|
|
-- ============================================================================
|
|
-- ACTION TABLE: ADD RUNTIME VERSION CONSTRAINT
|
|
-- ============================================================================
|
|
|
|
ALTER TABLE action
|
|
ADD COLUMN runtime_version_constraint TEXT;
|
|
|
|
COMMENT ON COLUMN action.runtime_version_constraint IS 'Semver version constraint for the runtime (e.g., ">=3.12", ">=3.12,<4.0", "~18.0"). NULL means any version.';
|
|
|
|
-- ============================================================================
|
|
-- SENSOR TABLE: ADD RUNTIME VERSION CONSTRAINT
|
|
-- ============================================================================
|
|
|
|
ALTER TABLE sensor
|
|
ADD COLUMN runtime_version_constraint TEXT;
|
|
|
|
COMMENT ON COLUMN sensor.runtime_version_constraint IS 'Semver version constraint for the runtime (e.g., ">=3.12", ">=3.12,<4.0", "~18.0"). NULL means any version.';
|