342 lines
13 KiB
SQL
342 lines
13 KiB
SQL
SET XACT_ABORT ON;
|
|
BEGIN TRANSACTION;
|
|
|
|
IF OBJECT_ID('dbo.wcs_control_lease', 'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.wcs_control_lease (
|
|
lease_name varchar(64) NOT NULL PRIMARY KEY,
|
|
owner_id varchar(128) NULL,
|
|
fencing_token bigint NOT NULL,
|
|
lease_until datetime2(3) NULL,
|
|
state_version bigint NOT NULL,
|
|
CONSTRAINT ck_wcs_control_lease_fencing CHECK (fencing_token >= 0),
|
|
CONSTRAINT ck_wcs_control_lease_version CHECK (state_version >= 0)
|
|
);
|
|
END;
|
|
|
|
IF OBJECT_ID('dbo.wcs_device_command', 'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.wcs_device_command (
|
|
command_id varchar(128) NOT NULL PRIMARY KEY,
|
|
command_key varchar(128) NOT NULL,
|
|
order_id varchar(64) NULL,
|
|
step_id varchar(128) NULL,
|
|
device_id varchar(64) NOT NULL,
|
|
command_type varchar(64) NOT NULL,
|
|
payload_json nvarchar(max) NOT NULL,
|
|
transport_attempt int NOT NULL,
|
|
command_state varchar(32) NOT NULL,
|
|
send_receipt_id varchar(128) NULL,
|
|
acknowledge_evidence_id varchar(128) NULL,
|
|
completion_evidence_id varchar(128) NULL,
|
|
status_reason nvarchar(512) NULL,
|
|
created_time datetime2(3) NOT NULL,
|
|
updated_time datetime2(3) NOT NULL,
|
|
state_version bigint NOT NULL,
|
|
CONSTRAINT uk_wcs_device_command_key UNIQUE (command_key),
|
|
CONSTRAINT ck_wcs_device_command_attempt CHECK (transport_attempt >= 0),
|
|
CONSTRAINT ck_wcs_device_command_version CHECK (state_version >= 0)
|
|
);
|
|
END;
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.wcs_device_command')
|
|
AND name = 'ix_wcs_device_command_device_state')
|
|
BEGIN
|
|
CREATE INDEX ix_wcs_device_command_device_state
|
|
ON dbo.wcs_device_command(device_id, command_state);
|
|
END;
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.wcs_device_command')
|
|
AND name = 'ix_wcs_device_command_order_step')
|
|
BEGIN
|
|
CREATE INDEX ix_wcs_device_command_order_step
|
|
ON dbo.wcs_device_command(order_id, step_id);
|
|
END;
|
|
|
|
IF OBJECT_ID('dbo.wcs_device_execution', 'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.wcs_device_execution (
|
|
command_id varchar(128) NOT NULL PRIMARY KEY,
|
|
command_key varchar(128) NOT NULL,
|
|
device_id varchar(64) NOT NULL,
|
|
task_number varchar(128) NOT NULL,
|
|
route_nodes_json nvarchar(max) NOT NULL,
|
|
route_resources_json nvarchar(max) NOT NULL,
|
|
topology_version bigint NOT NULL,
|
|
fencing_token bigint NOT NULL,
|
|
expected_boot_id varchar(128) NOT NULL,
|
|
current_node_index int NOT NULL,
|
|
released_resource_count int NOT NULL,
|
|
last_device_sequence bigint NOT NULL,
|
|
active_flag bit NOT NULL
|
|
CONSTRAINT df_wcs_device_execution_active DEFAULT (1),
|
|
updated_time datetime2(3) NOT NULL,
|
|
state_version bigint NOT NULL,
|
|
CONSTRAINT fk_wcs_device_execution_command FOREIGN KEY (command_id)
|
|
REFERENCES dbo.wcs_device_command(command_id),
|
|
CONSTRAINT uk_wcs_device_execution_key UNIQUE (command_key),
|
|
CONSTRAINT ck_wcs_device_execution_topology CHECK (topology_version > 0),
|
|
CONSTRAINT ck_wcs_device_execution_fencing CHECK (fencing_token > 0),
|
|
CONSTRAINT ck_wcs_device_execution_indexes CHECK (
|
|
current_node_index >= 0 AND released_resource_count >= 0),
|
|
CONSTRAINT ck_wcs_device_execution_version CHECK (state_version >= 0)
|
|
);
|
|
END;
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.wcs_device_execution')
|
|
AND name = 'uk_wcs_device_execution_active_device')
|
|
BEGIN
|
|
CREATE UNIQUE INDEX uk_wcs_device_execution_active_device
|
|
ON dbo.wcs_device_execution(device_id)
|
|
WHERE active_flag = 1;
|
|
END;
|
|
|
|
IF OBJECT_ID('dbo.wcs_command_outbox', 'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.wcs_command_outbox (
|
|
command_id varchar(128) NOT NULL PRIMARY KEY,
|
|
command_key varchar(128) NOT NULL,
|
|
payload_json nvarchar(max) NOT NULL,
|
|
topology_version bigint NOT NULL,
|
|
fencing_token bigint NOT NULL,
|
|
delivery_state varchar(32) NOT NULL,
|
|
attempt_count int NOT NULL,
|
|
next_attempt_time datetime2(3) NOT NULL,
|
|
claimed_by varchar(128) NULL,
|
|
claimed_time datetime2(3) NULL,
|
|
last_error nvarchar(1024) NULL,
|
|
delivered_time datetime2(3) NULL,
|
|
state_version bigint NOT NULL,
|
|
CONSTRAINT fk_wcs_command_outbox_command FOREIGN KEY (command_id)
|
|
REFERENCES dbo.wcs_device_command(command_id),
|
|
CONSTRAINT uk_wcs_command_outbox_key UNIQUE (command_key),
|
|
CONSTRAINT ck_wcs_command_outbox_attempt CHECK (attempt_count >= 0),
|
|
CONSTRAINT ck_wcs_command_outbox_topology CHECK (topology_version > 0),
|
|
CONSTRAINT ck_wcs_command_outbox_fencing CHECK (fencing_token > 0),
|
|
CONSTRAINT ck_wcs_command_outbox_version CHECK (state_version >= 0)
|
|
);
|
|
END;
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.wcs_command_outbox')
|
|
AND name = 'ix_wcs_command_outbox_due')
|
|
BEGIN
|
|
CREATE INDEX ix_wcs_command_outbox_due
|
|
ON dbo.wcs_command_outbox(delivery_state, next_attempt_time);
|
|
END;
|
|
|
|
IF OBJECT_ID('dbo.wcs_wms_notification_outbox', 'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.wcs_wms_notification_outbox (
|
|
outbox_id bigint IDENTITY(1,1) NOT NULL PRIMARY KEY,
|
|
event_id varchar(128) NOT NULL,
|
|
notification_type varchar(64) NOT NULL,
|
|
payload_json nvarchar(max) NOT NULL,
|
|
delivery_state varchar(32) NOT NULL,
|
|
attempt_count int NOT NULL,
|
|
next_attempt_time datetime2(3) NOT NULL,
|
|
claimed_by varchar(128) NULL,
|
|
claimed_time datetime2(3) NULL,
|
|
external_receipt varchar(256) NULL,
|
|
last_error nvarchar(1024) NULL,
|
|
created_time datetime2(3) NOT NULL,
|
|
delivered_time datetime2(3) NULL,
|
|
state_version bigint NOT NULL,
|
|
CONSTRAINT uk_wcs_wms_outbox_event UNIQUE (event_id),
|
|
CONSTRAINT ck_wcs_wms_outbox_attempt CHECK (attempt_count >= 0),
|
|
CONSTRAINT ck_wcs_wms_outbox_version CHECK (state_version >= 0)
|
|
);
|
|
END;
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.wcs_wms_notification_outbox')
|
|
AND name = 'ix_wcs_wms_outbox_due')
|
|
BEGIN
|
|
CREATE INDEX ix_wcs_wms_outbox_due
|
|
ON dbo.wcs_wms_notification_outbox(
|
|
delivery_state, next_attempt_time);
|
|
END;
|
|
|
|
IF OBJECT_ID('dbo.wcs_device_snapshot', 'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.wcs_device_snapshot (
|
|
snapshot_id varchar(128) NOT NULL PRIMARY KEY,
|
|
device_id varchar(64) NOT NULL,
|
|
command_key varchar(128) NOT NULL,
|
|
task_number varchar(128) NOT NULL,
|
|
device_sequence bigint NOT NULL,
|
|
observed_time datetime2(3) NOT NULL,
|
|
connected_flag bit NOT NULL,
|
|
device_boot_id varchar(128) NOT NULL,
|
|
topology_version bigint NOT NULL,
|
|
fencing_token bigint NOT NULL,
|
|
current_node_id varchar(128) NOT NULL,
|
|
remaining_route_json nvarchar(max) NOT NULL,
|
|
command_completed_flag bit NOT NULL,
|
|
facts_json nvarchar(max) NULL,
|
|
received_time datetime2(3) NOT NULL,
|
|
CONSTRAINT ck_wcs_device_snapshot_sequence CHECK (device_sequence >= 0),
|
|
CONSTRAINT ck_wcs_device_snapshot_topology CHECK (topology_version > 0),
|
|
CONSTRAINT ck_wcs_device_snapshot_fencing CHECK (fencing_token > 0)
|
|
);
|
|
END;
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.wcs_device_snapshot')
|
|
AND name = 'ix_wcs_device_snapshot_device_time')
|
|
BEGIN
|
|
CREATE INDEX ix_wcs_device_snapshot_device_time
|
|
ON dbo.wcs_device_snapshot(device_id, observed_time DESC);
|
|
END;
|
|
|
|
IF OBJECT_ID('dbo.wcs_device_event', 'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.wcs_device_event (
|
|
event_id varchar(128) NOT NULL PRIMARY KEY,
|
|
device_id varchar(64) NOT NULL,
|
|
command_key varchar(128) NOT NULL,
|
|
task_number varchar(128) NOT NULL,
|
|
device_sequence bigint NOT NULL,
|
|
event_type varchar(32) NOT NULL,
|
|
current_node_id varchar(128) NULL,
|
|
remaining_route_json nvarchar(max) NULL,
|
|
facts_json nvarchar(max) NULL,
|
|
device_time datetime2(3) NOT NULL,
|
|
received_time datetime2(3) NOT NULL,
|
|
CONSTRAINT ck_wcs_device_event_sequence CHECK (device_sequence >= 0)
|
|
);
|
|
END;
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.wcs_device_event')
|
|
AND name = 'ix_wcs_device_event_device_sequence')
|
|
BEGIN
|
|
CREATE INDEX ix_wcs_device_event_device_sequence
|
|
ON dbo.wcs_device_event(device_id, device_sequence);
|
|
END;
|
|
|
|
IF OBJECT_ID('dbo.wcs_alarm', 'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.wcs_alarm (
|
|
alarm_id varchar(128) NOT NULL PRIMARY KEY,
|
|
device_id varchar(64) NULL,
|
|
command_key varchar(128) NULL,
|
|
recovery_case_id varchar(128) NULL,
|
|
alarm_code varchar(128) NOT NULL,
|
|
severity varchar(16) NOT NULL,
|
|
alarm_state varchar(32) NOT NULL,
|
|
detail nvarchar(1024) NULL,
|
|
source_event_id varchar(128) NULL,
|
|
opened_time datetime2(3) NOT NULL,
|
|
acknowledged_by varchar(128) NULL,
|
|
acknowledged_time datetime2(3) NULL,
|
|
closed_time datetime2(3) NULL,
|
|
state_version bigint NOT NULL,
|
|
CONSTRAINT ck_wcs_alarm_version CHECK (state_version >= 0)
|
|
);
|
|
END;
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.wcs_alarm')
|
|
AND name = 'ix_wcs_alarm_device_state')
|
|
BEGIN
|
|
CREATE INDEX ix_wcs_alarm_device_state
|
|
ON dbo.wcs_alarm(device_id, alarm_state, opened_time DESC);
|
|
END;
|
|
|
|
IF OBJECT_ID('dbo.wcs_recovery_case', 'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.wcs_recovery_case (
|
|
case_id varchar(128) NOT NULL PRIMARY KEY,
|
|
device_id varchar(64) NOT NULL,
|
|
command_key varchar(128) NOT NULL,
|
|
reason_code varchar(128) NOT NULL,
|
|
evidence_ids_json nvarchar(max) NOT NULL,
|
|
expected_task_number varchar(128) NULL,
|
|
expected_site varchar(128) NULL,
|
|
expected_load_state varchar(32) NULL,
|
|
recovery_state varchar(32) NOT NULL,
|
|
created_time datetime2(3) NOT NULL,
|
|
resolved_by varchar(128) NULL,
|
|
resolved_time datetime2(3) NULL,
|
|
resolution_evidence_json nvarchar(max) NULL,
|
|
resolution_reason nvarchar(512) NULL,
|
|
state_version bigint NOT NULL,
|
|
CONSTRAINT ck_wcs_recovery_case_version CHECK (state_version >= 0),
|
|
CONSTRAINT ck_wcs_recovery_case_expected_facts CHECK (
|
|
(expected_task_number IS NULL AND expected_site IS NULL
|
|
AND expected_load_state IS NULL)
|
|
OR
|
|
(expected_task_number IS NOT NULL AND expected_site IS NOT NULL
|
|
AND expected_load_state IS NOT NULL))
|
|
);
|
|
END;
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.wcs_recovery_case')
|
|
AND name = 'uk_wcs_recovery_case_open')
|
|
BEGIN
|
|
CREATE UNIQUE INDEX uk_wcs_recovery_case_open
|
|
ON dbo.wcs_recovery_case(device_id, command_key)
|
|
WHERE recovery_state = 'OPEN';
|
|
END;
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.wcs_recovery_case')
|
|
AND name = 'ix_wcs_recovery_case_state_created')
|
|
BEGIN
|
|
CREATE INDEX ix_wcs_recovery_case_state_created
|
|
ON dbo.wcs_recovery_case(recovery_state, created_time);
|
|
END;
|
|
|
|
IF OBJECT_ID('dbo.wcs_manual_action_audit', 'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.wcs_manual_action_audit (
|
|
audit_id varchar(128) NOT NULL PRIMARY KEY,
|
|
case_id varchar(128) NOT NULL,
|
|
action_type varchar(32) NOT NULL,
|
|
operator_id varchar(128) NOT NULL,
|
|
action_reason nvarchar(512) NOT NULL,
|
|
before_state varchar(32) NOT NULL,
|
|
after_state varchar(32) NOT NULL,
|
|
evidence_json nvarchar(max) NULL,
|
|
occurred_time datetime2(3) NOT NULL,
|
|
CONSTRAINT fk_wcs_manual_action_case FOREIGN KEY (case_id)
|
|
REFERENCES dbo.wcs_recovery_case(case_id)
|
|
);
|
|
END;
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.wcs_manual_action_audit')
|
|
AND name = 'ix_wcs_manual_action_case_time')
|
|
BEGIN
|
|
CREATE INDEX ix_wcs_manual_action_case_time
|
|
ON dbo.wcs_manual_action_audit(case_id, occurred_time);
|
|
END;
|
|
|
|
IF OBJECT_ID('dbo.wcs_resource_reservation', 'U') IS NOT NULL
|
|
AND NOT EXISTS (
|
|
SELECT 1 FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID('dbo.wcs_resource_reservation')
|
|
AND name = 'ix_wcs_resource_reservation_resource_state')
|
|
BEGIN
|
|
CREATE INDEX ix_wcs_resource_reservation_resource_state
|
|
ON dbo.wcs_resource_reservation(resource_key, reservation_state);
|
|
END;
|
|
|
|
COMMIT TRANSACTION;
|