CREATE TABLE SchemaVersionTable (version INTEGER NOT NULL DEFAULT 0)
                                COLLATE=utf8_general_ci DEFAULT CHARSET=utf8

INSERT INTO SchemaVersionTable (version) VALUES (22)

CREATE TABLE ResourceTable (id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
                            name VARBINARY(255) NOT NULL UNIQUE,
                            isVirtual BOOL DEFAULT false)
                            COLLATE=utf8_general_ci DEFAULT CHARSET=utf8

INSERT INTO ResourceTable (isVirtual,name) VALUES (true,'akonadi_search_resource')

CREATE TABLE CollectionTable (id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
                              remoteId VARBINARY(255),
                              remoteRevision VARBINARY(255),
                              name VARBINARY(255) NOT NULL,
                              parentId BIGINT,
                              resourceId BIGINT NOT NULL,
                              subscribed BOOL NOT NULL DEFAULT true,
                              cachePolicyInherit BOOL NOT NULL DEFAULT true,
                              cachePolicyCheckInterval INTEGER NOT NULL DEFAULT -1,
                              cachePolicyCacheTimeout INTEGER NOT NULL DEFAULT -1,
                              cachePolicySyncOnDemand BOOL NOT NULL DEFAULT false,
                              cachePolicyLocalParts VARBINARY(255),
                              queryString VARBINARY(32768),
                              queryLanguage VARBINARY(255),
                              FOREIGN KEY (parentId) REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                              FOREIGN KEY (resourceId) REFERENCES ResourceTable(id) ON UPDATE CASCADE ON DELETE CASCADE)
                              COLLATE=utf8_general_ci DEFAULT CHARSET=utf8

INSERT INTO CollectionTable (name,parentId,resourceId) VALUES ('Search',NULL,1)

CREATE TABLE MimeTypeTable (id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
                            name VARBINARY(255) NOT NULL UNIQUE)
                            COLLATE=utf8_general_ci DEFAULT CHARSET=utf8

INSERT INTO MimeTypeTable (name) VALUES ('application/octet-stream')

INSERT INTO MimeTypeTable (name) VALUES ('message/rfc822')

INSERT INTO MimeTypeTable (name) VALUES ('text/calendar')

INSERT INTO MimeTypeTable (name) VALUES ('text/vcard')

INSERT INTO MimeTypeTable (name) VALUES ('inode/directory')

CREATE TABLE PimItemTable (id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
                           rev INTEGER NOT NULL DEFAULT 0,
                           remoteId VARBINARY(255),
                           remoteRevision VARBINARY(255),
                           collectionId BIGINT,
                           mimeTypeId BIGINT,
                           datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                           atime TIMESTAMP,
                           dirty BOOL,
                           size BIGINT NOT NULL DEFAULT 0,
                           FOREIGN KEY (collectionId) REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                           FOREIGN KEY (mimeTypeId) REFERENCES MimeTypeTable(id) ON UPDATE CASCADE ON DELETE RESTRICT)
                           COLLATE=utf8_general_ci DEFAULT CHARSET=utf8

CREATE TABLE FlagTable (id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
                        name VARBINARY(255) NOT NULL UNIQUE)
                        COLLATE=utf8_general_ci DEFAULT CHARSET=utf8

INSERT INTO FlagTable (name) VALUES ('important')

INSERT INTO FlagTable (name) VALUES ('has_attachment')

INSERT INTO FlagTable (name) VALUES ('spam')

INSERT INTO FlagTable (name) VALUES ('\\ANSWERED')

INSERT INTO FlagTable (name) VALUES ('\\FLAGGED')

INSERT INTO FlagTable (name) VALUES ('\\DELETED')

INSERT INTO FlagTable (name) VALUES ('\\SEEN')

INSERT INTO FlagTable (name) VALUES ('\\DRAFT')

CREATE TABLE PartTable (id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
                        pimItemId BIGINT NOT NULL,
                        name VARBINARY(255) NOT NULL,
                        data LONGBLOB,
                        datasize BIGINT NOT NULL,
                        version INTEGER DEFAULT 0,
                        external BOOL DEFAULT false,
                        FOREIGN KEY (pimItemId) REFERENCES PimItemTable(id) ON UPDATE CASCADE ON DELETE CASCADE)
                        COLLATE=utf8_general_ci DEFAULT CHARSET=utf8

CREATE TABLE CollectionAttributeTable (id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
                                       collectionId BIGINT NOT NULL,
                                       type LONGBLOB NOT NULL,
                                       value LONGBLOB,
                                       FOREIGN KEY (collectionId) REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE)
                                       COLLATE=utf8_general_ci DEFAULT CHARSET=utf8

CREATE TABLE PimItemFlagRelation (PimItem_id BIGINT NOT NULL,
                                  Flag_id BIGINT NOT NULL,
                                  PRIMARY KEY (PimItem_id, Flag_id),
                                  FOREIGN KEY (PimItem_id) REFERENCES PimItemTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                                  FOREIGN KEY (Flag_id) REFERENCES FlagTable(id) ON UPDATE CASCADE ON DELETE CASCADE) COLLATE=utf8_general_ci DEFAULT CHARSET=utf8

CREATE TABLE CollectionMimeTypeRelation (Collection_id BIGINT NOT NULL,
                                         MimeType_id BIGINT NOT NULL,
                                         PRIMARY KEY (Collection_id, MimeType_id),
                                         FOREIGN KEY (Collection_id) REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                                         FOREIGN KEY (MimeType_id) REFERENCES MimeTypeTable(id) ON UPDATE CASCADE ON DELETE CASCADE) COLLATE=utf8_general_ci DEFAULT CHARSET=utf8

CREATE TABLE CollectionPimItemRelation (Collection_id BIGINT NOT NULL,
                                        PimItem_id BIGINT NOT NULL,
                                        PRIMARY KEY (Collection_id, PimItem_id),
                                        FOREIGN KEY (Collection_id) REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                                        FOREIGN KEY (PimItem_id) REFERENCES PimItemTable(id) ON UPDATE CASCADE ON DELETE CASCADE) COLLATE=utf8_general_ci DEFAULT CHARSET=utf8

CREATE UNIQUE INDEX CollectionTable_parentAndNameIndex ON CollectionTable (parentId,name)

CREATE INDEX PimItemTable_collectionIndex ON PimItemTable (collectionId)

CREATE UNIQUE INDEX PartTable_pimItemIdNameIndex ON PartTable (pimItemId,name)

CREATE INDEX PartTable_pimItemNameIndex ON PartTable (name)

CREATE INDEX CollectionAttributeTable_collectionIndex ON CollectionAttributeTable (collectionId)

ALTER TABLE CollectionTable ADD FOREIGN KEY (parentId) REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE

ALTER TABLE CollectionTable ADD FOREIGN KEY (resourceId) REFERENCES ResourceTable(id) ON UPDATE CASCADE ON DELETE CASCADE

ALTER TABLE PimItemTable ADD FOREIGN KEY (collectionId) REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE

ALTER TABLE PimItemTable ADD FOREIGN KEY (mimeTypeId) REFERENCES MimeTypeTable(id) ON UPDATE CASCADE ON DELETE RESTRICT

ALTER TABLE PartTable ADD FOREIGN KEY (pimItemId) REFERENCES PimItemTable(id) ON UPDATE CASCADE ON DELETE CASCADE

ALTER TABLE CollectionAttributeTable ADD FOREIGN KEY (collectionId) REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE

ALTER TABLE PimItemFlagRelation ADD FOREIGN KEY (PimItem_id) REFERENCES PimItemTable(id) ON UPDATE CASCADE ON DELETE CASCADE

ALTER TABLE PimItemFlagRelation ADD FOREIGN KEY (Flag_id) REFERENCES FlagTable(id) ON UPDATE CASCADE ON DELETE CASCADE

ALTER TABLE CollectionMimeTypeRelation ADD FOREIGN KEY (Collection_id) REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE

ALTER TABLE CollectionMimeTypeRelation ADD FOREIGN KEY (MimeType_id) REFERENCES MimeTypeTable(id) ON UPDATE CASCADE ON DELETE CASCADE

ALTER TABLE CollectionPimItemRelation ADD FOREIGN KEY (Collection_id) REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE

ALTER TABLE CollectionPimItemRelation ADD FOREIGN KEY (PimItem_id) REFERENCES PimItemTable(id) ON UPDATE CASCADE ON DELETE CASCADE

