Пример #1
0
        /// <summary>
        /// Running and return temp cached result table for now.
        /// To do: Just return result table name, invoke search later when user calls RunSearch()
        /// </summary>
        public string AddQueryItem(IQueryItem item)
        {
            if (_logger == null)
            {
                _logger = new SearchLogger();
            }
            _logger.AddQueryItemCalled();

            _queryNodes.Add(item.NodeId, item);

            LeafItem qi = item as LeafItem;

            if (qi == null)
            {
                return(string.Empty);
            }

            MapTableFieldName(qi);

            if (_results.Count < 1)
            {
                QueryResult result = new QueryResult();
                result.SourceTable = qi.TableName;
                _resultMap.Add(result.ResultTable, result);
                _results.Add(result);
            }

            return(_results[0].ResultTable);
        }
Пример #2
0
        private static void SqlConvert(IQueryItem iqueryItem, StringBuilder sb, List <SqlParameter> _parameter)
        {
            var mssqlQueryBuilder = new MssqlQueryBuilder(typeMapper);

            sb.Append(mssqlQueryBuilder.ProcessBEXP(iqueryItem as BEXP));
            _parameter.AddRange(mssqlQueryBuilder._parameters.Select(queryParameter => new SqlParameter(queryParameter.Name, queryParameter.Value)));
        }
Пример #3
0
        /// <summary>
        /// Add criteria query item handler
        /// </summary>
        /// <param name="originalQuery">Original query</param>
        /// <param name="queryItem">Parameter query item</param>
        /// <param name="parameterQueryOption">Parameter query option</param>
        static IQueryItem AddCriteriaQueryItemHandler(DefaultQuery originalQuery, IQueryItem queryItem, QueryParameterOptions parameterQueryOption)
        {
            if (originalQuery == null || queryItem == null)
            {
                return(null);
            }
            Criteria criteria   = queryItem as Criteria;
            var      queryValue = criteria.Value as IQuery;

            originalQuery.SetHasConverter(originalQuery.HasConverter || criteria.Converter != null);
            if (queryValue != null)
            {
                if (queryValue.GetEntityType() == null)
                {
                    throw new EZNEWException("the IQuery object used for the subquery must set the property EntityType");
                }
                queryValue = HandleParameterQueryBeforeUse(queryValue, parameterQueryOption);
                criteria.SetValue(queryValue);
                originalQuery.subqueryCollection.Add(queryValue);
                originalQuery.SetHasSubQuery(true);
                originalQuery.SetHasJoin(originalQuery.HasJoin || queryValue.HasJoin);
                originalQuery.SetHasRecurveCriteria(originalQuery.HasRecurveCriteria || queryValue.HasRecurveCriteria);
                originalQuery.SetHasConverter(originalQuery.HasConverter || queryValue.HasConverter);
            }
            else
            {
                bool             equalCriterial          = false;
                bool             verifyValueNull         = false;
                CriteriaOperator verifyValueNullOperator = CriteriaOperator.IsNull;
                switch (criteria.Operator)
                {
                case CriteriaOperator.Equal:
                    equalCriterial  = true;
                    verifyValueNull = true;
                    break;

                case CriteriaOperator.NotEqual:
                    verifyValueNull         = true;
                    verifyValueNullOperator = CriteriaOperator.NotNull;
                    break;

                case CriteriaOperator.In:
                    equalCriterial = true;
                    break;
                }
                if (criteria.GetCriteriaRealValue() == null && verifyValueNull)
                {
                    equalCriterial    = false;
                    criteria.Operator = verifyValueNullOperator;
                }
                if (equalCriterial)
                {
                    originalQuery.equalCriteriaCollection.Add(criteria);
                }
            }
            originalQuery.atomicConditionCount++;
            originalQuery.allConditionFieldNameCollection.Add(criteria.Name);
            return(criteria);
        }
 public AWSProductListDynamoDBController(IAWSProductListDynamoDbExamples dynamoDbExamples, IInsertItem insertItem, IQueryItem queryItem, IDeleteItem deleteItem, IUpdateItem updateItem)
 {
     _dynamoDbExamples = dynamoDbExamples;
     _insertItem       = insertItem;
     _queryItem        = queryItem;
     _deleteItem       = deleteItem;
     _updateItem       = updateItem;
 }
Пример #5
0
 /// <summary>
 /// Clone a IQueryItem
 /// </summary>
 /// <param name="originalQueryItem">Originnal query item</param>
 /// <returns></returns>
 public static IQueryItem Clone(IQueryItem originalQueryItem)
 {
     if (originalQueryItem is Criteria criteria)
     {
         return(criteria.Clone());
     }
     if (originalQueryItem is IQuery query)
     {
         return(query.Clone());
     }
     return(null);
 }
Пример #6
0
        private string TraverseTree(IQueryItem item)
        {
            if (item is IConnectorItem)
            {
                IConnectorItem conn         = item as IConnectorItem;
                StringBuilder  buffer       = new StringBuilder();
                string         leftRequest  = TraverseTree(_queryNodes[conn.LeftChild]);
                string         rightRequest = TraverseTree(_queryNodes[conn.RightChild]);
                buffer.AppendFormat("({0} {1} {2})", leftRequest, conn.FilterType.ToString(), rightRequest);

                return(buffer.ToString());
            }
            else
            {
                ILeafItem leaf = item as ILeafItem;
                return(BuildSearchString(leaf));
            }
        }
Пример #7
0
        /// <summary>
        /// Add queryInfo query item handler
        /// </summary>
        /// <param name="originalQuery">Original query</param>
        /// <param name="queryItem">Parameter query item</param>
        /// <param name="parameterQueryOption">Parameter query option</param>
        static IQueryItem AddQueryInfoQueryItemHandler(DefaultQuery originalQuery, IQueryItem queryItem, QueryParameterOption parameterQueryOption)
        {
            if (originalQuery == null || queryItem == null)
            {
                return(null);
            }
            DefaultQuery valueQuery = queryItem as DefaultQuery;

            valueQuery = HandleParameterQueryBeforeUse(valueQuery, parameterQueryOption);
            valueQuery.SetEntityType(originalQuery.entityType);
            originalQuery.SetHasSubQuery(originalQuery.HasSubquery || valueQuery.HasSubquery);
            originalQuery.SetHasJoin(originalQuery.HasJoin || valueQuery.HasJoin);
            originalQuery.SetHasRecurveCriteria(originalQuery.HasRecurveCriteria || valueQuery.HasRecurveCriteria);
            originalQuery.equalCriteriaCollection.AddRange(valueQuery.equalCriteriaCollection);
            originalQuery.atomicConditionCount += valueQuery.AtomicConditionCount;
            originalQuery.allConditionFieldNameCollection.AddRange(valueQuery.AllConditionFieldNames);
            originalQuery.alreadySetGlobalCondition |= valueQuery.alreadySetGlobalCondition;
            return(valueQuery);
        }
Пример #8
0
        /// <summary>
        /// Generate expressionn
        /// </summary>
        /// <param name="parameter">Parameter expression</param>
        /// <param name="queryItem">Query item</param>
        /// <returns>Return query expression</returns>
        Expression GenerateExpression(Expression parameter, IQueryItem queryItem)
        {
            if (queryItem is Criteria)
            {
                return(GenerateSingleExpression(parameter, queryItem as Criteria));
            }
            IQuery query = queryItem as IQuery;

            if (query?.Criterias.IsNullOrEmpty() ?? true)
            {
                return(null);
            }
            var criteriasCount = query.Criterias.Count();
            var firstCriteria  = query.Criterias.First();

            if (criteriasCount == 1 && firstCriteria.Item2 is Criteria)
            {
                return(GenerateSingleExpression(parameter, firstCriteria.Item2 as Criteria));
            }
            Expression conditionExpression = null;

            foreach (var criteriaItem in query.Criterias)
            {
                var childExpression = GenerateExpression(parameter, criteriaItem.Item2);
                if (conditionExpression == null)
                {
                    conditionExpression = childExpression;
                    continue;
                }
                if (criteriaItem.Item1 == QueryOperator.AND)
                {
                    conditionExpression = Expression.AndAlso(conditionExpression, childExpression);
                }
                else
                {
                    conditionExpression = Expression.OrElse(conditionExpression, childExpression);
                }
            }
            return(conditionExpression);
        }
 private string ProcessQueryItem(IQueryItem item)
 {
     if (item == null)
     {
         return("");
     }
     else if (item is BEXP)
     {
         return(ProcessBEXP(item as BEXP));
     }
     else if (item is TEXP)
     {
         return(ProcessTEXP(item as TEXP));
     }
     else if (item is FEXP)
     {
         return(ProcessFEXP(item as FEXP));
     }
     else if (item is NEXP)
     {
         return(ProcessNEXP(item as NEXP));
     }
     else if (item is COL)
     {
         return(ProcessCOL(item as COL));
     }
     else if (item is VAL)
     {
         return(ProcessVAL(item as VAL));
     }
     else if (item is ARR)
     {
         return(ProcessARR(item as ARR));
     }
     else if (item is IQueryOrderItem)
     {
         return(ProcessOrderItem(item as IQueryOrderItem));
     }
     return("");
 }
Пример #10
0
        /// <summary>
        /// Add a IQueryItem
        /// </summary>
        /// <param name="queryOperator">Connect operator</param>
        /// <param name="queryItem">query item</param>
        /// <param name="queryOption">query parameter option</param>
        public IQuery AddQueryItem(QueryOperator queryOperator, IQueryItem queryItem, QueryParameterOptions queryOption = null)
        {
            #region invoke handler

            var queryItemTypeId = queryItem?.GetType().GUID ?? Guid.Empty;
            Func <DefaultQuery, IQueryItem, QueryParameterOptions, IQueryItem> handler = null;
            QueryManager.AddQueryItemHandlers?.TryGetValue(queryItemTypeId, out handler);
            if (handler != null)
            {
                queryItem = handler(this, queryItem, queryOption);
            }

            #endregion

            if (queryItem != null)
            {
                //clear data
                queryExpressionCaches?.Clear();
                criteriaCollection.Add(new Tuple <QueryOperator, IQueryItem>(queryOperator, queryItem));
            }
            return(this);
        }
Пример #11
0
 partial void ResetDirty_PreCondition(IQueryItem instance);
Пример #12
0
 partial void ResetDirty_PostValidate(IQueryItem instance);
Пример #13
0
 partial void Parent_SetCondition(ref IQueryItem instance, ref IQueryFolder setValue);
Пример #14
0
 partial void OwnerDescriptor_SetCondition(ref IQueryItem instance, ref IIdentityDescriptor setValue);
Пример #15
0
 partial void IsPersonal_SetCondition(ref IQueryItem instance, ref Boolean setValue);
Пример #16
0
 /// <summary>
 ///     Adds the specified item.
 /// </summary>
 /// <param name="item">The item.</param>
 /// <exception cref="DynCon.OSI.Core.Helpers.ToBeImplementedException"></exception>
 void IQueryFolder.Add(IQueryItem item)
 {
     throw new ToBeImplementedException();
 }
 public UpdateItem(IQueryItem queryItem, IAmazonDynamoDB dynamoDbClient)
 {
     _queryItem      = queryItem;
     _dynamoDbClient = dynamoDbClient;
 }
Пример #18
0
 partial void Delete_PostValidate(IQueryItem instance);
Пример #19
0
 partial void CanManagePermissions_SetCondition(ref IQueryItem instance, ref Boolean setValue);
Пример #20
0
        private static IQueryItem WriteExpression(Expression e)
        {
            BinaryOperator binaryOperator;

            if (binaryOperators.TryGetValue(e.NodeType, out binaryOperator))
            {
                IQueryItem queryItem1 = WriteExpression((e as BinaryExpression).Left);
                IQueryItem queryItem2 = WriteExpression((e as BinaryExpression).Right);
                if ((object)(queryItem1 as VAL) != null && (queryItem1 as VAL).Value == DBNull.Value)
                {
                    if (binaryOperator == BinaryOperator.Equal)
                    {
                        return (IQueryItem) new BEXP()
                               {
                                   Operand1 = queryItem2, Operator = BinaryOperator.IsNull
                               }
                    }
                    ;
                    if (binaryOperator == BinaryOperator.NotEqual)
                    {
                        return (IQueryItem) new BEXP()
                               {
                                   Operand1 = queryItem2, Operator = BinaryOperator.IsNotNull
                               }
                    }
                    ;
                }
                if ((object)(queryItem2 as VAL) != null && (queryItem2 as VAL).Value == DBNull.Value)
                {
                    if (binaryOperator == BinaryOperator.Equal)
                    {
                        return (IQueryItem) new BEXP()
                               {
                                   Operand1 = queryItem1, Operator = BinaryOperator.IsNull
                               }
                    }
                    ;
                    if (binaryOperator == BinaryOperator.NotEqual)
                    {
                        return (IQueryItem) new BEXP()
                               {
                                   Operand1 = queryItem1, Operator = BinaryOperator.IsNotNull
                               }
                    }
                    ;
                }
                return((IQueryItem) new BEXP()
                {
                    Operand1 = queryItem1, Operand2 = queryItem2, Operator = binaryOperator
                });
            }
            if (e.NodeType == ExpressionType.New)
            {
                object obj = Expression.Lambda(e).Compile().DynamicInvoke();
                return((IQueryItem) new VAL()
                {
                    Value = obj
                });
            }
            if (e.NodeType == ExpressionType.Not)
            {
                IQueryItem queryItem = NewHelpers.WriteExpression((e as UnaryExpression).Operand);
                return((IQueryItem) new BEXP()
                {
                    Operand1 = queryItem, Operator = BinaryOperator.Not
                });
            }
            TransformOperator transformOperator;

            if (NewHelpers.transformOperators.TryGetValue(e.NodeType, out transformOperator))
            {
                IQueryItem queryItem1 = NewHelpers.WriteExpression((e as BinaryExpression).Left);
                IQueryItem queryItem2 = NewHelpers.WriteExpression((e as BinaryExpression).Right);
                return((IQueryItem) new TEXP()
                {
                    Operand1 = queryItem1, Operand2 = queryItem2, Operator = transformOperator
                });
            }
            if (e.NodeType == ExpressionType.Negate)
            {
                IQueryItem queryItem = NewHelpers.WriteExpression((e as BinaryExpression).Left);
                return((IQueryItem) new TEXP()
                {
                    Operand1 = queryItem, Operator = TransformOperator.Negate
                });
            }
            if (e is MemberExpression)
            {
                MemberExpression exp = e as MemberExpression;
                KeyValuePair <NewHelpers.FunctionProperty, QueryFunctions>[] array = NewHelpers.functionProperties.Where <KeyValuePair <NewHelpers.FunctionProperty, QueryFunctions> >((Func <KeyValuePair <NewHelpers.FunctionProperty, QueryFunctions>, bool>)(a =>
                {
                    if (a.Key.FunctionName == exp.Member.Name.ToLower())
                    {
                        return(a.Key.ObjectType.IsAssignableFrom(exp.Expression.Type));
                    }
                    return(false);
                })).ToArray <KeyValuePair <NewHelpers.FunctionProperty, QueryFunctions> >();
                if ((uint)array.Length > 0U)
                {
                    IQueryItem queryItem = NewHelpers.WriteExpression(exp.Expression);
                    return((IQueryItem) new FEXP()
                    {
                        Function = array[0].Value, Parameters = new IQueryValue[1] {
                            (IQueryValue)queryItem
                        }
                    });
                }
                if (exp.Expression is ParameterExpression || exp.Expression is MemberExpression && (exp.Expression as MemberExpression).Expression is ParameterExpression)
                {
                    return((IQueryItem) new COL(exp.Member.Name));
                }
                object obj = Expression.Lambda((Expression)exp).Compile().DynamicInvoke();
                if (obj == null)
                {
                    return (IQueryItem) new VAL()
                           {
                               Value = (object)DBNull.Value
                           }
                }
                ;
                if (!obj.GetType().IsArray)
                {
                    return (IQueryItem) new VAL()
                           {
                               Value = obj
                           }
                }
                ;
                return((IQueryItem) new ARR()
                {
                    Values = (IQueryValue[])((Array)obj).Cast <object>().Select <object, VAL>((Func <object, VAL>)(a => new VAL()
                    {
                        Value = a
                    })).ToArray <VAL>()
                });
            }
            if (e is UnaryExpression)
            {
                return(NewHelpers.WriteExpression((e as UnaryExpression).Operand));
            }
            if (e is ConstantExpression)
            {
                return (IQueryItem) new VAL()
                       {
                           Value = Expression.Lambda(e).Compile().DynamicInvoke()
                       }
            }
            ;
            if (!(e is MethodCallExpression))
            {
                return((IQueryItem)null);
            }
            MethodCallExpression methodCallExpression = (MethodCallExpression)e;
            QueryFunctions       queryFunctions;

            if (NewHelpers.aggregteFunctions.TryGetValue(methodCallExpression.Method.Name.ToLower(CultureInfo.InvariantCulture), out queryFunctions) && methodCallExpression.Object is ParameterExpression)
            {
                List <IQueryItem> source = new List <IQueryItem>();
                foreach (Expression expression in methodCallExpression.Arguments)
                {
                    source.Add(NewHelpers.WriteExpression((expression as LambdaExpression).Body));
                }
                if (methodCallExpression.Method.Name.ToLower() == "count")
                {
                    source.Add((IQueryItem)COL.ALL);
                }
                FEXP fexp = new FEXP();
                fexp.Function = queryFunctions;
                IQueryValue[] array = source.Where <IQueryItem>((Func <IQueryItem, bool>)(a => a is IQueryValue)).Cast <IQueryValue>().ToArray <IQueryValue>();
                fexp.Parameters = array;
                return((IQueryItem)fexp);
            }
            if (methodCallExpression.Method.Name.ToLower(CultureInfo.InvariantCulture) == "asc")
            {
                List <IQueryItem> queryItemList = new List <IQueryItem>();
                foreach (Expression expression in methodCallExpression.Arguments)
                {
                    queryItemList.Add(NewHelpers.WriteExpression((expression as LambdaExpression).Body));
                }
                return((IQueryItem) new ASC()
                {
                    Value = (IQueryValue)queryItemList[0]
                });
            }
            if (methodCallExpression.Method.Name.ToLower(CultureInfo.InvariantCulture) == "desc")
            {
                List <IQueryItem> queryItemList = new List <IQueryItem>();
                foreach (Expression expression in methodCallExpression.Arguments)
                {
                    queryItemList.Add(NewHelpers.WriteExpression((expression as LambdaExpression).Body));
                }
                return((IQueryItem) new DESC()
                {
                    Value = (IQueryValue)queryItemList[0]
                });
            }
            if (NewHelpers.staticFunctions.TryGetValue(methodCallExpression.Method.Name.ToLower(CultureInfo.InvariantCulture), out queryFunctions))
            {
                List <IQueryItem> source = new List <IQueryItem>();
                foreach (Expression e1 in methodCallExpression.Arguments)
                {
                    source.Add(NewHelpers.WriteExpression(e1));
                }
                FEXP fexp = new FEXP();
                fexp.Function = queryFunctions;
                IQueryValue[] array = source.Where <IQueryItem>((Func <IQueryItem, bool>)(a => a is IQueryValue)).Cast <IQueryValue>().ToArray <IQueryValue>();
                fexp.Parameters = array;
                return((IQueryItem)fexp);
            }
            if (NewHelpers.instanceFunctions.TryGetValue(methodCallExpression.Method.Name.ToLower(CultureInfo.InvariantCulture), out queryFunctions))
            {
                List <IQueryItem> source = new List <IQueryItem>();
                source.Add(NewHelpers.WriteExpression(methodCallExpression.Object));
                foreach (Expression e1 in methodCallExpression.Arguments)
                {
                    source.Add(NewHelpers.WriteExpression(e1));
                }
                FEXP fexp = new FEXP();
                fexp.Function = queryFunctions;
                IQueryValue[] array = source.Where <IQueryItem>((Func <IQueryItem, bool>)(a => a is IQueryValue)).Cast <IQueryValue>().ToArray <IQueryValue>();
                fexp.Parameters = array;
                return((IQueryItem)fexp);
            }
            if (methodCallExpression.Method.Name.ToLower(CultureInfo.InvariantCulture) == "in")
            {
                IQueryItem queryItem1 = NewHelpers.WriteExpression(methodCallExpression.Arguments[0]);
                IQueryItem queryItem2 = NewHelpers.WriteExpression(methodCallExpression.Arguments[1]);
                return((IQueryItem) new BEXP()
                {
                    Operand1 = queryItem1, Operand2 = queryItem2, Operator = BinaryOperator.In
                });
            }
            if (((IEnumerable <string>) new string[3] {
                "contains", "startswith", "endswith"
            }).Contains <string>(methodCallExpression.Method.Name.ToLower(CultureInfo.InvariantCulture)))
            {
                string            lower         = methodCallExpression.Method.Name.ToLower(CultureInfo.InvariantCulture);
                List <IQueryItem> queryItemList = new List <IQueryItem>();
                queryItemList.Add(NewHelpers.WriteExpression(methodCallExpression.Object));
                foreach (Expression e1 in methodCallExpression.Arguments)
                {
                    queryItemList.Add(NewHelpers.WriteExpression(e1));
                }
                VAL                val            = (VAL)"%";
                IQueryItem         queryItem1     = queryItemList[1];
                List <IQueryValue> queryValueList = new List <IQueryValue>();
                if (lower == "contains" || lower == "endswith")
                {
                    queryValueList.Add((IQueryValue)val);
                }
                queryValueList.Add((IQueryValue)queryItem1);
                if (lower == "contains" || lower == "startswith")
                {
                    queryValueList.Add((IQueryValue)val);
                }
                FEXP fexp = new FEXP();
                fexp.Function = QueryFunctions.Concat;
                IQueryValue[] array = queryValueList.ToArray();
                fexp.Parameters = array;
                IQueryItem queryItem2 = (IQueryItem)fexp;
                BEXP       bexp       = new BEXP();
                bexp.Operator = BinaryOperator.Like;
                IQueryItem queryItem3 = queryItemList[0];
                bexp.Operand1 = queryItem3;
                IQueryItem queryItem4 = queryItem2;
                bexp.Operand2 = queryItem4;
                return((IQueryItem)bexp);
            }
            object obj1 = Expression.Lambda((Expression)methodCallExpression).Compile().DynamicInvoke();

            if (obj1 == null)
            {
                return (IQueryItem) new VAL()
                       {
                           Value = (object)DBNull.Value
                       }
            }
            ;
            if (!obj1.GetType().IsArray)
            {
                return (IQueryItem) new VAL()
                       {
                           Value = obj1
                       }
            }
            ;
            return((IQueryItem) new ARR()
            {
                Values = (IQueryValue[])((Array)obj1).Cast <object>().Select <object, VAL>((Func <object, VAL>)(a => new VAL()
                {
                    Value = a
                })).ToArray <VAL>()
            });
        }
Пример #21
0
 partial void QueryItem_SetCondition(ref IQueryFolderContentsChangedEventArgs instance, ref IQueryItem setValue);
Пример #22
0
 /// <summary>
 ///     Determines whether [contains] [the specified item].
 /// </summary>
 /// <param name="item">The item.</param>
 /// <returns>Boolean.</returns>
 /// <exception cref="DynCon.OSI.Core.Helpers.ToBeImplementedException"></exception>
 Boolean IQueryFolder.Contains(IQueryItem item)
 {
     throw new ToBeImplementedException();
 }
Пример #23
0
 partial void ResetInternal_PostValidate(IQueryItem instance);
Пример #24
0
 partial void Delete_PreCondition(IQueryItem instance);
Пример #25
0
 partial void ResetInternal_PreCondition(IQueryItem instance);
Пример #26
0
 partial void IsDirty_SetCondition(ref IQueryItem instance, ref Boolean setValue);
Пример #27
0
 partial void AccessControlList_SetCondition(ref IQueryItem instance, ref IAccessControlList setValue);
Пример #28
0
 public void AddItem(IQueryItem item)
 {
     Items.Add(item);
 }