-- IQX database structure split by table
-- Source: IQXDatabaseStructure - with comments.sql
-- Table: "pears"."diary"
-- Table comment: Appointment diary records.
-- Statement count: 29
CREATE TABLE "pears"."diary" (
"diaryid" CHAR(20) NOT NULL
,"staffid" CHAR(20) NOT NULL
,"personid" CHAR(20) NULL
,"vacancyid" CHAR(20) NULL
,"employmentid" CHAR(20) NULL
,"progressid" CHAR(20) NULL
,"placementid" CHAR(20) NULL
,"diaryfrom" TIMESTAMP NOT NULL
,"diaryto" TIMESTAMP NULL
,"description" CHAR(100) NULL
,"notes" long VARCHAR NULL
,"DurationType" CHAR(1) NULL
,"Duration" DOUBLE NULL
,"PopupMinutes" SMALLINT NULL
,"PopupTime" TIMESTAMP NULL COMPUTE ("dateadd"("minute",0-"PopupMinutes","DiaryFrom"))
,"WhenEntered" TIMESTAMP NULL DEFAULT CURRENT TIMESTAMP
,"WhoEntered" CHAR(20) NULL
,"OriginalDiaryID" CHAR(20) NULL
,"groupid" CHAR(20) NULL
,"RecurDays" INTEGER NULL DEFAULT 0
,"priority" SMALLINT NULL DEFAULT 5
,"CanEscalate" INTEGER NULL
,"ICSFileUID" CHAR(20) NULL
,"collectionid" CHAR(20) NULL
,"ContactEventID" CHAR(20) NULL
,PRIMARY KEY ("diaryid" ASC)
)
GO
COMMENT ON COLUMN "pears"."diary"."DurationType" IS
'R=Reminder, M=Minutes, H=Hours, D=Days, W=Weeks'
GO
COMMENT ON COLUMN "pears"."diary"."WhoEntered" IS
'Auto-entered staffid, but no ref integ because it would break numerous key joins by making them ambiguous'
GO
COMMENT ON COLUMN "pears"."diary"."OriginalDiaryID" IS
'Used to prevent circular escalations'
GO
COMMENT ON COLUMN "pears"."diary"."groupid" IS
'link multiple staff to diary'
GO
COMMENT ON COLUMN "pears"."diary"."priority" IS
'1 - high, 5 - low'
GO
COMMENT ON TABLE "pears"."diary" IS
'Appointment diary records.'
GO
ALTER TABLE "pears"."diary"
ADD NOT NULL FOREIGN KEY "staff" ("staffid" ASC)
REFERENCES "pears"."staff" ("staffid")
GO
ALTER TABLE "pears"."diary"
ADD FOREIGN KEY "person" ("personid" ASC)
REFERENCES "pears"."Person" ("personid")
ON DELETE SET NULL
GO
ALTER TABLE "pears"."diary"
ADD FOREIGN KEY "vacancy" ("vacancyid" ASC)
REFERENCES "pears"."vacancy" ("vacancyid")
ON DELETE SET NULL
GO
ALTER TABLE "pears"."diary"
ADD FOREIGN KEY "employment" ("employmentid" ASC)
REFERENCES "pears"."employment" ("employmentid")
ON DELETE SET NULL
GO
ALTER TABLE "pears"."diary"
ADD FOREIGN KEY "progress" ("progressid" ASC)
REFERENCES "pears"."progress" ("progressid")
ON DELETE SET NULL
GO
ALTER TABLE "pears"."diary"
ADD FOREIGN KEY "placement" ("placementid" ASC)
REFERENCES "pears"."Placement" ("placementid")
ON DELETE SET NULL
GO
ALTER TABLE "pears"."diary"
ADD FOREIGN KEY "collection" ("collectionid" ASC)
REFERENCES "pears"."Collection" ("CollectionID")
ON DELETE SET NULL
GO
ALTER TABLE "pears"."diary"
ADD FOREIGN KEY "contactevent" ("ContactEventID" ASC)
REFERENCES "pears"."contactevent" ("contacteventid")
ON DELETE CASCADE
GO
CREATE INDEX "diary_from" ON "pears"."diary"
( "diaryfrom" )
GO
CREATE INDEX "diary_stafffrom" ON "pears"."diary"
( "staffid","diaryfrom" )
GO
CREATE INDEX "diary_to" ON "pears"."diary"
( "diaryto" )
GO
CREATE INDEX "diary_staffto" ON "pears"."diary"
( "staffid","diaryto" )
GO
CREATE INDEX "diary_popup" ON "pears"."diary"
( "PopupTime" )
GO
CREATE INDEX "diary_whenentered" ON "pears"."diary"
( "WhenEntered" )
GO
CREATE TRIGGER "Diary_Insert" BEFORE INSERT ORDER 5 ON
"pears"."diary"
REFERENCING NEW AS "new_diary"
FOR each ROW
WHEN("new_diary"."whoentered" IS NULL)
BEGIN
SET "new_diary"."whoentered" = "userstaffid"
exception
WHEN others THEN
SET "new_diary"."whoentered" = NULL
END
GO
COMMENT TO PRESERVE FORMAT ON TRIGGER "pears"."diary"."Diary_Insert" IS
{CREATE TRIGGER Diary_Insert
BEFORE INSERT ORDER 5 ON
pears.diary
REFERENCING NEW AS new_diary
FOR each ROW
WHEN(new_diary.whoentered IS NULL)
BEGIN
SET new_diary.whoentered=userstaffid
exception
WHEN others THEN
SET new_diary.whoentered=NULL
END
}
GO
CREATE TRIGGER "Diary_Insert_2" BEFORE INSERT ORDER 6 ON
"pears"."diary"
REFERENCING NEW AS "new_diary"
FOR each ROW
BEGIN
IF "new_diary"."durationtype" IN( 'M','H','D','W','R' ) THEN
IF "isnull"("new_diary"."duration",0) = 0 THEN
SET "new_diary"."durationtype" = 'R';
SET "new_diary"."duration" = 0.0
END IF;
CASE "new_diary"."durationtype" WHEN 'M' THEN
SET "new_diary"."diaryto" = "dateadd"("minute","new_diary"."duration","new_diary"."diaryfrom") WHEN 'H' THEN
SET "new_diary"."diaryto" = "dateadd"("minute",("new_diary"."duration")*60,"new_diary"."diaryfrom") WHEN 'D' THEN
SET "new_diary"."diaryto" = "dateadd"("hour",("new_diary"."duration")*24,"new_diary"."diaryfrom") WHEN 'W' THEN
SET "new_diary"."diaryto" = "dateadd"("day",("new_diary"."duration")*7,"new_diary"."diaryfrom") ELSE
SET "new_diary"."diaryto" = "new_diary"."diaryfrom"
END CASE
ELSE
IF "new_diary"."diaryto" IS NULL THEN
SET "new_diary"."diaryto" = "new_diary"."diaryfrom"
END IF;
IF "datediff"("minute","new_diary"."diaryfrom","new_diary"."diaryto") < 1 THEN
SET "new_diary"."durationtype" = 'R';
SET "new_diary"."duration" = 0
ELSEIF "datediff"("hour","new_diary"."diaryfrom","new_diary"."diaryto") < 1 THEN
SET "new_diary"."durationtype" = 'M';
SET "new_diary"."duration" = "datediff"("minute","new_diary"."diaryfrom","new_diary"."diaryto")
ELSEIF "datediff"("day","new_diary"."diaryfrom","new_diary"."diaryto") < 1 THEN
SET "new_diary"."durationtype" = 'H';
SET "new_diary"."duration" = "round"("datediff"("minute","new_diary"."diaryfrom","new_diary"."diaryto")/60.0,2)
ELSE SET "new_diary"."durationtype" = 'D';
SET "new_diary"."duration" = "round"("datediff"("hour","new_diary"."diaryfrom","new_diary"."diaryto")/24.0,2)
END IF
END IF
END
GO
COMMENT TO PRESERVE FORMAT ON TRIGGER "pears"."diary"."Diary_Insert_2" IS
{CREATE TRIGGER Diary_Insert_2
BEFORE INSERT ORDER 6 ON
pears.diary
REFERENCING NEW AS new_diary
FOR each ROW
BEGIN
IF new_diary.durationtype IN( 'M','H','D','W','R') THEN
IF isnull(new_diary.duration,0) = 0 THEN
SET new_diary.durationtype='R';
SET new_diary.duration=0.0
END IF;
CASE new_diary.durationtype WHEN 'M' THEN
SET new_diary.diaryto=dateadd(MINUTE,new_diary.duration,new_diary.diaryfrom) WHEN 'H' THEN
SET new_diary.diaryto=dateadd(MINUTE,(new_diary.duration)*60,new_diary.diaryfrom) WHEN 'D' THEN
SET new_diary.diaryto=dateadd(HOUR,(new_diary.duration)*24,new_diary.diaryfrom) WHEN 'W' THEN
SET new_diary.diaryto=dateadd(DAY,(new_diary.duration)*7,new_diary.diaryfrom) ELSE
SET new_diary.diaryto=new_diary.diaryfrom
END CASE
ELSE
IF new_diary.diaryto IS NULL THEN
SET new_diary.diaryto=new_diary.diaryfrom
END IF;
IF datediff(MINUTE,new_diary.diaryfrom,new_diary.diaryto) < 1 THEN
SET new_diary.durationtype='R';
SET new_diary.duration=0
ELSEIF datediff(HOUR,new_diary.diaryfrom,new_diary.diaryto) < 1 THEN
SET new_diary.durationtype='M';
SET new_diary.duration=datediff(MINUTE,new_diary.diaryfrom,new_diary.diaryto)
ELSEIF datediff(DAY,new_diary.diaryfrom,new_diary.diaryto) < 1 THEN
SET new_diary.durationtype='H';
SET new_diary.duration=round(datediff(MINUTE,new_diary.diaryfrom,new_diary.diaryto)/60.0,2)
ELSE SET new_diary.durationtype='D';
SET new_diary.duration=round(datediff(HOUR,new_diary.diaryfrom,new_diary.diaryto)/24.0,2)
END IF
END IF
END
}
GO
CREATE TRIGGER "Diary_Update" BEFORE UPDATE ORDER 1 ON
"pears"."diary"
REFERENCING OLD AS "old_diary" NEW AS "new_diary"
FOR each ROW
BEGIN
IF "new_diary"."durationtype" IN( 'M','H','D','W','R' ) THEN
IF "isnull"("new_diary"."duration",0) = 0 THEN
SET "new_diary"."durationtype" = 'R';
SET "new_diary"."duration" = 0.0
END IF;
CASE "new_diary"."durationtype" WHEN 'M' THEN
SET "new_diary"."diaryto" = "dateadd"("minute","new_diary"."duration","new_diary"."diaryfrom") WHEN 'H' THEN
SET "new_diary"."diaryto" = "dateadd"("minute",("new_diary"."duration")*60,"new_diary"."diaryfrom") WHEN 'D' THEN
SET "new_diary"."diaryto" = "dateadd"("hour",("new_diary"."duration")*24,"new_diary"."diaryfrom") WHEN 'W' THEN
SET "new_diary"."diaryto" = "dateadd"("day",("new_diary"."duration")*7,"new_diary"."diaryfrom") ELSE
SET "new_diary"."diaryto" = "new_diary"."diaryfrom"
END CASE
ELSE
IF "new_diary"."diaryto" IS NULL THEN
SET "new_diary"."diaryto" = "new_diary"."diaryfrom"
END IF;
IF "datediff"("minute","new_diary"."diaryfrom","new_diary"."diaryto") < 1 THEN
SET "new_diary"."durationtype" = 'R';
SET "new_diary"."duration" = 0
ELSEIF "datediff"("hour","new_diary"."diaryfrom","new_diary"."diaryto") < 1 THEN
SET "new_diary"."durationtype" = 'M';
SET "new_diary"."duration" = "datediff"("minute","new_diary"."diaryfrom","new_diary"."diaryto")
ELSEIF "datediff"("day","new_diary"."diaryfrom","new_diary"."diaryto") < 1 THEN
SET "new_diary"."durationtype" = 'H';
SET "new_diary"."duration" = "round"("datediff"("minute","new_diary"."diaryfrom","new_diary"."diaryto")/60.0,2)
ELSE SET "new_diary"."durationtype" = 'D';
SET "new_diary"."duration" = "round"("datediff"("hour","new_diary"."diaryfrom","new_diary"."diaryto")/24.0,2)
END IF END IF
END
GO
COMMENT TO PRESERVE FORMAT ON TRIGGER "pears"."diary"."Diary_Update" IS
{CREATE TRIGGER Diary_Update
BEFORE UPDATE ORDER 1 ON
pears.diary
REFERENCING OLD AS old_diary NEW AS new_diary
FOR each ROW
BEGIN
IF new_diary.durationtype IN( 'M','H','D','W','R') THEN
IF isnull(new_diary.duration,0) = 0 THEN
SET new_diary.durationtype='R';
SET new_diary.duration=0.0
END IF;
CASE new_diary.durationtype WHEN 'M' THEN
SET new_diary.diaryto=dateadd(MINUTE,new_diary.duration,new_diary.diaryfrom) WHEN 'H' THEN
SET new_diary.diaryto=dateadd(MINUTE,(new_diary.duration)*60,new_diary.diaryfrom) WHEN 'D' THEN
SET new_diary.diaryto=dateadd(HOUR,(new_diary.duration)*24,new_diary.diaryfrom) WHEN 'W' THEN
SET new_diary.diaryto=dateadd(DAY,(new_diary.duration)*7,new_diary.diaryfrom) ELSE
SET new_diary.diaryto=new_diary.diaryfrom
END CASE
ELSE
IF new_diary.diaryto IS NULL THEN
SET new_diary.diaryto=new_diary.diaryfrom
END IF;
IF datediff(MINUTE,new_diary.diaryfrom,new_diary.diaryto) < 1 THEN
SET new_diary.durationtype='R';
SET new_diary.duration=0
ELSEIF datediff(HOUR,new_diary.diaryfrom,new_diary.diaryto) < 1 THEN
SET new_diary.durationtype='M';
SET new_diary.duration=datediff(MINUTE,new_diary.diaryfrom,new_diary.diaryto)
ELSEIF datediff(DAY,new_diary.diaryfrom,new_diary.diaryto) < 1 THEN
SET new_diary.durationtype='H';
SET new_diary.duration=round(datediff(MINUTE,new_diary.diaryfrom,new_diary.diaryto)/60.0,2)
ELSE SET new_diary.durationtype='D';
SET new_diary.duration=round(datediff(HOUR,new_diary.diaryfrom,new_diary.diaryto)/24.0,2)
END IF
END IF;
END
}
GO
CREATE TRIGGER "Diary_Update_After_TimeSynch" after UPDATE OF "diaryfrom",
"diaryto" ORDER 3 ON
"pears"."diary"
REFERENCING OLD AS "old_diary" NEW AS "new_diary"
FOR each ROW
BEGIN
IF "isnull"("new_diary"."groupid",'') <> '' THEN
UPDATE "diary" SET "diaryfrom" = "new_diary"."diaryfrom","diaryto" = "new_diary"."diaryto" WHERE "groupid"
= "new_diary"."groupid" AND "diaryid" <> "new_diary"."diaryid"
END IF
END
GO
COMMENT TO PRESERVE FORMAT ON TRIGGER "pears"."diary"."Diary_Update_After_TimeSynch" IS
{CREATE TRIGGER Diary_Update_After_TimeSynch
after UPDATE OF diaryfrom, diaryto ORDER 3 ON
pears.diary
REFERENCING OLD AS old_diary NEW AS new_diary
FOR each ROW
BEGIN
IF isnull(new_diary.groupid,'') <> '' THEN
UPDATE diary SET diaryfrom = new_diary.diaryfrom, diaryto = new_diary.diaryto WHERE groupid
= new_diary.groupid AND diaryid <> new_diary.diaryid
END IF
END
}
GO