private void TraverseAvailableOperators(OnOperator onOperator)
        {
            Type operatorNodeType = typeof(OperatorNode);

            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                IEnumerable <Type> operatorTypes = assembly.GetTypes().Where(type => type.IsSubclassOf(operatorNodeType));

                foreach (var type in operatorTypes)
                {
                    PropertyInfo operatorField = type.GetProperty("Operator");
                    if (operatorField != null)
                    {
                        object value = operatorField.GetValue(type);

                        if (value is char)
                        {
                            char operatorSymbol = (char)value;

                            onOperator(operatorSymbol, type);
                        }
                    }
                }
            }
        }
Example #2
0
        private void TraverseAvailableOperators(OnOperator onOperator)
        {
            // get the type declaration of OperatorNode
            Type operatorNodeType = typeof(OperatorExpressionTreeNode);

            // Iterate over all loaded assemblies:
            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                // Get all types that inherit from our OperatorNode class using LINQ
                IEnumerable <Type> operatorTypes =
                    assembly.GetTypes().Where(type => type.IsSubclassOf(operatorNodeType));

                // Iterate over those subclasses of OperatorNode
                foreach (var type in operatorTypes)
                {
                    // for each subclass, retrieve the Operator property
                    PropertyInfo operatorField = type.GetProperty("OperatorChar");
                    if (operatorField != null)
                    {
                        // Get the character of the Operator
                        object value = operatorField.GetValue(type);
                        if (value is char)
                        {
                            char operatorSymbol = (char)value;

                            // And infoke the function passed as parameter
                            // with the operator symbol and the operator class
                            onOperator(operatorSymbol, type);
                        }
                    }
                }
            }
        }
Example #3
0
        private string OnOperatorToSql(OnOperator oper)
        {
            switch (oper)
            {
            case OnOperator.EqualTo:
                return("=");

            case OnOperator.GreaterThan:
                return(">");

            case OnOperator.GreatherEqualThan:
                return(">=");

            //case OnOperator.In:
            //    return "IN";
            case OnOperator.LessEqualThan:
                return("<=");

            case OnOperator.LessThan:
                return("<");

            //case OnOperator.Like:
            //    return "LIKE";
            case OnOperator.NotEqualTo:
                return("!=");

            //case OnOperator.NotIn:
            //    return " NOT IN";
            default:
                throw new ArgumentException("Invalid WhereOperator");
            }
        }
Example #4
0
        public SqlQueryBuilder OnCondition(string leftTableFieldName, OnOperator onOperator, string rightTableFieldName)
        {
            if (_joinInfo.IsNull() || _joinInfo.LeftTable.IsNull() || _joinInfo.RightTable.IsNull())
            {
                throw new ArgumentException($"No JoinInfo have been found. The call to {nameof(OnCondition)} has been probabily made without calling {nameof(From)} or a JOIN method");
            }

            return(OnCondition(_joinInfo.LeftTable.TableAlias, _joinInfo.LeftTable.TableName, onOperator, _joinInfo.RightTable.TableAlias, _joinInfo.RightTable.TableName));
        }
Example #5
0
        /// <summary>
        /// This function will search for all instances of the classes that inherit from the OperatorNode
        /// class and add the types to the dictionary with the specified operator character key.
        /// </summary>
        /// <param name="onOperator">OnOperator.</param>
        private void TraverseAvailableOperators(OnOperator onOperator)
        {
            // get the type declaration of OperatorNode
            Type operatorNodeType = typeof(OperatorNode);

            // Iterate over all loaded assemblies:
            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                // Get all types that inherit from our operatorNode class using LINQ
                IEnumerable <Type> operatorTypes = assembly.GetTypes()
                                                   .Where(type => type.IsSubclassOf(operatorNodeType));

                // Iterate over those subclasses of OperatorNode
                foreach (var type in operatorTypes)
                {
                    // for each subclass, retrieve the Operator property
                    PropertyInfo operatorField = type.GetProperty("Operator");
                    if (operatorField != null)
                    {
                        // Get the character of the Operator
                        object value = operatorField.GetValue(type);

                        // If the property is not static, use the following code instead:
                        // object value = operatorField.GetValue(Activator.CreateInstance(type, new ConstantNode("0"), new ConstantNode("0")));
                        if (value is char)
                        {
                            char operatorSymbol = (char)value;

                            // And invoke the function passed as parameter
                            // With the operator symbol and the operator class
                            onOperator(operatorSymbol, type);
                        }
                    }
                }
            }
        }
Example #6
0
        private string OnConditionImpl(string leftTableAlias, string leftTableFieldName, OnOperator onOperator, string rightTableAlias, string rightTableFieldName)
        {
            leftTableAlias.AssertHasText(nameof(leftTableAlias));
            leftTableFieldName.AssertHasText(nameof(leftTableFieldName));
            rightTableAlias.AssertHasText(nameof(rightTableAlias));
            rightTableFieldName.AssertHasText(nameof(rightTableFieldName));

            switch (onOperator)
            {
            case OnOperator.EqualTo:
            case OnOperator.NotEqualTo:
            case OnOperator.GreaterThan:
            case OnOperator.GreatherEqualThan:
            case OnOperator.LessEqualThan:
            case OnOperator.LessThan:

                return($"{leftTableAlias}.{leftTableFieldName} {OnOperatorToSql(onOperator)} {rightTableAlias}.{rightTableFieldName}");
            }

            return(string.Empty);
        }
Example #7
0
        public SqlQueryBuilder OrOnCondition(string leftTableAlias, string leftTableFieldName, OnOperator onOperator, string rightTableAlias, string rightTableFieldName)
        {
            string condition = OnConditionImpl(leftTableAlias, leftTableFieldName, onOperator, rightTableAlias, rightTableFieldName);

            _query.Append($" OR ({condition})");
            return(this);
        }
Example #8
0
        public SqlQueryBuilder OnCondition(string leftTableAlias, string leftTableFieldName, OnOperator onOperator, string rightTableAlias, string rightTableFieldName)
        {
            if (_joinInfo.IsNull() || _joinInfo.LeftTable.IsNull() || _joinInfo.RightTable.IsNull())
            {
                throw new ArgumentException($"No JoinInfo have been found. The call to {nameof(OnCondition)} has been probabily made without calling {nameof(From)} or a JOIN method");
            }

            string condition = OnConditionImpl(leftTableAlias, leftTableFieldName, onOperator, rightTableAlias, rightTableFieldName);

            _query.Append($" ON {condition}");

            return(this);
        }