IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[TASK_DELETE_GUARD]') AND TYPE IN (N'U'))
CREATE TABLE TASK_DELETE_GUARD (
  TASK_NAME VARCHAR (512) NOT NULL,
  GUARD_UUID VARCHAR (36) NOT NULL,
  UPDATED_AT BIGINT NOT NULL,
  PRIMARY KEY (TASK_NAME)
);

IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[TASK_DELETE_BARRIER]') AND TYPE IN (N'U'))
CREATE TABLE TASK_DELETE_BARRIER (
  TASK_NAME VARCHAR (512) NOT NULL,
  GUARD_UUID VARCHAR (36) NOT NULL,
  OWNER_NODE_ID VARCHAR (512) NOT NULL,
  STATUS VARCHAR (16) NOT NULL,
  DEADLINE_AT BIGINT NOT NULL,
  UPDATED_AT BIGINT NOT NULL,
  PRIMARY KEY (TASK_NAME, GUARD_UUID)
);

IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[TASK_DELETE_BARRIER_EXPECTED]') AND TYPE IN (N'U'))
CREATE TABLE TASK_DELETE_BARRIER_EXPECTED (
  TASK_NAME VARCHAR (512) NOT NULL,
  GUARD_UUID VARCHAR (36) NOT NULL,
  NODE_ID VARCHAR (220) NOT NULL,
  PRIMARY KEY (TASK_NAME, GUARD_UUID, NODE_ID)
);

IF NOT EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[TASK_DELETE_BARRIER_ACK]') AND TYPE IN (N'U'))
CREATE TABLE TASK_DELETE_BARRIER_ACK (
  TASK_NAME VARCHAR (512) NOT NULL,
  GUARD_UUID VARCHAR (36) NOT NULL,
  NODE_ID VARCHAR (220) NOT NULL,
  ACKED_AT BIGINT NOT NULL,
  PRIMARY KEY (TASK_NAME, GUARD_UUID, NODE_ID)
);
