Exemplo n.º 1
0
        private static void MatchData(DataContainer data,
                                      IExpressionGraph resultGraph,
                                      IGraphDB myGraphDB,
                                      SecurityToken mySecurityToken,
                                      Int64 myTransactionToken,
                                      TypesOfOperators myTypeOfOperator,
                                      BinaryOperator myOperator,
                                      String myExpressionIndex)
        {
            #region data

            LevelKey myLevelKey = CreateLevelKey(data.IDChainDefinitions.Item1, myGraphDB, mySecurityToken, myTransactionToken);

            #endregion

            var vertices = myGraphDB.GetVertices <List <IVertex> >(
                mySecurityToken,
                myTransactionToken,
                new GraphDB.Request.RequestGetVertices(
                    new BinaryExpression(
                        new PropertyExpression(data.IDChainDefinitions.Item1.LastType.Name, data.IDChainDefinitions.Item1.LastAttribute.Name),
                        myOperator,
                        GenerateLiteral(data.Operands.Item1, ((IPropertyDefinition)data.IDChainDefinitions.Item1.LastAttribute).BaseType),
                        myExpressionIndex)),
                (stats, vertexEnumerable) => vertexEnumerable.ToList());

            foreach (var aVertex in vertices)
            {
                IntegrateInGraph(aVertex, resultGraph, myLevelKey, myTypeOfOperator);
            }

            if (resultGraph.ContainsLevelKey(myLevelKey))
            {
                #region clean lower levels

                if (myTypeOfOperator == TypesOfOperators.AffectsLowerLevels)
                {
                    CleanLowerLevel(myLevelKey, resultGraph, myGraphDB, mySecurityToken, myTransactionToken);
                }

                #endregion
            }
            else
            {
                resultGraph.AddEmptyLevel(myLevelKey);
            }
        }
Exemplo n.º 2
0
 private static void IntegrateInGraph(IVertex myDBObjectStream, IExpressionGraph myExpressionGraph, LevelKey myLevelKey, TypesOfOperators myTypesOfOperators)
 {
     if (myTypesOfOperators == TypesOfOperators.AffectsLowerLevels)
     {
         myExpressionGraph.AddNode(myDBObjectStream, myLevelKey, 1);
     }
     else
     {
         myExpressionGraph.AddNode(myDBObjectStream, myLevelKey, 0);
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// Finds matching result corresponding to a binary expression.
        /// </summary>
        /// <param name="myLeftValueObject">The left value of a binary expression.</param>
        /// <param name="myRightValueObject">The right value of a binary expression.</param>
        /// <param name="myPluginManager"></param>
        /// <param name="myGraphDB"></param>
        /// <param name="mySecurityToken"></param>
        /// <param name="myTransactionToken"></param>
        /// <param name="typeOfBinExpr">Type of the binary expression.</param>
        /// <param name="resultGr"></param>
        /// <param name="mytypesOfOpertators"></param>
        /// <param name="myOperator">The binary operator.</param>
        /// <param name="myExpressionIndex">The name of the index which should be used for the expression.</param>
        /// <param name="aggregateAllowed"></param>
        /// <returns>An expression graph.</returns>
        public static IExpressionGraph TypeOperation(AExpressionDefinition myLeftValueObject,
                                                     AExpressionDefinition myRightValueObject,
                                                     GQLPluginManager myPluginManager,
                                                     IGraphDB myGraphDB,
                                                     SecurityToken mySecurityToken,
                                                     Int64 myTransactionToken,
                                                     TypesOfBinaryExpression typeOfBinExpr,
                                                     IExpressionGraph resultGr,
                                                     TypesOfOperators mytypesOfOpertators,
                                                     BinaryOperator myOperator,
                                                     String myExpressionIndex,
                                                     Boolean aggregateAllowed = true)
        {
            #region Data

            //DataContainer for all data that is used by a binary expression/comparer
            DataContainer data;

            #endregion

            #region extract data

            //data extraction with an eye on the type of the binary expression

            switch (typeOfBinExpr)
            {
            case TypesOfBinaryExpression.Atom:

                //sth like 3 = 4
                #region Get Atom data

                //no further data has to be generated

                //data = new DataContainer(null, new Tuple<Object, Object>(myLeftValueObject, myRightValueObject), null);
                data = new DataContainer();

                #endregion

                break;

            case TypesOfBinaryExpression.LeftComplex:

                //sth like U.Age = 21
                #region Get LeftComplex data

                data = ExtractData(myLeftValueObject,
                                   myRightValueObject,
                                   ref typeOfBinExpr,
                                   myPluginManager,
                                   myGraphDB,
                                   mySecurityToken,
                                   myTransactionToken,
                                   aggregateAllowed);

                #endregion

                break;

            case TypesOfBinaryExpression.RightComplex:

                //sth like 21 = U.Age
                #region Get RightComplex data

                data = ExtractData(myRightValueObject,
                                   myLeftValueObject,
                                   ref typeOfBinExpr,
                                   myPluginManager,
                                   myGraphDB,
                                   mySecurityToken,
                                   myTransactionToken,
                                   aggregateAllowed);

                #endregion

                break;

            case TypesOfBinaryExpression.Complex:

                //sth like U.Age = F.Alter
                #region Get Complex data

                var leftData = ExtractData(myLeftValueObject,
                                           myRightValueObject,
                                           ref typeOfBinExpr,
                                           myPluginManager,
                                           myGraphDB,
                                           mySecurityToken,
                                           myTransactionToken,
                                           aggregateAllowed);

                var rightData = ExtractData(myRightValueObject,
                                            myLeftValueObject,
                                            ref typeOfBinExpr,
                                            myPluginManager,
                                            myGraphDB,
                                            mySecurityToken,
                                            myTransactionToken,
                                            aggregateAllowed);

                if (typeOfBinExpr == TypesOfBinaryExpression.Unknown)
                {
                    typeOfBinExpr = SetTypeOfBinaryExpression(leftData, rightData);

                    switch (typeOfBinExpr)
                    {
                    case TypesOfBinaryExpression.Atom:

                        data = new DataContainer(new Tuple <IDChainDefinition,
                                                            IDChainDefinition>(null, null),
                                                 new Tuple <AExpressionDefinition, AExpressionDefinition>(leftData.Operands.Item1, leftData.Operands.Item1),
                                                 new Tuple <AExpressionDefinition, AExpressionDefinition>(null, null));

                        break;

                    case TypesOfBinaryExpression.LeftComplex:

                        data = new DataContainer(new Tuple <IDChainDefinition, IDChainDefinition>(leftData.IDChainDefinitions.Item1, null),
                                                 new Tuple <AExpressionDefinition, AExpressionDefinition>(rightData.Operands.Item1, null),
                                                 new Tuple <AExpressionDefinition, AExpressionDefinition>(null, null));

                        break;

                    case TypesOfBinaryExpression.RightComplex:

                        data = new DataContainer(new Tuple <IDChainDefinition, IDChainDefinition>(rightData.IDChainDefinitions.Item1, null),
                                                 new Tuple <AExpressionDefinition, AExpressionDefinition>(leftData.Operands.Item1, null),
                                                 new Tuple <AExpressionDefinition, AExpressionDefinition>(null, null));

                        break;

                    case TypesOfBinaryExpression.Complex:
                    case TypesOfBinaryExpression.Unknown:
                    default:

                        throw new NotImplementedQLException("");
                    }
                }
                else
                {
                    data = JoinData(leftData, rightData);
                }

                #endregion

                break;

            default:

                throw new ArgumentException();
            }

            #endregion

            #region match data

            switch (typeOfBinExpr)
            {
            case TypesOfBinaryExpression.Atom:

                #region Atom

                //do nothing 3 = 3 (or 2 != 3) doesnt bother U

                #endregion

                break;

            case TypesOfBinaryExpression.LeftComplex:

                #region LeftComplex

                MatchData(data,
                          resultGr,
                          myGraphDB,
                          mySecurityToken,
                          myTransactionToken,
                          mytypesOfOpertators,
                          myOperator,
                          myExpressionIndex);

                #endregion

                break;

            case TypesOfBinaryExpression.RightComplex:

                #region RightComplex

                MatchData(data,
                          resultGr,
                          myGraphDB,
                          mySecurityToken,
                          myTransactionToken,
                          mytypesOfOpertators,
                          myOperator,
                          myExpressionIndex);

                #endregion

                break;

            case TypesOfBinaryExpression.Complex:

                #region Complex

                throw new NotImplementedQLException("");

                #endregion
            }

            #endregion

            return(resultGr);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Finds matching result corresponding to a binary expression.
        /// </summary>
        /// <param name="myLeftValueObject">The left value of a binary expression.</param>
        /// <param name="myRightValueObject">The right value of a binary expression.</param>
        /// <returns></returns>
        public static IExpressionGraph TypeOperation( 
            AExpressionDefinition myLeftValueObject, AExpressionDefinition myRightValueObject,
            GQLPluginManager myPluginManager,
            IGraphDB myGraphDB, SecurityToken mySecurityToken, Int64 myTransactionToken,
            TypesOfBinaryExpression typeOfBinExpr, IExpressionGraph resultGr, TypesOfOperators mytypesOfOpertators, BinaryOperator myOperator, Boolean aggregateAllowed = true)
        {
            #region Data

            //DataContainer for all data that is used by a binary expression/comparer
            DataContainer data;

            #endregion

            #region extract data

            //data extraction with an eye on the type of the binary expression

            switch (typeOfBinExpr)
            {
                case TypesOfBinaryExpression.Atom:

                    //sth like 3 = 4
                    #region Get Atom data

                    //no further data has to be generated

                    //data = new DataContainer(null, new Tuple<Object, Object>(myLeftValueObject, myRightValueObject), null);
                    data = new DataContainer();

                    #endregion

                    break;
                case TypesOfBinaryExpression.LeftComplex:

                    //sth like U.Age = 21
                    #region Get LeftComplex data

                    data = ExtractData(myLeftValueObject, myRightValueObject, ref typeOfBinExpr, myPluginManager, myGraphDB, mySecurityToken, myTransactionToken, aggregateAllowed);

                    #endregion

                    break;
                case TypesOfBinaryExpression.RightComplex:

                    //sth like 21 = U.Age
                    #region Get RightComplex data

                    data = ExtractData(myRightValueObject, myLeftValueObject, ref typeOfBinExpr, myPluginManager, myGraphDB, mySecurityToken, myTransactionToken, aggregateAllowed);

                    #endregion

                    break;
                case TypesOfBinaryExpression.Complex:

                    //sth like U.Age = F.Alter
                    #region Get Complex data

                    var leftData = ExtractData(myLeftValueObject, myRightValueObject, ref typeOfBinExpr, myPluginManager, myGraphDB, mySecurityToken, myTransactionToken, aggregateAllowed);

                    var rightData = ExtractData(myRightValueObject, myLeftValueObject, ref typeOfBinExpr, myPluginManager, myGraphDB, mySecurityToken, myTransactionToken, aggregateAllowed);

                    if (typeOfBinExpr == TypesOfBinaryExpression.Unknown)
                    {
                        typeOfBinExpr = SetTypeOfBinaryExpression(leftData, rightData);

                        switch (typeOfBinExpr)
                        {
                            case TypesOfBinaryExpression.Atom:

                                data = new DataContainer(new Tuple<IDChainDefinition, IDChainDefinition>(null, null), new Tuple<AExpressionDefinition, AExpressionDefinition>(leftData.Operands.Item1, leftData.Operands.Item1), new Tuple<AExpressionDefinition, AExpressionDefinition>(null, null));

                                break;
                            case TypesOfBinaryExpression.LeftComplex:

                                data = new DataContainer(new Tuple<IDChainDefinition, IDChainDefinition>(leftData.IDChainDefinitions.Item1, null), new Tuple<AExpressionDefinition, AExpressionDefinition>(rightData.Operands.Item1, null), new Tuple<AExpressionDefinition, AExpressionDefinition>(null, null));

                                break;
                            case TypesOfBinaryExpression.RightComplex:

                                data = new DataContainer(new Tuple<IDChainDefinition, IDChainDefinition>(rightData.IDChainDefinitions.Item1, null), new Tuple<AExpressionDefinition, AExpressionDefinition>(leftData.Operands.Item1, null), new Tuple<AExpressionDefinition, AExpressionDefinition>(null, null));

                                break;
                            case TypesOfBinaryExpression.Complex:
                            case TypesOfBinaryExpression.Unknown:
                            default:

                                throw new NotImplementedQLException("");
                        }

                    }
                    else
                    {
                        data = JoinData(leftData, rightData);
                    }

                    #endregion

                    break;
                default:

                    throw new ArgumentException();
            }

            #endregion

            #region match data

            switch (typeOfBinExpr)
            {
                case TypesOfBinaryExpression.Atom:

                    #region Atom

                    //do nothing 3 = 3 (or 2 != 3) doesnt bother U

                    #endregion

                    break;

                case TypesOfBinaryExpression.LeftComplex:

                    #region LeftComplex

                    MatchData(data, resultGr, myGraphDB, mySecurityToken, myTransactionToken, mytypesOfOpertators, myOperator);

                    #endregion

                    break;

                case TypesOfBinaryExpression.RightComplex:

                    #region RightComplex

                    MatchData(data, resultGr, myGraphDB, mySecurityToken, myTransactionToken, mytypesOfOpertators, myOperator);

                    #endregion

                    break;

                case TypesOfBinaryExpression.Complex:

                    #region Complex

                    throw new NotImplementedQLException("");

                    #endregion
            }

            #endregion

            return resultGr;
        }
Exemplo n.º 5
0
        private static void MatchData(DataContainer data, IExpressionGraph resultGraph, IGraphDB myGraphDB, SecurityToken mySecurityToken, Int64 myTransactionToken, TypesOfOperators myTypeOfOperator, BinaryOperator myOperator)
        {
            #region data

            LevelKey myLevelKey = CreateLevelKey(data.IDChainDefinitions.Item1, myGraphDB, mySecurityToken, myTransactionToken);

            #endregion

            var vertices = myGraphDB.GetVertices<List<IVertex>>(
                mySecurityToken,
                myTransactionToken,
                new GraphDB.Request.RequestGetVertices(
                    new BinaryExpression(
                        new PropertyExpression(data.IDChainDefinitions.Item1.LastType.Name, data.IDChainDefinitions.Item1.LastAttribute.Name),
                        myOperator,
                        GenerateLiteral(data.Operands.Item1, ((IPropertyDefinition)data.IDChainDefinitions.Item1.LastAttribute).BaseType))),
                        (stats, vertexEnumerable) => vertexEnumerable.ToList());

            foreach (var aVertex in vertices)
            {
                IntegrateInGraph(aVertex, resultGraph, myLevelKey, myTypeOfOperator);
            }

            if (resultGraph.ContainsLevelKey(myLevelKey))
            {
                #region clean lower levels

                if (myTypeOfOperator == TypesOfOperators.AffectsLowerLevels)
                {
                    CleanLowerLevel(myLevelKey, resultGraph, myGraphDB, mySecurityToken, myTransactionToken);
                }

                #endregion

            }
            else
            {
                resultGraph.AddEmptyLevel(myLevelKey);
            }
        }
Exemplo n.º 6
0
 private static void IntegrateInGraph(IVertex myDBObjectStream, IExpressionGraph myExpressionGraph, LevelKey myLevelKey, TypesOfOperators myTypesOfOperators)
 {
     if (myTypesOfOperators == TypesOfOperators.AffectsLowerLevels)
     {
         myExpressionGraph.AddNode(myDBObjectStream, myLevelKey, 1);
     }
     else
     {
         myExpressionGraph.AddNode(myDBObjectStream, myLevelKey, 0);
     }
 }