private void PrepareStore()
{
var check = this.Diagnostics();
//Prepare the database only if diagnostics has detected the missing of "Quadruples" table in the store
if (check == RDFStoreEnums.RDFStoreSQLErrors.QuadruplesTableNotFound) {
try {
//Open connection
this.Connection.Open();
//Create command
var command = new SqlCommand("CREATE TABLE [dbo].[Quadruples] ([QuadrupleID] BIGINT PRIMARY KEY NOT NULL, [TripleFlavor] INTEGER NOT NULL, [Context] VARCHAR(1000) NOT NULL, [ContextID] BIGINT NOT NULL, [Subject] VARCHAR(1000) NOT NULL, [SubjectID] BIGINT NOT NULL, [Predicate] VARCHAR(1000) NOT NULL, [PredicateID] BIGINT NOT NULL, [Object] VARCHAR(1000) NOT NULL, [ObjectID] BIGINT NOT NULL); CREATE NONCLUSTERED INDEX [IDX_ContextID] ON [dbo].[Quadruples]([ContextID]);CREATE NONCLUSTERED INDEX [IDX_SubjectID] ON [dbo].[Quadruples]([SubjectID]);CREATE NONCLUSTERED INDEX [IDX_PredicateID] ON [dbo].[Quadruples]([PredicateID]);CREATE NONCLUSTERED INDEX [IDX_ObjectID] ON [dbo].[Quadruples]([ObjectID],[TripleFlavor]);CREATE NONCLUSTERED INDEX [IDX_SubjectID_PredicateID] ON [dbo].[Quadruples]([SubjectID],[PredicateID]);CREATE NONCLUSTERED INDEX [IDX_SubjectID_ObjectID] ON [dbo].[Quadruples]([SubjectID],[ObjectID],[TripleFlavor]);CREATE NONCLUSTERED INDEX [IDX_PredicateID_ObjectID] ON [dbo].[Quadruples]([PredicateID],[ObjectID],[TripleFlavor]);", this.Connection);
//Execute command
command.ExecuteNonQuery();
//Close connection
this.Connection.Close();
}
catch (Exception ex) {
//Close connection
this.Connection.Close();
//Propagate exception
throw new RDFStoreException("Cannot prepare SQL Server store because: " + ex.Message, ex);
}
}
//Otherwise, an exception must be thrown because it has not been possible to connect to the instance/database
else if (check == RDFStoreEnums.RDFStoreSQLErrors.InvalidDataSource) {
throw new RDFStoreException("Cannot prepare SQL Server store because: unable to connect to the server instance or to open the selected database.");
}
}