--- /dev/null
+-- // Create structure.
+-- Migration SQL that makes the change goes here.
+
+CREATE PROCEDURE SET_CONSTRAINTS(ENFORCE VARCHAR(3))
+LANGUAGE SQL
+BEGIN
+ DECLARE v_tabname VARCHAR(128);
+ DECLARE v_constname VARCHAR(128);
+ DECLARE v_rows INTEGER;
+ DECLARE v_alter_table_sql VARCHAR(256);
+ DECLARE tmp_cursor CURSOR FOR SELECT tabname, constname FROM syscat.references WHERE TABSCHEMA = CURRENT SCHEMA ORDER BY CONSTNAME,TABNAME, REFTABNAME;
+ SELECT count(*) INTO v_rows FROM syscat.references WHERE TABSCHEMA = CURRENT SCHEMA;
+ OPEN tmp_cursor;
+ WHILE (v_rows > 0) DO
+ FETCH tmp_cursor INTO v_tabname, v_constname;
+ SET v_alter_table_sql = 'alter table ' || '"' || current SCHEMA || '"' || '.' || v_tabname || ' alter foreign key ' || v_constname;
+ IF (ENFORCE = 'NO') THEN
+ SET v_alter_table_sql = v_alter_table_sql || ' NOT ENFORCED';
+ ELSE
+ SET v_alter_table_sql = v_alter_table_sql || ' ENFORCED';
+ END IF;
+ EXECUTE IMMEDIATE v_alter_table_sql;
+ SET v_rows = v_rows - 1;
+ END while;
+ CLOSE tmp_cursor;
+END @
+
+CREATE PROCEDURE DROP_DYNAMIC_DATA()
+LANGUAGE SQL
+BEGIN
+ DECLARE v_tabname VARCHAR(128);
+ DECLARE v_rows INTEGER;
+ DECLARE v_drop_table_sql VARCHAR(256);
+ DECLARE tmp_cursor CURSOR FOR SELECT tabname FROM syscat.tables WHERE tabname LIKE 'METADATA\_%' ESCAPE '\' AND TABSCHEMA = CURRENT SCHEMA;
+ SELECT count(*) INTO v_rows FROM syscat.tables WHERE tabname LIKE 'METADATA\_%' ESCAPE '\' AND TABSCHEMA = CURRENT SCHEMA;
+ OPEN tmp_cursor;
+ WHILE (v_rows > 0) DO
+ FETCH tmp_cursor INTO v_tabname;
+ SET v_drop_table_sql = 'drop table ' || '"' || current SCHEMA || '"' || '.' || v_tabname;
+ EXECUTE IMMEDIATE v_drop_table_sql;
+ SET v_rows = v_rows - 1;
+ END while;
+ CLOSE tmp_cursor;
+END @
+
+CREATE TABLE MASTERID
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ CREATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
+)@
+
+CREATE TABLE DOMAINCATEGORY
+(
+ ID BIGINT GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ NAME VARCHAR(40) NOT NULL
+)@
+
+CREATE UNIQUE INDEX UDX_DOMAINCATEGORY_NAME ON DOMAINCATEGORY ("NAME")@
+
+CREATE TABLE DOMAIN
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ DOMAINCATEGORYID BIGINT NOT NULL,
+ DISPLAY VARCHAR(200) NOT NULL,
+ VALUE BIGINT,
+ CONSTRAINT FK_DOMAIN_DOMAINCATEGORYID FOREIGN KEY (DOMAINCATEGORYID) REFERENCES DOMAINCATEGORY (ID)
+)@
+
+CREATE INDEX UDX_DOMAIN_DOMAINCATEGORYID_DISPLAY ON DOMAIN ("DOMAINCATEGORYID","DISPLAY")@
+
+CREATE TABLE ITEMTYPE
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ NAME VARCHAR (40) NOT NULL,
+ DESCRIPTION VARCHAR (255) NOT NULL,
+ ISSTATIC CHARACTER (1) NOT NULL,
+ CONSTRAINT CHK_ITEMTYPE_ISSTATIC CHECK (ISSTATIC in ('Y', 'N'))
+)@
+
+CREATE UNIQUE INDEX UDX_ITEMTYPE_NAME ON ITEMTYPE ("NAME")@
+
+CREATE TABLE METADATATYPE
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ NAME VARCHAR(40) NOT NULL,
+ DATATYPE VARCHAR(10) NOT NULL,
+ LENGTH INTEGER NOT NULL,
+ BASETYPE VARCHAR(10) NOT NULL DEFAULT '',
+ JAVATYPE VARCHAR(255) NOT NULL DEFAULT ''
+)@
+
+CREATE UNIQUE INDEX UDX_METADATATYPE_NAME ON METADATATYPE ("NAME")@
+
+CREATE TABLE METADATAELEMENT
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ METADATATYPEID BIGINT NOT NULL,
+ NAME VARCHAR(40) NOT NULL,
+ DESCRIPTION VARCHAR(255),
+ DOMAINCATEGORYID BIGINT ,
+ CONSTRAINT FK_METADATAELEMENT_METADATATYPEID FOREIGN KEY (METADATATYPEID) REFERENCES METADATATYPE (ID),
+ CONSTRAINT FK_METADATAELEMENT_DOMAINCATEGORYID FOREIGN KEY (DOMAINCATEGORYID) REFERENCES DOMAINCATEGORY (ID)
+)@
+
+CREATE UNIQUE INDEX UDX_METADATAELEMENT_NAME ON METADATAELEMENT ("NAME")@
+
+CREATE TABLE METADATA
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ ITEMTYPEID BIGINT NOT NULL,
+ METADATAELEMENTID BIGINT NOT NULL,
+ ISDBINDEX CHARACTER(1) NOT NULL,
+ ISDBUNIQUE CHARACTER(1) NOT NULL,
+ ISDBNULLABLE CHARACTER(1) NOT NULL,
+ ISLISTABLE CHARACTER(1) NOT NULL,
+ ISEDITABLE CHARACTER(1) NOT NULL,
+ ISGENERATED CHARACTER(1) NOT NULL,
+ ISSEARCHABLE CHARACTER(1) NOT NULL,
+ GUITYPE VARCHAR(20) NOT NULL,
+ LISTTYPE VARCHAR(20) NOT NULL,
+ STATICTABLE VARCHAR(20) ,
+ POJOFIELD VARCHAR(20) ,
+ SQLFIELD VARCHAR(20) ,
+ PARAMETER VARCHAR(20) ,
+ DOMAINCATEGORYID BIGINT,
+ CONSTRAINT CHK_METADATA_ISDBINDEX CHECK (ISDBINDEX in ('Y', 'N')),
+ CONSTRAINT CHK_METADATA_ISDBUNIQUE CHECK (ISDBUNIQUE in ('Y', 'N')),
+ CONSTRAINT CHK_METADATA_ISDBNULLABLE CHECK (ISDBNULLABLE in ('Y', 'N')),
+ CONSTRAINT CHK_METADATA_ISEDITABLE CHECK (ISEDITABLE in ('Y', 'N')),
+ CONSTRAINT CHK_METADATA_ISLISTABLE CHECK (ISLISTABLE in ('Y', 'N')),
+ CONSTRAINT CHK_METADATA_ISGENERATED CHECK (ISGENERATED in ('Y', 'N')),
+ CONSTRAINT CHK_METADATA_ISSEARCHABLE CHECK (ISGENERATED in ('Y', 'N')),
+ CONSTRAINT FK_METADATA_ITEMTYPEID FOREIGN KEY (ITEMTYPEID) REFERENCES ITEMTYPE (ID),
+ CONSTRAINT FK_METADATA_METADATAELEMENTID FOREIGN KEY (METADATAELEMENTID) REFERENCES METADATAELEMENT (ID)
+)@
+
+CREATE TABLE DOMAININDEX
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ RECORDID BIGINT NOT NULL,
+ METADATAID BIGINT NOT NULL,
+ DOMAINID BIGINT NOT NULL,
+ CONSTRAINT FK_DOMAININDEX_RECORDID FOREIGN KEY (RECORDID) REFERENCES MASTERID (ID),
+ CONSTRAINT FK_DOMAININDEX_METADATAID FOREIGN KEY (METADATAID) REFERENCES METADATA (ID),
+ CONSTRAINT FK_DOMAININDEX_DOMAINID FOREIGN KEY (DOMAINID) REFERENCES DOMAIN (ID)
+)@
+
+CREATE TABLE ITEM
+(
+ ID BIGINT NOT NULL PRIMARY KEY,
+ ITEMTYPEID BIGINT NOT NULL,
+ HOUSEID VARCHAR(1000),
+ TITLE VARCHAR(1000) NOT NULL,
+ DESCRIPTION VARCHAR(32000),
+ ISFOLDER CHARACTER(1) NOT NULL DEFAULT 'N',
+ CREATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
+ MODIFIED TIMESTAMP NOT NULL GENERATED BY DEFAULT FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP,
+ CONSTRAINT CHK_ITEM_ISFOLDER CHECK (ISFOLDER in ('Y', 'N')),
+ CONSTRAINT FK_ITEM_ID FOREIGN KEY (ID) REFERENCES MASTERID (ID),
+ CONSTRAINT FK_ITEM_ITEMTYPEID FOREIGN KEY (ITEMTYPEID) REFERENCES ITEMTYPE (ID)
+)@
+
+
+CREATE INDEX IDX_ITEM_TITLE ON ITEM ("TITLE")@
+--CREATE INDEX IDX_ITEM_DESCRIPTION ON ITEM ("DESCRIPTION")@
+CREATE INDEX IDX_ITEM_HOUSEID ON ITEM ("HOUSEID")@
+CREATE INDEX IDX_ITEM_CREATED ON ITEM ("CREATED")@
+CREATE INDEX IDX_ITEM_ISFOLDER ON ITEM ("ISFOLDER")@
+
+CREATE TABLE FOLDER
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ PARENTID BIGINT NOT NULL,
+ CHILDID BIGINT NOT NULL,
+ CONSTRAINT CHK_FOLDER_SELFCHILD CHECK (PARENTID != CHILDID),
+ CONSTRAINT FK_FOLDER_PARENTID FOREIGN KEY (PARENTID) REFERENCES ITEM (ID),
+ CONSTRAINT FK_FOLDER_CHILDID FOREIGN KEY (CHILDID) REFERENCES ITEM (ID)
+)@
+
+CREATE UNIQUE INDEX UDX_FOLDER_NODUPLICATE ON FOLDER ("PARENTID", "CHILDID")@
+
+CREATE TRIGGER TRG_INSERT_FOLDER AFTER INSERT ON FOLDER
+REFERENCING NEW AS N
+ FOR EACH ROW UPDATE ITEM SET ISFOLDER = 'Y' WHERE ID = N.PARENTID AND ISFOLDER = 'N'@
+
+
+CREATE TRIGGER TRG_DELETE_FOLDER AFTER DELETE ON FOLDER
+REFERENCING OLD AS O
+ FOR EACH ROW UPDATE ITEM SET ISFOLDER = 'N' WHERE ID = O.PARENTID AND NOT EXISTS (SELECT * FROM FOLDER WHERE PARENTID = O.PARENTID)@
+
+
+CREATE TABLE MEDIA
+(
+ ID BIGINT NOT NULL PRIMARY KEY,
+ ITEMID BIGINT NOT NULL,
+ ITEMTYPEID BIGINT NOT NULL,
+ HOUSEID VARCHAR(1000),
+ TITLE VARCHAR(1000) NOT NULL,
+ DESCRIPTION VARCHAR(32000),
+ LENGTH BIGINT NOT NULL,
+ CREATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
+ MODIFIED TIMESTAMP NOT NULL GENERATED BY DEFAULT FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP,
+ ARCHIVED TIMESTAMP,
+ POSTER BLOB,
+ CONSTRAINT FK_MEDIA_ID FOREIGN KEY (ID) REFERENCES MASTERID (ID),
+ CONSTRAINT FK_MEDIA_ITEMID FOREIGN KEY (ITEMID) REFERENCES ITEM (ID),
+ CONSTRAINT FK_MEDIA_ITEMTYPEID FOREIGN KEY (ITEMTYPEID) REFERENCES ITEMTYPE (ID)
+)@
+
+CREATE INDEX IDX_MEDIA_TITLE ON MEDIA ("TITLE")@
+CREATE INDEX IDX_MEDIA_ITEMID ON MEDIA ("ITEMID")@
+--CREATE INDEX IDX_MEDIA_DESCRIPTION ON MEDIA ("DESCRIPTION")@
+CREATE INDEX IDX_MEDIA_HOUSEID ON MEDIA ("HOUSEID")@
+CREATE INDEX IDX_MEDIA_CREATED ON MEDIA ("CREATED")@
+CREATE INDEX IDX_MEDIA_ARCHIVED ON MEDIA ("ARCHIVED")@
+CREATE INDEX IDX_MEDIA_LENGTH ON MEDIA ("LENGTH")@
+
+CREATE TABLE FILETYPE
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ NAME VARCHAR(40) NOT NULL,
+ DESCRIPTION VARCHAR(255),
+ VIDEOCODEC VARCHAR(10) NOT NULL,
+ AUDIOCODEC VARCHAR(10) NOT NULL,
+ VIDEOTRACKS INT NOT NULL,
+ AUDIOTRACKS INT NOT NULL,
+ FRAMERATE FLOAT NOT NULL
+)@
+
+CREATE UNIQUE INDEX UDX_FILETYPE_NAME ON FILETYPE ("NAME")@
+
+CREATE TABLE STORE
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ NAME VARCHAR(80) NOT NULL,
+ ISSYSTEM CHARACTER(1) NOT NULL DEFAULT 'N',
+ ISLOWRES CHARACTER(1) NOT NULL DEFAULT 'N',
+ CONSTRAINT CHK_STORE_ISSYSTEM CHECK (ISSYSTEM in ('Y', 'N')),
+ CONSTRAINT CHK_STORE_ISLOWRES CHECK (ISLOWRES in ('Y', 'N'))
+)@
+
+CREATE UNIQUE INDEX UDX_STORE_NAME ON STORE ("NAME")@
+
+CREATE TABLE MEDIAFILE
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ HOUSEID VARCHAR(1000),
+ MEDIAID BIGINT NOT NULL,
+ STOREID BIGINT NOT NULL,
+ FILETYPEID BIGINT NOT NULL,
+ RELATIVEPATH VARCHAR(1000) NOT NULL,
+ FILESTRUCTINFO VARCHAR(255),
+ CONSTRAINT FK_MEDIAFILE_MEDIAID FOREIGN KEY (MEDIAID) REFERENCES MEDIA (ID),
+ CONSTRAINT FK_MEDIAFILE_STOREID FOREIGN KEY (STOREID) REFERENCES STORE (ID),
+ CONSTRAINT FK_MEDIAFILE_FILETYPEID FOREIGN KEY (FILETYPEID) REFERENCES FILETYPE (ID)
+)@
+
+CREATE TABLE STOREURI
+(
+ ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY,
+ STOREID BIGINT NOT NULL,
+ PROTOCOL VARCHAR(20) ,
+ DELIVERY VARCHAR(20) ,
+ URI VARCHAR(255) NOT NULL,
+ ISSTREAM CHARACTER(1) NOT NULL DEFAULT 'N',
+ ISSOURCE CHARACTER(1) NOT NULL DEFAULT 'N',
+ ISTARGET CHARACTER(1) NOT NULL DEFAULT 'N',
+ USERNAME VARCHAR(20),
+ PASSWORD VARCHAR(20),
+ ROOTPATH VARCHAR(255),
+ PORTNUMBER INT,
+ CONSTRAINT CHK_STOREURI_ISSTREAM CHECK (ISSTREAM in ('Y', 'N')),
+ CONSTRAINT CHK_STOREURI_ISSOURCE CHECK (ISSOURCE in ('Y', 'N')),
+ CONSTRAINT CHK_STOREURI_ISTARGET CHECK (ISTARGET in ('Y', 'N')),
+ CONSTRAINT FK_STOREURI_STOREID FOREIGN KEY (STOREID) REFERENCES STORE (ID)
+)@
+
+CREATE TABLE SHOT
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ MEDIAID BIGINT NOT NULL,
+ THUMBNAIL BLOB,
+ INPOINT BIGINT NOT NULL,
+ OUTPOINT BIGINT NOT NULL,
+ DESCRIPTION VARCHAR(255),
+ CREATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
+ CONSTRAINT FK_SHOT_MEDIAID FOREIGN KEY (MEDIAID) REFERENCES MEDIA (ID)
+)@
+
+CREATE INDEX IDX_SHOT_DESCRIPTION ON SHOT ("DESCRIPTION")@
+
+CREATE TABLE BREAK
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ MEDIAID BIGINT NOT NULL,
+ THUMBNAIL BLOB NOT NULL,
+ INPOINT BIGINT NOT NULL,
+ BREAKTYPE VARCHAR(10) NOT NULL,
+ CREATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
+ CONSTRAINT FK_BREAK_MEDIAID FOREIGN KEY (MEDIAID) REFERENCES MEDIA (ID)
+)@
+
+CREATE TABLE SCENE
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ NAME VARCHAR(80) NOT NULL,
+ CREATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
+ MODIFIED TIMESTAMP NOT NULL GENERATED BY DEFAULT FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
+)@
+
+CREATE TABLE SCENECONTENT
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ SCENEID BIGINT NOT NULL,
+ SHOTID BIGINT NOT NULL,
+ POSITION BIGINT NOT NULL,
+ CONSTRAINT FK_SCENECONTENT_SCENEID FOREIGN KEY (SCENEID) REFERENCES SCENE (ID),
+ CONSTRAINT FK_SCENECONTENT_SHOTID FOREIGN KEY (SHOTID) REFERENCES SHOT (ID)
+)@
+
+CREATE TABLE SEARCHDEFINITION
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ NAME VARCHAR(40) NOT NULL,
+ CREATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
+ MODIFIED TIMESTAMP NOT NULL GENERATED BY DEFAULT FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP,
+ DATA BLOB
+)@
+CREATE UNIQUE INDEX UDX_SEARCHDEFINITION_NAME ON SEARCHDEFINITION ("NAME")@
+
+CREATE TABLE USERINFO
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ FULLNAME VARCHAR(80) NOT NULL,
+ USERNAME VARCHAR(20) NOT NULL,
+ PASSWORD VARCHAR(20) NOT NULL FOR BIT DATA,
+ CREATED TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
+ LASTLOGIN TIMESTAMP,
+ RIGHTS INT NOT NULL DEFAULT 0
+)@
+
+CREATE UNIQUE INDEX UDX_USERINFO_USERNAME ON USERINFO ("USERNAME")@
+CREATE INDEX IDX_ITEM_USERNAMEPASSWORD ON USERINFO ("USERNAME", "PASSWORD")@
+
+CREATE TABLE JOB
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ NAME VARCHAR(80) NOT NULL,
+ OWNER VARCHAR(80),
+ PRIORITY INT NOT NULL DEFAULT 0,
+ PROGRESS INT NOT NULL DEFAULT 0,
+ STATUS VARCHAR(80) NOT NULL,
+ DESCRIPTION VARCHAR(200),
+ SUBMITTED TIMESTAMP NOT NULL,
+ FINISHED TIMESTAMP,
+ TEMPLATE VARCHAR(80) NOT NULL,
+ SCHEDULEDTIME TIMESTAMP
+)@
+
+CREATE TABLE JOBPARAMETERS
+(
+ ID BIGINT NOT NULL PRIMARY KEY,
+ DATA BLOB
+)@
+
+CREATE TABLE WORKFLOWACTION
+(
+ ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1) PRIMARY KEY,
+ TOUCHED TIMESTAMP NOT NULL,
+ STARTED TIMESTAMP NOT NULL,
+ FINISHED TIMESTAMP NOT NULL,
+ SUCCESSFUL CHARACTER(1) NOT NULL DEFAULT 'N',
+ HOUSEID VARCHAR(40),
+ DESCRIPTION VARCHAR(255) NOT NULL,
+ SOURCE VARCHAR(255) NOT NULL,
+ DESTINATION VARCHAR(255) NOT NULL,
+ TAG VARCHAR(40) NOT NULL,
+ USERNAME VARCHAR(50) NOT NULL,
+ SIZE BIGINT NOT NULL,
+ CONSTRAINT CHK_WORKFLOWACTION_SUCCESSFUL CHECK (SUCCESSFUL in ('Y', 'N'))
+)@
+
+CREATE INDEX IDX_WORKFLOWACTION_FINISHED ON WORKFLOWACTION ("FINISHED")@
+CREATE INDEX IDX_WORKFLOWACTION_HOUSEID ON WORKFLOWACTION ("HOUSEID")@
+
+
+CREATE TABLE MEDIADESCRIPTION (
+ ID BIGINT GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, CACHE 20) NOT NULL,
+ ITEMID BIGINT NOT NULL,
+ MEDIAID BIGINT NOT NULL,
+ MEDIAFILEID BIGINT NOT NULL,
+ DESCRIPTION CLOB(400000) NOT LOGGED COMPACT,
+ CONSTRAINT PK_MEDIADESCRIPTION PRIMARY KEY(ID)
+)
+@
+
+ALTER TABLE DB2ADMIN.MEDIADESCRIPTION
+ ADD CONSTRAINT FK_MEDIADESCRIPTION_MEDIAID
+ FOREIGN KEY(MEDIAID)
+ REFERENCES DB2ADMIN.MEDIA(ID)
+ ON DELETE CASCADE
+ ON UPDATE NO ACTION
+@
+ALTER TABLE DB2ADMIN.MEDIADESCRIPTION
+ ADD CONSTRAINT FK_MEDIADESCRIPTION_MEDIAFILEID
+ FOREIGN KEY(MEDIAFILEID)
+ REFERENCES DB2ADMIN.MEDIAFILE(ID)
+ ON DELETE CASCADE
+ ON UPDATE NO ACTION
+@
+ALTER TABLE DB2ADMIN.MEDIADESCRIPTION
+ ADD CONSTRAINT FK_MEDIADESCRIPTION_ITEMID
+ FOREIGN KEY(ITEMID)
+ REFERENCES DB2ADMIN.ITEM(ID)
+ ON DELETE CASCADE
+ ON UPDATE NO ACTION
+@
+
+CREATE OR REPLACE FUNCTION DEFDATE (TS timestamp)
+returns varchar(10)
+return
+with tmp (dd,mm,yyyy,hh,mi,ss,nnnnnn) as
+(
+ select
+ substr( digits (day(TS)),9),
+ substr( digits (month(TS)),9) ,
+ rtrim(char(year(TS))) ,
+ substr( digits (hour(TS)),9),
+ substr( digits (minute(TS)),9),
+ substr( digits (second(TS)),9),
+ rtrim(char(microsecond(TS)))
+ from sysibm.sysdummy1
+ )
+select yyyy || mm || dd from tmp
+@
+
+
+CREATE OR REPLACE FUNCTION HUNDATE (TS timestamp)
+returns varchar(10)
+return
+with tmp (dd,mm,yyyy,hh,mi,ss,nnnnnn) as
+(
+ select
+ substr( digits (day(TS)),9),
+ substr( digits (month(TS)),9) ,
+ rtrim(char(year(TS))) ,
+ substr( digits (hour(TS)),9),
+ substr( digits (minute(TS)),9),
+ substr( digits (second(TS)),9),
+ rtrim(char(microsecond(TS)))
+ from sysibm.sysdummy1
+ )
+select yyyy || '.' || mm || '.' || dd from tmp
+@
+
+CREATE OR REPLACE FUNCTION HIGHLIGHT (content CLOB(400000), starttag VARCHAR(20), endtag VARCHAR(20), pattern VARCHAR(1000))
+ RETURNS VARCHAR(32000)
+ LANGUAGE SQL
+ NO EXTERNAL ACTION
+ READS SQL DATA
+ DETERMINISTIC
+BEGIN
+ DECLARE RESULT VARCHAR(32000) DEFAULT '';
+ DECLARE CHUNKSIZE INT DEFAULT 10000;
+ DECLARE CHUNK VARCHAR(10000);
+ DECLARE CHUNKSTART INT DEFAULT 1;
+ DECLARE HITSTART INT DEFAULT 1;
+ WHILE LENGTH(RESULT) = 0 AND CHUNKSTART < LENGTH(content) DO
+ SET CHUNK = DBMS_LOB.SUBSTR(content, CHUNKSIZE, CHUNKSTART);
+ SET HITSTART = REGEXP_INSTR(CHUNK, pattern, 1, 1, 0, 'i');
+ IF HITSTART > 0 THEN
+ IF CHUNKSTART + HITSTART > 100 THEN
+ SET CHUNK = DBMS_LOB.SUBSTR(content, 200, CHUNKSTART + HITSTART - 100);
+ ELSE
+ SET CHUNK = DBMS_LOB.SUBSTR(content, 200, CHUNKSTART);
+ END IF;
+ SET CHUNK = REPLACE(CHUNK, '<', '');
+ SET CHUNK = REPLACE(CHUNK, '>', '');
+ SET RESULT = '...' || REGEXP_REPLACE(CHUNK, pattern, starttag||'$0'||endtag,1,0,'i') || '...';
+ END IF;
+ SET CHUNKSTART = CHUNKSTART + CHUNKSIZE;
+ END WHILE;
+ RETURN RESULT;
+END
+@
+
+CREATE OR REPLACE VIEW VW_ITEMS as
+select
+i.id as itemid,
+i.created as itemcreated,
+i.houseid as itemhouseid,
+i.title as itemtitle,
+m.id as mediaid,
+m.created as mediacreated,
+m.archived,
+m.length,
+it.name as mediatype,
+m.houseid as mediahouseid,
+m.title as mediatitle,
+mf.id as mediafileid,
+mf.houseid as mediafilehouseid
+from mediafile mf
+left outer join media m on (m.id = mf.mediaid)
+left outer join item i on (i.id = m.itemid)
+left outer join itemtype it on (it.id = m.itemtypeid)
+where mf.storeid = 1
+@
+
+CREATE OR REPLACE VIEW VW_ITEMS_DESCRIPTION as
+select
+i.id as itemid,
+i.created as itemcreated,
+i.houseid as itemhouseid,
+i.title as itemtitle,
+i.description as itemdescription,
+m.id as mediaid,
+m.created as mediacreated,
+m.archived,
+m.length,
+m.description as mediadescription,
+it.name as mediatype,
+m.houseid as mediahouseid,
+m.title as mediatitle,
+mf.id as mediafileid,
+mf.houseid as mediafilehouseid
+from mediafile mf
+left outer join media m on (m.id = mf.mediaid)
+left outer join item i on (i.id = m.itemid)
+left outer join itemtype it on (it.id = m.itemtypeid)
+where mf.storeid = 1
+@
+
+CREATE OR REPLACE FUNCTION FULLDESC (IN initemid BIGINT, IN inmediaid BIGINT, IN inmediafileid BIGINT)
+returns CLOB(400000)
+return
+SELECT
+ COALESCE(hundate(archived), '') || ' ' ||
+ COALESCE(defdate(archived), '') || ' ' ||
+ COALESCE(itemhouseid, '') || ' ' ||
+ COALESCE(itemtitle, '') || ' ' ||
+ COALESCE(itemdescription,'') || ' ' ||
+ COALESCE(mediahouseid, '') || ' ' ||
+ COALESCE(mediatitle, '') || ' ' ||
+ COALESCE(mediadescription, '') || ' ' ||
+ COALESCE(mediafilehouseid, '')
+from vw_items_description WHERE itemid = initemid AND mediaid = inmediaid AND mediafileid = inmediafileid
+@
+
+CREATE OR REPLACE TRIGGER TRG_MEDIAFILE_AFTER_INSERT after insert
+on mediafile
+referencing new as n
+for each row
+when (n.storeid = 1)
+begin atomic
+ insert into mediadescription (itemid, mediaid, mediafileid, description)
+ select
+ itemid,
+ mediaid,
+ mediafileid,
+ fulldesc(itemid, mediaid, mediafileid)
+ from vw_items
+ where mediafileid = n.id;
+end
+@
+
+CREATE OR REPLACE TRIGGER TRG_MEDIAFILE_AFTER_DELETE after delete
+on mediafile
+referencing old as o
+for each row
+when (o.storeid = 1)
+begin atomic
+ delete from mediadescription where mediafileid = o.id;
+end
+@
+
+CREATE OR REPLACE TRIGGER TRG_MEDIA_AFTER_UPDATE after update on media
+referencing new as n
+for each row
+begin atomic
+ update mediadescription SET description = fulldesc(itemid, mediaid, mediafileid) where mediaid = n.id;
+end
+@
+
+CREATE OR REPLACE TRIGGER TRG_ITEM_AFTER_UPDATE after update on item
+referencing new as n
+for each row
+begin atomic
+ update mediadescription SET description = fulldesc(itemid, mediaid, mediafileid) where itemid = n.id;
+end
+@
+
+
+-- //@UNDO
+-- SQL to undo the change goes here.
+
+CALL SET_CONSTRAINTS('NO')@
+CALL DROP_DYNAMIC_DATA()@
+
+DROP PROCEDURE SET_CONSTRAINTS@
+DROP PROCEDURE DROP_DYNAMIC_DATA@
+
+DROP TABLE MEDIAFILE@
+DROP TABLE SCENECONTENT@
+DROP TABLE SHOT@
+DROP TABLE MEDIA@
+DROP TABLE ITEM@
+DROP TABLE MASTERID@
+DROP TABLE METADATA@
+DROP TABLE ITEMTYPE@
+DROP TABLE METADATAELEMENT@
+DROP TABLE METADATATYPE@
+DROP TABLE SCENE@
+DROP TABLE STOREURI@
+DROP TABLE FILETYPE@
+DROP TABLE STORE@
+DROP TABLE BREAK@
+DROP TABLE DOMAIN@
+DROP TABLE DOMAINCATEGORY@
+DROP TABLE DOMAININDEX@
+DROP TABLE WORKFLOWACTION@
+DROP TABLE SEARCHDEFINITION@
+DROP TABLE FOLDER@
+DROP TABLE USERINFO@
+DROP TABLE JOB@
+DROP TABLE JOBPARAMETERS@
+DROP TABLE MEDIADESCRIPTION@
+
+DROP TRIGGER TRG_INSERT_FOLDER@
+DROP TRIGGER TRG_DELETE_FOLDER@
+DROP TRIGGER TRG_ITEM_AFTER_UPDATE@
+DROP TRIGGER TRG_MEDIA_AFTER_UPDATE@
+DROP TRIGGER TRG_MEDIAFILE_AFTER_DELETE@
+DROP TRIGGER TRG_MEDIAFILE_AFTER_INSERT@
+
+DROP FUNCTION FULLDESC@
+
+DROP FUNCTION DEFDATE@
+DROP FUNCTION HUNDATE@
+DROP FUNCTION HIGHLIGHT@
+
+DROP VIEW VW_ITEMS@
+DROP VIEW VW_ITEMS_DESCRIPTION@