CREATE TABLE IF NOT EXISTS "sync" (
  `id`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  `entityName`	TEXT NOT NULL,
  `entityId`	TEXT NOT NULL,
  `sourceId` TEXT NOT NULL,
  `syncDate`	TEXT NOT NULL);
CREATE UNIQUE INDEX `IDX_sync_entityName_entityId` ON `sync` (
  `entityName`,
  `entityId`
);
CREATE INDEX `IDX_sync_syncDate` ON `sync` (
  `syncDate`
);
CREATE TABLE IF NOT EXISTS "source_ids" (
  `sourceId`	TEXT NOT NULL,
  `dateCreated`	TEXT NOT NULL,
  PRIMARY KEY(`sourceId`)
);
CREATE TABLE IF NOT EXISTS "note_revisions" (
  `noteRevisionId`	TEXT NOT NULL PRIMARY KEY,
  `noteId`	TEXT NOT NULL,
  `title`	TEXT,
  `content`	TEXT,
  `isProtected`	INT NOT NULL DEFAULT 0,
  `dateModifiedFrom` TEXT NOT NULL,
  `dateModifiedTo` TEXT NOT NULL
, type TEXT DEFAULT '' NOT NULL, mime TEXT DEFAULT '' NOT NULL, hash TEXT DEFAULT "" NOT NULL);
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (
  `noteId`
);
CREATE INDEX `IDX_note_revisions_dateModifiedFrom` ON `note_revisions` (
  `dateModifiedFrom`
);
CREATE INDEX `IDX_note_revisions_dateModifiedTo` ON `note_revisions` (
  `dateModifiedTo`
);
CREATE TABLE IF NOT EXISTS "api_tokens"
(
  apiTokenId TEXT PRIMARY KEY NOT NULL,
  token TEXT NOT NULL,
  dateCreated TEXT NOT NULL,
  isDeleted INT NOT NULL DEFAULT 0
, hash TEXT DEFAULT "" NOT NULL);
CREATE TABLE IF NOT EXISTS "branches" (
  `branchId`	TEXT NOT NULL,
  `noteId`	TEXT NOT NULL,
  `parentNoteId`	TEXT NOT NULL,
  `notePosition`	INTEGER NOT NULL,
  `prefix`	TEXT,
  `isExpanded`	BOOLEAN,
  `isDeleted`	INTEGER NOT NULL DEFAULT 0,
  `dateModified`	TEXT NOT NULL, hash TEXT DEFAULT "" NOT NULL, dateCreated TEXT NOT NULL DEFAULT '1970-01-01T00:00:00.000Z',
  PRIMARY KEY(`branchId`)
);
CREATE INDEX `IDX_branches_noteId` ON `branches` (
  `noteId`
);
CREATE INDEX `IDX_branches_noteId_parentNoteId` ON `branches` (
  `noteId`,
  `parentNoteId`
);
CREATE INDEX IDX_branches_parentNoteId ON branches (parentNoteId);
CREATE TABLE IF NOT EXISTS "recent_notes" (
  `branchId` TEXT NOT NULL PRIMARY KEY,
  `notePath` TEXT NOT NULL,
  hash TEXT DEFAULT "" NOT NULL,
  `dateCreated` TEXT NOT NULL,
  isDeleted INT
);
CREATE TABLE IF NOT EXISTS "event_log" (
  `eventId`	TEXT NOT NULL PRIMARY KEY,
  `noteId`	TEXT,
  `comment`	TEXT,
  `dateCreated`	TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS "options"
(
  name TEXT not null PRIMARY KEY,
  value TEXT,
  dateModified INT,
  isSynced INTEGER default 0 not null,
  hash TEXT default "" not null,
  dateCreated TEXT default '1970-01-01T00:00:00.000Z' not null
);
CREATE TABLE attributes
(
  attributeId      TEXT not null primary key,
  noteId       TEXT not null,
  type         TEXT not null,
  name         TEXT not null,
  value        TEXT default '' not null,
  position     INT  default 0 not null,
  dateCreated  TEXT not null,
  dateModified TEXT not null,
  isDeleted    INT  not null,
  hash         TEXT default "" not null, isInheritable int DEFAULT 0 NULL);
CREATE INDEX IDX_attributes_name_value
  on attributes (name, value);
CREATE TABLE IF NOT EXISTS "links" (
  `linkId`	TEXT NOT NULL,
  `noteId`	TEXT NOT NULL,
  `targetNoteId`	TEXT NOT NULL,
  `type` TEXT NOT NULL,
  `hash` TEXT DEFAULT "" NOT NULL,
  `isDeleted`	INTEGER NOT NULL DEFAULT 0,
  `dateCreated`	TEXT NOT NULL,
  `dateModified`	TEXT NOT NULL,
  PRIMARY KEY(`linkId`)
);
CREATE INDEX IDX_links_noteId_index
  on links (noteId);
CREATE INDEX IDX_links_targetNoteId_index
  on links (targetNoteId);
CREATE INDEX IDX_attributes_name_index
  on attributes (name);
CREATE INDEX IDX_attributes_noteId_index
  on attributes (noteId);
CREATE INDEX IDX_attributes_value_index
  on attributes (value);
CREATE TABLE IF NOT EXISTS "note_contents" (
  `noteContentId`	TEXT NOT NULL,
  `noteId`	TEXT NOT NULL,
  `isProtected`	INT NOT NULL DEFAULT 0,
  `content`	TEXT NULL DEFAULT NULL,
  `hash` TEXT DEFAULT "" NOT NULL,
  `dateCreated`	TEXT NOT NULL,
  `dateModified` TEXT NOT NULL,
  PRIMARY KEY(`noteContentId`)
);
CREATE UNIQUE INDEX `IDX_note_contents_noteId` ON `note_contents` (`noteId`);
CREATE TABLE IF NOT EXISTS "notes" (
  `noteId`	TEXT NOT NULL,
  `title`	TEXT NOT NULL DEFAULT "note",
  `isProtected`	INT NOT NULL DEFAULT 0,
  `type` TEXT NOT NULL DEFAULT 'text',
  `mime` TEXT NOT NULL DEFAULT 'text/html',
  `hash` TEXT DEFAULT "" NOT NULL,
  `isDeleted`	INT NOT NULL DEFAULT 0,
  `dateCreated`	TEXT NOT NULL,
  `dateModified`	TEXT NOT NULL,
  PRIMARY KEY(`noteId`)
);
