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 (isVirtual,name) VALUES (true,'akonadi_search_resource')

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

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

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,
                           mimeTypeId int8,
                           datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                           atime TIMESTAMP,
                           dirty BOOL,
                           size int8 NOT NULL DEFAULT 0)

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,
                        name TEXT NOT NULL,
                        data BYTEA,
                        datasize int8 NOT NULL,
                        version INTEGER DEFAULT 0,
                        external BOOL DEFAULT false)

CREATE TABLE CollectionAttributeTable (id SERIAL PRIMARY KEY,
                                       collectionId int8 NOT NULL,
                                       type BYTEA NOT NULL,
                                       value BYTEA)

CREATE TABLE PimItemFlagRelation (PimItem_id int8 NOT NULL,
                                  Flag_id int8 NOT NULL,
                                  PRIMARY KEY (PimItem_id, Flag_id))

CREATE TABLE CollectionMimeTypeRelation (Collection_id int8 NOT NULL,
                                         MimeType_id int8 NOT NULL,
                                         PRIMARY KEY (Collection_id, MimeType_id))

CREATE TABLE CollectionPimItemRelation (Collection_id int8 NOT NULL,
                                        PimItem_id int8 NOT NULL,
                                        PRIMARY KEY (Collection_id, PimItem_id))

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 CONSTRAINT CollectionTableparentId_Collectionid_fk FOREIGN KEY (parentId) REFERENCES CollectionTable(id) ON UPDATE CASCADE ON DELETE CASCADE

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

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

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

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

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