RDFSharp.Store.RDFSQLServerStore.SelectQuadruples C# (CSharp) Метод

SelectQuadruples() приватный Метод

Gets a memory store containing quadruples satisfying the given pattern
private SelectQuadruples ( RDFSharp.Store.RDFContext ctx, RDFResource subj, RDFResource pred, RDFResource obj, RDFSharp.Model.RDFLiteral lit ) : RDFMemoryStore
ctx RDFSharp.Store.RDFContext
subj RDFSharp.Model.RDFResource
pred RDFSharp.Model.RDFResource
obj RDFSharp.Model.RDFResource
lit RDFSharp.Model.RDFLiteral
Результат RDFMemoryStore
        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;
        }