CREATE TABLE SchemaVersionTable (version INTEGER NOT NULL DEFAULT 0)

INSERT INTO SchemaVersionTable (version) VALUES (22)

CREATE TABLE ResourceTable (id BIGINT NOT NULL IDENTITY PRIMARY KEY,
                            name VARCHAR(255) NOT NULL UNIQUE,
                            isVirtual CHAR DEFAULT 0)

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

CREATE TABLE CollectionTable (id BIGINT NOT NULL IDENTITY PRIMARY KEY,
                              remoteId VARCHAR(255),
                              remoteRevision VARCHAR(255),
                              name VARCHAR(255) NOT NULL,
                              parentId BIGINT REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                              resourceId BIGINT NOT NULL REFERENCES ResourceTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                              subscribed CHAR NOT NULL DEFAULT 1,
                              cachePolicyInherit CHAR NOT NULL DEFAULT 1,
                              cachePolicyCheckInterval INTEGER NOT NULL DEFAULT -1,
                              cachePolicyCacheTimeout INTEGER NOT NULL DEFAULT -1,
                              cachePolicySyncOnDemand CHAR NOT NULL DEFAULT 0,
                              cachePolicyLocalParts VARCHAR(255),
                              queryString VARCHAR(32768),
                              queryLanguage VARCHAR(255))

CREATE UNIQUE INDEX CollectionTable_parentAndNameIndex ON CollectionTable (parentId,name)

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

CREATE TABLE MimeTypeTable (id BIGINT NOT NULL IDENTITY PRIMARY KEY,
                            name VARCHAR(255) NOT NULL UNIQUE)

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 IDENTITY PRIMARY KEY,
                           rev INTEGER NOT NULL DEFAULT 0,
                           remoteId VARCHAR(255),
                           remoteRevision VARCHAR(255),
                           collectionId BIGINT REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                           mimeTypeId BIGINT REFERENCES MimeTypeTable(id) ON UPDATE CASCADE ON DELETE RESTRICT,
                           datetime TIMESTAMP,
                           atime TIMESTAMP,
                           dirty CHAR,
                           size BIGINT NOT NULL DEFAULT 0)

CREATE INDEX PimItemTable_collectionIndex ON PimItemTable (collectionId)

CREATE TABLE FlagTable (id BIGINT NOT NULL IDENTITY PRIMARY KEY,
                        name VARCHAR(255) NOT NULL UNIQUE)

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 IDENTITY PRIMARY KEY,
                        pimItemId BIGINT NOT NULL REFERENCES PimItemTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                        name VARCHAR(255) NOT NULL,
                        data LONG VARCHAR,
                        datasize BIGINT NOT NULL,
                        version INTEGER DEFAULT 0,
                        external CHAR DEFAULT 0)

CREATE UNIQUE INDEX PartTable_pimItemIdNameIndex ON PartTable (pimItemId,name)

CREATE INDEX PartTable_pimItemNameIndex ON PartTable (name)

CREATE TABLE CollectionAttributeTable (id BIGINT NOT NULL IDENTITY PRIMARY KEY,
                                       collectionId BIGINT NOT NULL REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                                       type LONG VARCHAR NOT NULL,
                                       value LONG VARCHAR)

CREATE INDEX CollectionAttributeTable_collectionIndex ON CollectionAttributeTable (collectionId)

CREATE TABLE PimItemFlagRelation (PimItem_id BIGINT NOT NULL REFERENCES PimItemTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                                  Flag_id BIGINT NOT NULL REFERENCES FlagTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                                  PRIMARY KEY (PimItem_id, Flag_id))

CREATE TABLE CollectionMimeTypeRelation (Collection_id BIGINT NOT NULL REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                                         MimeType_id BIGINT NOT NULL REFERENCES MimeTypeTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                                         PRIMARY KEY (Collection_id, MimeType_id))

CREATE TABLE CollectionPimItemRelation (Collection_id BIGINT NOT NULL REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                                        PimItem_id BIGINT NOT NULL REFERENCES PimItemTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                                        PRIMARY KEY (Collection_id, PimItem_id))
