internal override RDFMemoryStore SelectQuadruples(RDFContext ctx,
RDFResource subj,
RDFResource pred,
RDFResource obj,
RDFLiteral lit)
{
RDFMemoryStore result = new RDFMemoryStore();
SqlCommand command = null;
//Intersect the filters
if (ctx != null) {
if (subj != null) {
if (pred != null) {
if (obj != null) {
//C->S->P->O
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ContextID] = @CTXID AND [SubjectID] = @SUBJID AND [PredicateID] = @PREDID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("CTXID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("SUBJID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("PREDID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPO;
command.Parameters["CTXID"].Value = ctx.PatternMemberID;
command.Parameters["SUBJID"].Value = subj.PatternMemberID;
command.Parameters["PREDID"].Value = pred.PatternMemberID;
command.Parameters["OBJID"].Value = obj.PatternMemberID;
}
else {
if (lit != null) {
//C->S->P->L
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ContextID] = @CTXID AND [SubjectID] = @SUBJID AND [PredicateID] = @PREDID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("CTXID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("SUBJID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("PREDID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPL;
command.Parameters["CTXID"].Value = ctx.PatternMemberID;
command.Parameters["SUBJID"].Value = subj.PatternMemberID;
command.Parameters["PREDID"].Value = pred.PatternMemberID;
command.Parameters["OBJID"].Value = lit.PatternMemberID;
}
else {
//C->S->P->
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ContextID] = @CTXID AND [SubjectID] = @SUBJID AND [PredicateID] = @PREDID", this.Connection);
command.Parameters.Add(new SqlParameter("CTXID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("SUBJID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("PREDID", SqlDbType.BigInt));
command.Parameters["CTXID"].Value = ctx.PatternMemberID;
command.Parameters["SUBJID"].Value = subj.PatternMemberID;
command.Parameters["PREDID"].Value = pred.PatternMemberID;
}
}
}
else {
if (obj != null) {
//C->S->->O
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ContextID] = @CTXID AND [SubjectID] = @SUBJID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("CTXID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("SUBJID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPO;
command.Parameters["CTXID"].Value = ctx.PatternMemberID;
command.Parameters["SUBJID"].Value = subj.PatternMemberID;
command.Parameters["OBJID"].Value = obj.PatternMemberID;
}
else {
if (lit != null) {
//C->S->->L
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ContextID] = @CTXID AND [SubjectID] = @SUBJID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("CTXID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("SUBJID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPL;
command.Parameters["CTXID"].Value = ctx.PatternMemberID;
command.Parameters["SUBJID"].Value = subj.PatternMemberID;
command.Parameters["OBJID"].Value = lit.PatternMemberID;
}
else {
//C->S->->
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ContextID] = @CTXID AND [SubjectID] = @SUBJID", this.Connection);
command.Parameters.Add(new SqlParameter("CTXID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("SUBJID", SqlDbType.BigInt));
command.Parameters["CTXID"].Value = ctx.PatternMemberID;
command.Parameters["SUBJID"].Value = subj.PatternMemberID;
}
}
}
}
else {
if (pred != null) {
if (obj != null) {
//C->->P->O
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ContextID] = @CTXID AND [PredicateID] = @PREDID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("CTXID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("PREDID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPO;
command.Parameters["CTXID"].Value = ctx.PatternMemberID;
command.Parameters["PREDID"].Value = pred.PatternMemberID;
command.Parameters["OBJID"].Value = obj.PatternMemberID;
}
else {
if (lit != null) {
//C->->P->L
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ContextID] = @CTXID AND [PredicateID] = @PREDID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("CTXID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("PREDID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPL;
command.Parameters["CTXID"].Value = ctx.PatternMemberID;
command.Parameters["PREDID"].Value = pred.PatternMemberID;
command.Parameters["OBJID"].Value = lit.PatternMemberID;
}
else {
//C->->P->
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ContextID] = @CTXID AND [PredicateID] = @PREDID", this.Connection);
command.Parameters.Add(new SqlParameter("CTXID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("PREDID", SqlDbType.BigInt));
command.Parameters["CTXID"].Value = ctx.PatternMemberID;
command.Parameters["PREDID"].Value = pred.PatternMemberID;
}
}
}
else {
if (obj != null) {
//C->->->O
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ContextID] = @CTXID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("CTXID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPO;
command.Parameters["CTXID"].Value = ctx.PatternMemberID;
command.Parameters["OBJID"].Value = obj.PatternMemberID;
}
else {
if (lit != null) {
//C->->->L
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ContextID] = @CTXID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("CTXID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPL;
command.Parameters["CTXID"].Value = ctx.PatternMemberID;
command.Parameters["OBJID"].Value = lit.PatternMemberID;
}
else {
//C->->->
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ContextID] = @CTXID", this.Connection);
command.Parameters.Add(new SqlParameter("CTXID", SqlDbType.BigInt));
command.Parameters["CTXID"].Value = ctx.PatternMemberID;
}
}
}
}
}
else {
if (subj != null) {
if (pred != null) {
if (obj != null) {
//->S->P->O
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [SubjectID] = @SUBJID AND [PredicateID] = @PREDID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("SUBJID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("PREDID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPO;
command.Parameters["SUBJID"].Value = subj.PatternMemberID;
command.Parameters["PREDID"].Value = pred.PatternMemberID;
command.Parameters["OBJID"].Value = obj.PatternMemberID;
}
else {
if (lit != null) {
//->S->P->L
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [SubjectID] = @SUBJID AND [PredicateID] = @PREDID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("SUBJID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("PREDID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPL;
command.Parameters["SUBJID"].Value = subj.PatternMemberID;
command.Parameters["PREDID"].Value = pred.PatternMemberID;
command.Parameters["OBJID"].Value = lit.PatternMemberID;
}
else {
//->S->P->
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [SubjectID] = @SUBJID AND [PredicateID] = @PREDID", this.Connection);
command.Parameters.Add(new SqlParameter("SUBJID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("PREDID", SqlDbType.BigInt));
command.Parameters["SUBJID"].Value = subj.PatternMemberID;
command.Parameters["PREDID"].Value = pred.PatternMemberID;
}
}
}
else {
if (obj != null) {
//->S->->O
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [SubjectID] = @SUBJID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("SUBJID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPO;
command.Parameters["SUBJID"].Value = subj.PatternMemberID;
command.Parameters["OBJID"].Value = obj.PatternMemberID;
}
else {
if (lit != null) {
//->S->->L
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [SubjectID] = @SUBJID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("SUBJID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPL;
command.Parameters["SUBJID"].Value = subj.PatternMemberID;
command.Parameters["OBJID"].Value = lit.PatternMemberID;
}
else {
//->S->->
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [SubjectID] = @SUBJID", this.Connection);
command.Parameters.Add(new SqlParameter("SUBJID", SqlDbType.BigInt));
command.Parameters["SUBJID"].Value = subj.PatternMemberID;
}
}
}
}
else {
if (pred != null) {
if (obj != null) {
//->->P->O
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [PredicateID] = @PREDID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("PREDID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPO;
command.Parameters["PREDID"].Value = pred.PatternMemberID;
command.Parameters["OBJID"].Value = obj.PatternMemberID;
}
else {
if (lit != null) {
//->->P->L
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [PredicateID] = @PREDID AND [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("PREDID", SqlDbType.BigInt));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPL;
command.Parameters["PREDID"].Value = pred.PatternMemberID;
command.Parameters["OBJID"].Value = lit.PatternMemberID;
}
else {
//->->P->
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [PredicateID] = @PREDID", this.Connection);
command.Parameters.Add(new SqlParameter("PREDID", SqlDbType.BigInt));
command.Parameters["PREDID"].Value = pred.PatternMemberID;
}
}
}
else {
if (obj != null) {
//->->->O
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPO;
command.Parameters["OBJID"].Value = obj.PatternMemberID;
}
else {
if (lit != null) {
//->->->L
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples] WHERE [ObjectID] = @OBJID AND [TripleFlavor] = @TFV", this.Connection);
command.Parameters.Add(new SqlParameter("TFV", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("OBJID", SqlDbType.BigInt));
command.Parameters["TFV"].Value = RDFModelEnums.RDFTripleFlavors.SPL;
command.Parameters["OBJID"].Value = lit.PatternMemberID;
}
else {
//->->->
command = new SqlCommand("SELECT [TripleFlavor], [Context], [Subject], [Predicate], [Object] FROM [dbo].[Quadruples]", this.Connection);
}
}
}
}
}
//Prepare and execute command
try {
//Open connection
this.Connection.Open();
//Prepare command
command.Prepare();
//Execute command
using (var quadruples = command.ExecuteReader()) {
if (quadruples.HasRows) {
while(quadruples.Read()) {
result.AddQuadruple(RDFStoreUtilities.ParseQuadruple(quadruples));
}
}
}
//Close connection
this.Connection.Close();
}
catch (Exception ex) {
//Close connection
this.Connection.Close();
//Propagate exception
throw new RDFStoreException("Cannot read data from SQL Server store because: " + ex.Message, ex);
}
return result;
}