procedure TVpZeosDatastore.CreateTable(const ATableName: String;
CreateIndex: Boolean = true);
var
CREATE_TABLE: String;
begin
if (Lowercase(FConnection.Protocol) = 'firebird') then
CREATE_TABLE := 'RECREATE TABLE ' // Not clear if this is correct for firebird v2.x, it is for fb v3
else
CREATE_TABLE := 'CREATE TABLE ';
if ATableName = ContactsTableName then begin
if (Lowercase(FConnection.Protocol) <> 'mysql') then begin
FConnection.ExecuteDirect(
CREATE_TABLE + 'Contacts ('+
'RecordID ' + FIDFieldTypeNameInSQL + ', '+
'ResourceID INTEGER, '+
'FirstName VARCHAR(50), '+
'LastName VARCHAR(50), '+
'Title VARCHAR(20) ,'+
'Category INTEGER, '+
'Birthdate DATE, '+
'Anniversary DATE, '+
'Company VARCHAR(50), '+
'Department VARCHAR(50), '+
'Job_Position VARCHAR(30), '+
'AddressType1 INTEGER, '+
'Address1 VARCHAR(100), '+
'City1 VARCHAR(50), '+
'State1 VARCHAR(25), '+
'Zip1 VARCHAR(10), '+
'Country1 VARCHAR(25), '+
'AddressType2 INTEGER, '+
'Address2 VARCHAR(100), '+
'City2 VARCHAR(50), '+
'State2 VARCHAR(25), '+
'Zip2 VARCHAR(10), '+
'Country2 VARCHAR(25), '+
'Notes VARCHAR(1024), '+
'EMail1 VARCHAR(100), '+
'EMail2 VARCHAR(100), '+
'EMail3 VARCHAR(100), '+
'EMailType1 INTEGER, '+
'EMailType2 INTEGER, '+
'EMailType3 INTEGER, '+
'Phone1 VARCHAR(25), '+
'Phone2 VARCHAR(25), '+
'Phone3 VARCHAR(25), '+
'Phone4 VARCHAR(25), '+
'Phone5 VARCHAR(25), '+
'PhoneType1 INTEGER, '+
'PhoneType2 INTEGER, '+
'PhoneType3 INTEGER, '+
'PhoneType4 INTEGER, '+
'PhoneType5 INTEGER, '+
'Website1 VARCHAR(100), '+
'Website2 VARCHAR(100), '+
'WebsiteType1 INTEGER, '+
'WebsiteType2 INTEGER, '+
'Custom1 VARCHAR(100), '+
'Custom2 VARCHAR(100),'+
'Custom3 VARCHAR(100), '+
'Custom4 VARCHAR(100), '+
'UserField0 VARCHAR(100), '+
'UserField1 VARCHAR(100), '+
'UserField2 VARCHAR(100), '+
'UserField3 VARCHAR(100), '+
'UserField4 VARCHAR(100), '+
'UserField5 VARCHAR(100), '+
'UserField6 VARCHAR(100), '+
'UserField7 VARCHAR(100), '+
'UserField8 VARCHAR(100), '+
'UserField9 VARCHAR(100) )'
);
end else begin
FConnection.ExecuteDirect(
CREATE_TABLE + 'Contacts ('+
'RecordID ' + FIDFieldTypeNameInSQL + ', '+
'ResourceID INT, '+
'FirstName VARCHAR(50), '+
'LastName VARCHAR(50), '+
'Title VARCHAR(20) ,'+
'Category INT, '+
'Birthdate DATE, '+
'Anniversary DATE, '+
'Company VARCHAR(50), '+
'Department VARCHAR(50), '+
'Job_Position VARCHAR(30), '+
'AddressType1 INT, '+
'Address1 VARCHAR(100), '+
'City1 VARCHAR(50), '+
'State1 VARCHAR(25), '+
'Zip1 VARCHAR(10), '+
'Country1 VARCHAR(25), '+
'AddressType2 INT, '+
'Address2 VARCHAR(100), '+
'City2 VARCHAR(50), '+
'State2 VARCHAR(25), '+
'Zip2 VARCHAR(10), '+
'Country2 VARCHAR(25), '+
'Notes VARCHAR(1024), '+
'EMail1 VARCHAR(100), '+
'EMail2 VARCHAR(100), '+
'EMail3 VARCHAR(100), '+
'EMailType1 INT, '+
'EMailType2 INT, '+
'EMailType3 INT, '+
'Phone1 VARCHAR(25), '+
'Phone2 VARCHAR(25), '+
'Phone3 VARCHAR(25), '+
'Phone4 VARCHAR(25), '+
'Phone5 VARCHAR(25), '+
'PhoneType1 INT, '+
'PhoneType2 INT, '+
'PhoneType3 INT, '+
'PhoneType4 INT, '+
'PhoneType5 INT, '+
'Website1 VARCHAR(100), '+
'Website2 VARCHAR(100), '+
'WebsiteType1 INT, '+
'WebsiteType2 INT, '+
'Custom1 VARCHAR(100), '+
'Custom2 VARCHAR(100),'+
'Custom3 VARCHAR(100), '+
'Custom4 VARCHAR(100), '+
'UserField0 VARCHAR(100), '+
'UserField1 VARCHAR(100), '+
'UserField2 VARCHAR(100), '+
'UserField3 VARCHAR(100), '+
'UserField4 VARCHAR(100), '+
'UserField5 VARCHAR(100), '+
'UserField6 VARCHAR(100), '+
'UserField7 VARCHAR(100), '+
'UserField8 VARCHAR(100), '+
'UserField9 VARCHAR(100) )'
);
end;
if CreateIndex then begin
FConnection.ExecuteDirect(
'CREATE INDEX ContactsResourceID_idx ON Contacts(ResourceID)'
);
FConnection.ExecuteDirect(
'CREATE INDEX ContactsName_idx ON Contacts(LastName, FirstName)'
);
FConnection.ExecuteDirect(
'CREATE INDEX ContactsCompany_idx ON Contacts(Company)'
);
end;
if Lowercase(FConnection.Protocol) = 'firebird' then
CreateAutoInc_Firebird('Contacts', 'RecordID');
end else
if ATableName = EventsTableName then begin
if Lowercase(FConnection.Protocol) <> 'mysql' then begin
FConnection.ExecuteDirect(
CREATE_TABLE + 'Events ('+
'RecordID ' + FIdFieldTypeNameInSQL + ', '+
'StartTime TIMESTAMP, '+
'EndTime TIMESTAMP, '+
'ResourceID INTEGER, '+
'Description VARCHAR(255), '+
'Location VARCHAR(255), '+
'Notes VARCHAR(1024), ' +
'Category INTEGER, '+
'AllDayEvent ' + FBoolFieldTypeNameInSQL + ', '+
'DingPath VARCHAR(255), '+
'AlarmSet ' + FBoolFieldTypeNameInSQL + ', '+
'AlarmAdvance INTEGER, '+
'AlarmAdvanceType INTEGER, '+
'SnoozeTime TIMESTAMP, '+
'RepeatCode INTEGER, '+
'RepeatRangeEnd TIMESTAMP, '+
'CustomInterval INTEGER, '+
'UserField0 VARCHAR(100), '+
'UserField1 VARCHAR(100), '+
'UserField2 VARCHAR(100), '+
'UserField3 VARCHAR(100), '+
'UserField4 VARCHAR(100), '+
'UserField5 VARCHAR(100), '+
'UserField6 VARCHAR(100), '+
'UserField7 VARCHAR(100), '+
'UserField8 VARCHAR(100), '+
'UserField9 VARCHAR(100) )'
);
end else begin
FConnection.ExecuteDirect(
CREATE_TABLE + 'Events ('+
'RecordID ' + FIdFieldTypeNameInSQL + ', '+
'StartTime TIMESTAMP, '+
'EndTime TIMESTAMP, '+
'ResourceID INT, '+
'Description VARCHAR(255), '+
'Location VARCHAR(255), '+
'Notes VARCHAR(1024), ' +
'Category INT, '+
'AllDayEvent ' + FBoolFieldTypeNameInSQL + ', '+
'DingPath VARCHAR(255), '+
'AlarmSet ' + FBoolFieldTypeNameInSQL + ', '+
'AlarmAdvance INT, '+
'AlarmAdvanceType INT, '+
'SnoozeTime TIMESTAMP, '+
'RepeatCode INT, '+
'RepeatRangeEnd TIMESTAMP, '+
'CustomInterval INT, '+
'UserField0 VARCHAR(100), '+
'UserField1 VARCHAR(100), '+
'UserField2 VARCHAR(100), '+
'UserField3 VARCHAR(100), '+
'UserField4 VARCHAR(100), '+
'UserField5 VARCHAR(100), '+
'UserField6 VARCHAR(100), '+
'UserField7 VARCHAR(100), '+
'UserField8 VARCHAR(100), '+
'UserField9 VARCHAR(100) )'
);
end;
if CreateIndex then begin
FConnection.ExecuteDirect(
'CREATE INDEX EventsResourceID_idx ON Events(ResourceID)'
);
FConnection.ExecuteDirect(
'CREATE INDEX EventsStartTime_idx ON Events(StartTime)'
);
FConnection.ExecuteDirect(
'CREATE INDEX EventsEndTime_idx ON Events(EndTime)'
);
end;
if Lowercase(FConnection.Protocol) = 'firebird' then
CreateAutoInc_Firebird('Events', 'RecordID');
end else
if ATableName = ResourceTableName then begin
if Lowercase(FConnection.Protocol) <> 'mysql' then begin
FConnection.ExecuteDirect(
CREATE_TABLE + 'Resources ( '+
'ResourceID ' + FIdFieldTypeNameInSQL + ', '+
'Description VARCHAR(255), '+
'Notes VARCHAR(1024), '+
'ImageIndex INTEGER, '+
'ResourceActive ' + FBoolFieldTypeNameInSQL + ', '+
'UserField0 VARCHAR(100), '+
'UserField1 VARCHAR(100), '+
'UserField2 VARCHAR(100), '+
'UserField3 VARCHAR(100), '+
'UserField4 VARCHAR(100), '+
'UserField5 VARCHAR(100), '+
'UserField6 VARCHAR(100), '+
'UserField7 VARCHAR(100), '+
'UserField8 VARCHAR(100), '+
'UserField9 VARCHAR(100) )'
);
end else begin
FConnection.ExecuteDirect(
CREATE_TABLE + 'Resources ( '+
'ResourceID ' + FIdFieldTypeNameInSQL + ', '+
'Description VARCHAR(255), '+
'Notes VARCHAR(1024), '+
'ImageIndex INT, '+
'ResourceActive ' + FBoolFieldTypeNameInSQL + ', '+
'UserField0 VARCHAR(100), '+
'UserField1 VARCHAR(100), '+
'UserField2 VARCHAR(100), '+
'UserField3 VARCHAR(100), '+
'UserField4 VARCHAR(100), '+
'UserField5 VARCHAR(100), '+
'UserField6 VARCHAR(100), '+
'UserField7 VARCHAR(100), '+
'UserField8 VARCHAR(100), '+
'UserField9 VARCHAR(100) )'
);
end;
if Lowercase(FConnection.Protocol) = 'firebird' then
CreateAutoInc_Firebird('Resources', 'ResourceID');
end else
if ATableName = TasksTableName then begin
if Lowercase(FConnection.Protocol) <> 'mysql' then begin
FConnection.ExecuteDirect(
CREATE_TABLE + 'Tasks ('+
'RecordID ' + FIdFieldTypeNameInSQL + ', '+
'ResourceID INTEGER, '+
'Complete ' + FBoolFieldTypeNameInSQL + ', '+
'Description VARCHAR(255), '+
'Details VARCHAR(1024), '+
'CreatedOn TIMESTAMP, '+
'Priority INTEGER, '+
'Category INTEGER, '+
'CompletedOn TIMESTAMP, '+
'DueDate TIMESTAMP, '+
'UserField0 VARCHAR(100), '+
'UserField1 VARCHAR(100), '+
'UserField2 VARCHAR(100), '+
'UserField3 VARCHAR(100), '+
'UserField4 VARCHAR(100), '+
'UserField5 VARCHAR(100), '+
'UserField6 VARCHAR(100), '+
'UserField7 VARCHAR(100), '+
'UserField8 VARCHAR(100), '+
'UserField9 VARCHAR(100) )'
);
end else begin
FConnection.ExecuteDirect(
CREATE_TABLE + 'Tasks ('+
'RecordID ' + FIdFieldTypeNameInSQL + ', '+
'ResourceID INT, '+
'Complete ' + FBoolFieldTypeNameInSQL + ', '+
'Description VARCHAR(255), '+
'Details VARCHAR(1024), '+
'CreatedOn TIMESTAMP, '+
'Priority INT, '+
'Category INT, '+
'CompletedOn TIMESTAMP, '+
'DueDate TIMESTAMP, '+
'UserField0 VARCHAR(100), '+
'UserField1 VARCHAR(100), '+
'UserField2 VARCHAR(100), '+
'UserField3 VARCHAR(100), '+
'UserField4 VARCHAR(100), '+
'UserField5 VARCHAR(100), '+
'UserField6 VARCHAR(100), '+
'UserField7 VARCHAR(100), '+
'UserField8 VARCHAR(100), '+
'UserField9 VARCHAR(100) )'
);
end;
if CreateIndex then begin
FConnection.ExecuteDirect(
'CREATE INDEX TasksResourceID_idx ON Tasks(ResourceID)'
);
FConnection.ExecuteDirect(
'CREATE INDEX TasksDueDate_idx ON Tasks(DueDate)'
);
FConnection.ExecuteDirect(
'CREATE INDEX TasksCompletedOn_idx ON Tasks(CompletedOn)'
);
if Lowercase(FConnection.Protocol) = 'firebird' then
CreateAutoInc_Firebird('Tasks', 'RecordID');
end;
end;
end;