
CREATE SEQUENCE ATTACHMENTS_seq;
CREATE TABLE Attachments (
  	id 		NUMBER(11,0) 
			CONSTRAINT Attachments_Key PRIMARY KEY,
  	TransactionId	NUMBER(11,0) NOT NULL,
	Parent 		NUMBER(11,0) DEFAULT 0 NOT NULL, 
  	MessageId 	VARCHAR2(160),
  	Subject 	VARCHAR2(255),
  	Filename 	VARCHAR2(255),
  	ContentType 	VARCHAR2(80),
  	ContentEncoding VARCHAR2(80),
  	Content 	CLOB,
  	Headers 	CLOB,
	Creator 	NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Created 	DATE
);
CREATE INDEX Attachments2 ON Attachments (TransactionId);
CREATE INDEX Attachments3 ON Attachments (Parent, TransactionId);


CREATE SEQUENCE QUEUES_seq;
CREATE TABLE Queues (
	id 			NUMBER(11,0) 
		CONSTRAINT Queues_Key PRIMARY KEY,
	Name 			VARCHAR2(200) CONSTRAINT Queues_Name_Unique UNIQUE NOT NULL,
	Description 		VARCHAR2(255),
	CorrespondAddress 	VARCHAR2(120),
	CommentAddress 		VARCHAR2(120),
	InitialPriority 	NUMBER(11,0) DEFAULT 0 NOT NULL,
	FinalPriority 		NUMBER(11,0) DEFAULT 0 NOT NULL,
	DefaultDueIn 		NUMBER(11,0) DEFAULT 0 NOT NULL,
	Creator 		NUMBER(11,0) DEFAULT 0 NOT NULL,
	Created 		DATE,
	LastUpdatedBy 		NUMBER(11,0) DEFAULT 0 NOT NULL,
	LastUpdated		DATE,
	Disabled 		NUMBER(11,0) DEFAULT 0 NOT NULL
);
 CREATE  INDEX Queues1 ON Queues (LOWER(Name));
CREATE INDEX Queues2 ON Queues (Disabled);


CREATE SEQUENCE LINKS_seq;
CREATE TABLE Links (
  	id 		NUMBER(11,0) 
		CONSTRAINT Links_Key PRIMARY KEY,
	Base 		VARCHAR2(240),
	Target 		VARCHAR2(240),
  	Type 		VARCHAR2(20) NOT NULL,
	LocalTarget	NUMBER(11,0) DEFAULT 0 NOT NULL,
	LocalBase	NUMBER(11,0) DEFAULT 0 NOT NULL,
	LastUpdatedBy 	NUMBER(11,0) DEFAULT 0 NOT NULL,
  	LastUpdated 	DATE,
	Creator 	NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Created 	DATE
);
CREATE UNIQUE INDEX Links1 ON Links (Base, Target, Type);
CREATE INDEX Links2 ON Links (Base, Type);
CREATE INDEX Links3 ON Links (Target, Type);
CREATE INDEX Links4 ON Links(Type,LocalBase);


CREATE SEQUENCE PRINCIPALS_seq;
CREATE TABLE Principals (
	id		NUMBER(11,0) 
		CONSTRAINT Principals_Key PRIMARY KEY,
	PrincipalType	VARCHAR2(16),
	ObjectId	NUMBER(11,0),
	Disabled	NUMBER(11,0) DEFAULT 0 NOT NULL
);
CREATE UNIQUE  INDEX Principals2 ON Principals (ObjectId);


CREATE SEQUENCE GROUPS_seq;
CREATE TABLE Groups (
	id 		NUMBER(11,0) 
		CONSTRAINT Groups_Key PRIMARY KEY,
	Name 		VARCHAR2(200),
	Description 	VARCHAR2(255),
	Domain		VARCHAR2(64),
	Type		VARCHAR2(64),
	Instance	NUMBER(11,0) DEFAULT 0 -- NOT NULL
--	Instance	VARCHAR2(64)
);
CREATE INDEX Groups1 ON Groups (LOWER(Domain), Instance, LOWER(Type), id);
CREATE INDEX Groups2 ON Groups (LOWER(Type), Instance, LOWER(Domain));


CREATE SEQUENCE SCRIPCONDITIONS_seq;
CREATE TABLE ScripConditions (
 	id 			NUMBER(11, 0) 
		CONSTRAINT ScripConditions_Key PRIMARY KEY,
	Name 			VARCHAR2(200),
	Description 		VARCHAR2(255),
	ExecModule		VARCHAR2(60),
	Argument		VARCHAR2(255),
	ApplicableTransTypes	VARCHAR2(60),
  	Creator 		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Created 		DATE,
  	LastUpdatedBy 		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	LastUpdated		DATE
);


CREATE SEQUENCE TRANSACTIONS_seq;
CREATE TABLE Transactions (
  	id 			NUMBER(11,0) 
		CONSTRAINT Transactions_Key PRIMARY KEY,
  	ObjectType 		VARCHAR2(255),
  	ObjectId		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	TimeTaken 		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Type 			VARCHAR2(20),
  	Field 			VARCHAR2(40),
  	OldValue 		VARCHAR2(255),
  	NewValue 		VARCHAR2(255),
  	ReferenceType 		VARCHAR2(255),
  	OldReference 		NUMBER(11,0),
  	NewReference 		NUMBER(11,0),
  	Data 			VARCHAR2(255),
  	Creator 		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Created 		DATE
);
CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId);


CREATE SEQUENCE SCRIPS_seq;
CREATE TABLE Scrips (
  	id 		NUMBER(11,0) 
		CONSTRAINT Scrips_Key PRIMARY KEY,	
	Description	VARCHAR2(255),
	ScripCondition 	NUMBER(11,0) DEFAULT 0 NOT NULL,
	ScripAction	NUMBER(11,0) DEFAULT 0 NOT NULL,
	ConditionRules	CLOB,
	ActionRules	CLOB,
	CustomIsApplicableCode	CLOB,
	CustomPrepareCode	CLOB,
	CustomCommitCode	CLOB,
	Stage		VARCHAR2(32),
	Queue		NUMBER(11,0) DEFAULT 0 NOT NULL,
	Template	NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Creator 	NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Created 	DATE,
  	LastUpdatedBy 	NUMBER(11,0) DEFAULT 0 NOT NULL,
  	LastUpdated 	DATE  
);


CREATE SEQUENCE ACL_seq;
CREATE TABLE ACL (
	id 		NUMBER(11,0) 
		CONSTRAINT ACL_Key PRIMARY KEY,
	PrincipalType 	VARCHAR2(25) NOT NULL,
	PrincipalId 	NUMBER(11,0) NOT NULL,
	RightName	VARCHAR2(25) NOT NULL,
	ObjectType	VARCHAR2(25) NOT NULL,
	ObjectId	NUMBER(11,0) DEFAULT 0 NOT NULL,
	DelegatedBy	NUMBER(11,0) DEFAULT 0 NOT NULL,
	DelegatedFrom	NUMBER(11,0) DEFAULT 0 NOT NULL
);
CREATE INDEX ACL1 ON ACL(RightName, ObjectType, ObjectId, PrincipalType, PrincipalId);


CREATE SEQUENCE GROUPMEMBERS_seq;
CREATE TABLE GroupMembers (
	id 		NUMBER(11,0) 
		CONSTRAINT GroupMembers_Key PRIMARY KEY,
	GroupId 	NUMBER(11,0) DEFAULT 0 NOT NULL,
	MemberId 	NUMBER(11,0) DEFAULT 0 NOT NULL
);
CREATE UNIQUE INDEX GroupMembers1 ON GroupMembers (GroupId, MemberId);


CREATE SEQUENCE CachedGroupMembers_seq;
CREATE TABLE CachedGroupMembers (
	id		NUMBER(11,0) 
		CONSTRAINT CachedGroupMembers_Key PRIMARY KEY,
	GroupId		NUMBER(11,0),
	MemberId	NUMBER(11,0),
	Via		NUMBER(11,0),
	ImmediateParentId	NUMBER(11,0),
	Disabled	NUMBER(11,0) DEFAULT 0 NOT NULL
);
CREATE INDEX DisGrouMem ON CachedGroupMembers (GroupId, MemberId, Disabled);
CREATE INDEX GrouMem ON CachedGroupMembers (GroupId, MemberId);
CREATE INDEX CachedGroupMembers3 on CachedGroupMembers (MemberId, ImmediateParentId);


CREATE SEQUENCE USERS_seq;
CREATE TABLE Users (
  	id 			NUMBER(11,0) 
		CONSTRAINT Users_Key PRIMARY KEY,
  	Name 			VARCHAR2(200) CONSTRAINT Users_Name_Unique 
		unique  NOT NULL,
  	Password 		VARCHAR2(40),
  	Comments 		CLOB,
  	Signature 		CLOB,
  	EmailAddress 		VARCHAR2(120),
  	FreeFormContactInfo 	CLOB,
	Organization		VARCHAR2(200),
  	RealName 		VARCHAR2(120),
  	NickName 		VARCHAR2(16),
  	Lang 			VARCHAR2(16),
	EmailEncoding		VARCHAR2(16),
	WebEncoding		VARCHAR2(16),
	ExternalContactInfoId	VARCHAR2(100),
	ContactInfoSystem	VARCHAR2(30),
	ExternalAuthId 		VARCHAR2(100),
	AuthSystem		VARCHAR2(30),
	Gecos			VARCHAR2(16),
  	HomePhone 		VARCHAR2(30),
  	WorkPhone 		VARCHAR2(30),
  	MobilePhone 		VARCHAR2(30),
  	PagerPhone 		VARCHAR2(30),
  	Address1	 	VARCHAR2(200),
  	Address2 		VARCHAR2(200),
  	City 			VARCHAR2(100),
  	State 			VARCHAR2(100),
  	Zip 			VARCHAR2(16),
  	Country 		VARCHAR2(50),
	Timezone		VARCHAR2(50),
	PGPKey			CLOB,
  	Creator 		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Created 		DATE,
  	LastUpdatedBy 		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	LastUpdated 		DATE
);
-- CREATE UNIQUE INDEX Users1 ON Users (Name);

CREATE INDEX Users2 ON Users( LOWER(Name));
CREATE INDEX Users4 ON Users (LOWER(EmailAddress));


CREATE SEQUENCE TICKETS_seq;
CREATE TABLE Tickets (
       id                      NUMBER(11, 0) 
               CONSTRAINT Tickets_Key PRIMARY KEY,
  	EffectiveId		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Queue 			NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Type 			VARCHAR2(16), 		
  	IssueStatement 		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Resolution 		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Owner 			NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Subject			VARCHAR2(200) DEFAULT '[no subject]', 
  	InitialPriority 	NUMBER(11,0) DEFAULT 0 NOT NULL,
  	FinalPriority 		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Priority 		NUMBER(11,0) DEFAULT 0 NOT NULL,
	TimeEstimated		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	TimeWorked 		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Status 			VARCHAR2(10), 		
	TimeLeft 		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Told 			DATE,
	Starts			DATE,
	Started			DATE,
  	Due 			DATE,
	Resolved		DATE,
  	LastUpdatedBy 		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	LastUpdated 		DATE,
	Creator 		NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Created 		DATE,
  	Disabled 		NUMBER(11,0) DEFAULT 0 NOT NULL
);
CREATE INDEX Tickets1 ON Tickets (Queue, Status);
CREATE INDEX Tickets2 ON Tickets (Owner);
CREATE INDEX Tickets4 ON Tickets (id, Status);
CREATE INDEX Tickets5 ON Tickets (id, EffectiveId);
CREATE INDEX Tickets6 ON Tickets (EffectiveId, Type);


CREATE SEQUENCE SCRIPACTIONS_seq;
CREATE TABLE ScripActions (
  id		NUMBER(11,0) 
		CONSTRAINT ScripActions_Key PRIMARY KEY,
  Name		VARCHAR2(200),
  Description	VARCHAR2(255),
  ExecModule	VARCHAR2(60),
  Argument	VARCHAR2(255),
  Creator	NUMBER(11,0) DEFAULT 0 NOT NULL,
  Created	DATE,
  LastUpdatedBy	NUMBER(11,0) DEFAULT 0 NOT NULL,
  LastUpdated	DATE
);


CREATE SEQUENCE TEMPLATES_seq;
CREATE TABLE Templates (
  	id 		NUMBER(11,0) 
		CONSTRAINT Templates_Key PRIMARY KEY,
	Queue 		NUMBER(11,0) DEFAULT 0 NOT NULL,
	Name		VARCHAR2(200) NOT NULL,
	Description	VARCHAR2(255),
	Type		VARCHAR2(16),
  	Language 	VARCHAR2(16), 
  	TranslationOf 	NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Content 	CLOB,
  	LastUpdated 	DATE,
  	LastUpdatedBy 	NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Creator 	NUMBER(11,0) DEFAULT 0 NOT NULL,
  	Created 	DATE
);


CREATE SEQUENCE OBJECTCUSTOMFIELDS_seq;
CREATE TABLE ObjectCustomFields (
	id		NUMBER(11,0)
                 CONSTRAINT ObjectCustomFields_Key PRIMARY KEY,
        CustomField       NUMBER(11,0)  NOT NULL,
        ObjectId              NUMBER(11,0)  NOT NULL,
	SortOrder	NUMBER(11,0) DEFAULT 0 NOT NULL,
	Creator		NUMBER(11,0) DEFAULT 0 NOT NULL,
	Created		DATE,
	LastUpdatedBy	NUMBER(11,0) DEFAULT 0 NOT NULL,
	LastUpdated	DATE
);


CREATE SEQUENCE OBJECTCUSTOMFIELDVALUES_seq;
CREATE TABLE ObjectCustomFieldValues (
	id		NUMBER(11,0) 
		CONSTRAINT ObjectCustomFieldValues_Key PRIMARY KEY,
	CustomField	NUMBER(11,0) NOT NULL,
	ObjectType	VARCHAR2(25) NOT NULL,
	ObjectId	NUMBER(11,0) DEFAULT 0 NOT NULL,
	SortOrder	NUMBER(11,0) DEFAULT 0 NOT NULL,
	Content		VARCHAR2(255),
  	LargeContent 	CLOB,
  	ContentType 	VARCHAR2(80),
  	ContentEncoding VARCHAR2(80),
	Creator		NUMBER(11,0) DEFAULT 0 NOT NULL,
	Created		DATE,
	LastUpdatedBy	NUMBER(11,0) DEFAULT 0 NOT NULL,
	LastUpdated	DATE,
	Disabled	NUMBER(11,0) DEFAULT 0 NOT NULL
);

CREATE INDEX ObjectCustomFieldValues1 ON ObjectCustomFieldValues (Content); 
CREATE INDEX ObjectCustomFieldValues2 ON ObjectCustomFieldValues (CustomField,ObjectType,ObjectId); 

CREATE SEQUENCE CUSTOMFIELDS_seq;
CREATE TABLE CustomFields (
	id		NUMBER(11,0) 
		CONSTRAINT CustomFields_Key PRIMARY KEY,
	Name		VARCHAR2(200),
	Type		VARCHAR2(200),
	MaxValues	NUMBER(11,0) DEFAULT 0 NOT NULL,
	Pattern		CLOB,
        Repeated        NUMBER(11,0) DEFAULT 0 NOT NULL,
	Description	VARCHAR2(255),
	SortOrder	NUMBER(11,0) DEFAULT 0 NOT NULL,
	LookupType	VARCHAR2(255),
	Creator		NUMBER(11,0) DEFAULT 0 NOT NULL,
	Created		DATE,
	LastUpdatedBy	NUMBER(11,0) DEFAULT 0 NOT NULL,
	LastUpdated	DATE,
	Disabled	NUMBER(11,0) DEFAULT 0 NOT NULL
);


CREATE SEQUENCE CUSTOMFIELDVALUES_seq;
CREATE TABLE CustomFieldValues (
	id		NUMBER(11,0) 
		CONSTRAINT CustomFieldValues_Key PRIMARY KEY,
	CustomField	NUMBER(11,0),
	Name		VARCHAR2(200),
	Description	VARCHAR2(255),
	SortOrder	NUMBER(11,0) DEFAULT 0 NOT NULL,
	Creator		NUMBER(11,0) DEFAULT 0 NOT NULL,
	Created		DATE,
	LastUpdatedBy	NUMBER(11,0) DEFAULT 0 NOT NULL,
	LastUpdated	DATE
);

CREATE INDEX CustomFieldValues1 ON CustomFieldValues (CustomField);

CREATE SEQUENCE ATTRIBUTES_seq;
CREATE TABLE Attributes (
	id 			NUMBER(11,0) PRIMARY KEY,
	Name 			VARCHAR2(255) NOT NULL,
	Description 		VARCHAR2(255),
  	Content 	CLOB,
    ContentType VARCHAR(16),
	ObjectType	VARCHAR2(25) NOT NULL,
	ObjectId	NUMBER(11,0) DEFAULT 0 NOT NULL,
	Creator 		NUMBER(11,0) DEFAULT 0 NOT NULL,
	Created 		DATE,
	LastUpdatedBy 		NUMBER(11,0) DEFAULT 0 NOT NULL,
	LastUpdated		DATE
);

CREATE INDEX Attributes1 on Attributes(Name);
CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId);


CREATE TABLE sessions (
	id		VARCHAR2(32) 
		CONSTRAINT Sessions_Key PRIMARY KEY,
	a_session	CLOB,
	LastUpdated	DATE
);

