CREATE TABLE SchemaVersionTable (version INTEGER NOT NULL DEFAULT 0)

INSERT INTO SchemaVersionTable (version) VALUES (22)

CREATE TABLE ResourceTable (id SERIAL PRIMARY KEY,
                            name TEXT UNIQUE NOT NULL,
                            isVirtual BOOL DEFAULT false)

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

CREATE TABLE CollectionTable (id SERIAL PRIMARY KEY,
                              remoteId TEXT,
                              remoteRevision TEXT,
                              name TEXT NOT NULL,
                              parentId int8 REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                              resourceId int8 NOT NULL REFERENCES ResourceTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                              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 TEXT,
                              queryString TEXT,
                              queryLanguage TEXT)

CREATE UNIQUE INDEX CollectionTable_parentAndNameIndex ON CollectionTable (parentId,name)

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

CREATE TABLE MimeTypeTable (id SERIAL PRIMARY KEY,
                            name TEXT UNIQUE NOT NULL)

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 SERIAL PRIMARY KEY,
                           rev INTEGER NOT NULL DEFAULT 0,
                           remoteId TEXT,
                           remoteRevision TEXT,
                           collectionId int8 REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                           mimeTypeId int8 REFERENCES MimeTypeTable(id) ON UPDATE CASCADE ON DELETE RESTRICT,
                           datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                           atime TIMESTAMP,
                           dirty BOOL,
                           size int8 NOT NULL DEFAULT 0)

CREATE INDEX PimItemTable_collectionIndex ON PimItemTable (collectionId)

CREATE TABLE FlagTable (id SERIAL PRIMARY KEY,
                        name TEXT UNIQUE NOT NULL)

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 SERIAL PRIMARY KEY,
                        pimItemId int8 NOT NULL REFERENCES PimItemTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                        name TEXT NOT NULL,
                        data BYTEA,
                        datasize int8 NOT NULL,
                        version INTEGER DEFAULT 0,
                        external BOOL DEFAULT false)

CREATE UNIQUE INDEX PartTable_pimItemIdNameIndex ON PartTable (pimItemId,name)

CREATE INDEX PartTable_pimItemNameIndex ON PartTable (name)

CREATE TABLE CollectionAttributeTable (id SERIAL PRIMARY KEY,
                                       collectionId int8 NOT NULL REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE,
                                       type BYTEA NOT NULL,
                                       value BYTEA)

CREATE INDEX CollectionAttributeTable_collectionIndex ON CollectionAttributeTable (collectionId)

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

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

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