CREATE TABLE KeywordSelects (
  id serial NOT NULL  ,
  Name varchar(255)   ,
  Keyword integer   ,
  Single integer   ,
  Depth integer NOT NULL DEFAULT 0 ,
  ObjectType varchar(32) NOT NULL  ,
  ObjectField varchar(32)   ,
  ObjectValue varchar(255)   ,
  Disabled int2 NOT NULL DEFAULT 0 ,
  PRIMARY KEY (id)
);
CREATE INDEX KeywordSelects1 ON KeywordSelects (Keyword);
CREATE INDEX KeywordSelects2 ON KeywordSelects (ObjectType, ObjectField, ObjectValue);
CREATE TABLE Attachments (
  id serial NOT NULL  ,
  TransactionId integer NOT NULL  ,
  Parent integer   ,
  MessageId varchar(160)   ,
  Subject varchar(255)   ,
  Filename varchar(255)   ,
  ContentType varchar(80)   ,
  ContentEncoding varchar(80)   ,
  Content TEXT   ,
  Headers TEXT   ,
  Creator integer   ,
  Created timestamp   ,
  PRIMARY KEY (id)
);
CREATE INDEX Attachments1 ON Attachments (Parent);
CREATE INDEX Attachments2 ON Attachments (TransactionId);
CREATE INDEX Attachments3 ON Attachments (Parent, TransactionId);
CREATE TABLE Queues (
  id serial NOT NULL  ,
  Name varchar(120) NOT NULL  ,
  Description varchar(120)   ,
  CorrespondAddress varchar(120)   ,
  CommentAddress varchar(120)   ,
  InitialPriority integer   ,
  FinalPriority integer   ,
  DefaultDueIn integer   ,
  Creator integer   ,
  Created timestamp   ,
  LastUpdatedBy integer   ,
  LastUpdated timestamp   ,
  Disabled int2 NOT NULL DEFAULT 0 ,
  PRIMARY KEY (id)
);
CREATE UNIQUE INDEX Queues1 ON Queues (Name);
CREATE TABLE Links (
  id serial NOT NULL  ,
  Base varchar(240)   ,
  Target varchar(240)   ,
  Type varchar(20) NOT NULL  ,
  LocalTarget integer   ,
  LocalBase integer   ,
  LastUpdatedBy integer   ,
  LastUpdated timestamp   ,
  Creator integer   ,
  Created timestamp   ,
  PRIMARY KEY (id)
);
CREATE UNIQUE INDEX Links1 ON Links (Base, Target, Type);
CREATE TABLE Groups (
  id serial NOT NULL  ,
  Name varchar(16)   ,
  Description varchar(64)   ,
  Pseudo integer NOT NULL DEFAULT 0 ,
  PRIMARY KEY (id)
);
CREATE UNIQUE INDEX Groups1 ON Groups (Name);
CREATE TABLE Watchers (
  id serial NOT NULL  ,
  Type varchar(16)   ,
  Scope varchar(16)   ,
  Value integer   ,
  Email varchar(255)   ,
  Quiet integer   ,
  Owner integer   ,
  Creator integer   ,
  Created timestamp   ,
  LastUpdatedBy integer   ,
  LastUpdated timestamp   ,
  PRIMARY KEY (id)
);
CREATE INDEX Watchers1 ON Watchers (Scope, Value, Type, Owner);
CREATE TABLE ScripConditions (
  id serial NOT NULL  ,
  Name varchar(255)   ,
  Description varchar(255)   ,
  ExecModule varchar(60)   ,
  Argument varchar(255)   ,
  ApplicableTransTypes varchar(60)   ,
  Creator integer   ,
  Created timestamp   ,
  LastUpdatedBy integer   ,
  LastUpdated timestamp   ,
  PRIMARY KEY (id)
);
CREATE TABLE Transactions (
  id serial NOT NULL  ,
  EffectiveTicket integer   ,
  Ticket integer   ,
  TimeTaken integer   ,
  Type varchar(20)   ,
  Field varchar(40)   ,
  OldValue varchar(255)   ,
  NewValue varchar(255)   ,
  Data varchar(100)   ,
  Creator integer   ,
  Created timestamp   ,
  PRIMARY KEY (id)
);
CREATE INDEX Transactions1 ON Transactions (Ticket);
CREATE INDEX Transactions2 ON Transactions (EffectiveTicket);
CREATE TABLE Scrips (
  id serial NOT NULL  ,
  ScripCondition integer   ,
  ScripAction integer   ,
  Stage varchar(32)   ,
  Queue integer   ,
  Template integer   ,
  Creator integer   ,
  Created timestamp   ,
  LastUpdatedBy integer   ,
  LastUpdated timestamp   ,
  PRIMARY KEY (id)
);
CREATE TABLE ACL (
  id serial NOT NULL  ,
  PrincipalId integer   ,
  PrincipalType varchar(25)   ,
  RightName varchar(25)   ,
  RightScope varchar(25)   ,
  RightAppliesTo integer   ,
  PRIMARY KEY (id)
);
CREATE INDEX ACL1 ON ACL (RightScope, PrincipalId);
CREATE INDEX ACL2 ON ACL (RightScope, RightAppliesTo, RightName, PrincipalType, PrincipalId);
CREATE TABLE GroupMembers (
  id serial NOT NULL  ,
  GroupId integer   ,
  UserId integer   ,
  PRIMARY KEY (id)
);
CREATE UNIQUE INDEX GroupMembers1 ON GroupMembers (GroupId, UserId);
CREATE TABLE ObjectKeywords (
  id serial NOT NULL  ,
  Keyword integer NOT NULL  ,
  KeywordSelect integer NOT NULL  ,
  ObjectType varchar(32) NOT NULL  ,
  ObjectId integer NOT NULL  ,
  PRIMARY KEY (id)
);
CREATE UNIQUE INDEX ObjectKeywords1 ON ObjectKeywords (ObjectId, ObjectType, KeywordSelect, Keyword);
CREATE INDEX ObjectKeywords2 ON ObjectKeywords (ObjectId, ObjectType);
CREATE INDEX ObjectKeywords3 ON ObjectKeywords (Keyword);
CREATE TABLE Keywords (
  id serial NOT NULL  ,
  Name varchar(255) NOT NULL  ,
  Description varchar(255)   ,
  Parent integer   ,
  Disabled int2 NOT NULL DEFAULT 0 ,
  PRIMARY KEY (id)
);
CREATE UNIQUE INDEX Keywords1 ON Keywords (Name, Parent);
CREATE INDEX Keywords2 ON Keywords (Name);
CREATE INDEX Keywords3 ON Keywords (Parent);
CREATE TABLE Users (
  id serial NOT NULL  ,
  Name varchar(120) NOT NULL  ,
  Password varchar(40)   ,
  Comments TEXT   ,
  Signature TEXT   ,
  EmailAddress varchar(120)   ,
  FreeformContactInfo TEXT   ,
  Organization varchar(200)   ,
  Privileged integer   ,
  RealName varchar(120)   ,
  Nickname varchar(16)   ,
  Lang varchar(16)   ,
  EmailEncoding varchar(16)   ,
  WebEncoding varchar(16)   ,
  ExternalContactInfoId varchar(100)   ,
  ContactInfoSystem varchar(30)   ,
  ExternalAuthId varchar(100)   ,
  AuthSystem varchar(30)   ,
  Gecos varchar(16)   ,
  HomePhone varchar(30)   ,
  WorkPhone varchar(30)   ,
  MobilePhone varchar(30)   ,
  PagerPhone varchar(30)   ,
  Address1 varchar(200)   ,
  Address2 varchar(200)   ,
  City varchar(100)   ,
  State varchar(100)   ,
  Zip varchar(16)   ,
  Country varchar(50)   ,
  Creator integer   ,
  Created timestamp   ,
  LastUpdatedBy integer   ,
  LastUpdated timestamp   ,
  Disabled int2 NOT NULL DEFAULT 0 ,
  PRIMARY KEY (id)
);
CREATE UNIQUE INDEX Users1 ON Users (Name);
CREATE INDEX Users3 ON Users (id, EmailAddress);
CREATE INDEX Users4 ON Users (EmailAddress);
CREATE TABLE Tickets (
  id serial NOT NULL  ,
  EffectiveId integer   ,
  Queue integer   ,
  Type varchar(16)   ,
  IssueStatement integer   ,
  Resolution integer   ,
  Owner integer   ,
  Subject varchar(200)  DEFAULT '[no subject]' ,
  InitialPriority integer   ,
  FinalPriority integer   ,
  Priority integer   ,
  Status varchar(10)   ,
  TimeWorked integer   ,
  TimeLeft integer   ,
  Told timestamp   ,
  Starts timestamp   ,
  Started timestamp   ,
  Due timestamp   ,
  Resolved timestamp   ,
  LastUpdatedBy integer   ,
  LastUpdated timestamp   ,
  Creator integer   ,
  Created timestamp   ,
  Disabled int2 NOT NULL DEFAULT 0 ,
  PRIMARY KEY (id)
);
CREATE INDEX Tickets1 ON Tickets (Queue, Status);
CREATE INDEX Tickets2 ON Tickets (Owner);
CREATE INDEX Tickets3 ON Tickets (EffectiveId);
CREATE INDEX Tickets4 ON Tickets (id, Status);
CREATE INDEX Tickets5 ON Tickets (id, EffectiveId);
CREATE TABLE ScripActions (
  id serial NOT NULL  ,
  Name varchar(255)   ,
  Description varchar(255)   ,
  ExecModule varchar(60)   ,
  Argument varchar(255)   ,
  Creator integer   ,
  Created timestamp   ,
  LastUpdatedBy integer   ,
  LastUpdated timestamp   ,
  PRIMARY KEY (id)
);
CREATE TABLE Templates (
  id serial NOT NULL  ,
  Queue integer NOT NULL DEFAULT 0 ,
  Name varchar(40) NOT NULL  ,
  Description varchar(120)   ,
  Type varchar(16)   ,
  Language varchar(16)   ,
  TranslationOf integer   ,
  Content TEXT   ,
  LastUpdated timestamp   ,
  LastUpdatedBy integer   ,
  Creator integer   ,
  Created timestamp   ,
  PRIMARY KEY (id)
);
