Exemple #1
0
        private StatementQueryBuildPart BuildWhereStatementRelations(
            IList <WhereStatementRelation> whereStatementRelations,
            int queryParamIndex,
            StatementRelationOperator relationOperator
            )
        {
            var paramIndex = queryParamIndex;

            StatementQuery mergedQueryPart = null;

            foreach (var whereStatementRelation in whereStatementRelations)
            {
                var whereStatementsQueryPart = BuildWhereStatements(whereStatementRelation.WhereStatements, paramIndex,
                                                                    whereStatementRelation.RelationOperator);
                var relationStatementsQueryPart =
                    BuildWhereStatementRelations(whereStatementRelation.WhereStatementRelations, whereStatementsQueryPart.QueryParamIndex,
                                                 whereStatementRelation.RelationOperator);

                var itemMergedQueryPart = MergeQueryParts(whereStatementsQueryPart.StatementQueryPart,
                                                          relationStatementsQueryPart.StatementQueryPart,
                                                          whereStatementRelation.RelationOperator);

                paramIndex = relationStatementsQueryPart.QueryParamIndex;

                mergedQueryPart = MergeQueryParts(mergedQueryPart, itemMergedQueryPart, relationOperator);
            }

            return(new StatementQueryBuildPart
            {
                StatementQueryPart = mergedQueryPart,
                QueryParamIndex = paramIndex
            });
        }
Exemple #2
0
        private StatementQuery MergeQueryParts(
            StatementQuery statementQueryPart,
            StatementQuery statementRelationsQueryPart,
            StatementRelationOperator statementRelationOperator
            )
        {
            if (statementQueryPart == null && statementRelationsQueryPart == null)
            {
                throw new ArgumentException("Both statement query parts can not be null");
            }

            if (statementQueryPart == null)
            {
                return(statementRelationsQueryPart);
            }

            if (statementRelationsQueryPart == null)
            {
                return(statementQueryPart);
            }

            var sql        = $"({statementQueryPart.Sql}) {ResolveRelation(statementRelationOperator)} ({statementRelationsQueryPart.Sql})";
            var parameters = statementQueryPart.Parameters.Concat(statementRelationsQueryPart.Parameters).ToList();

            return(new StatementQuery(sql, parameters));
        }
Exemple #3
0
        private StatementQueryBuildPart BuildWhereStatements(
            ICollection <WhereStatement> whereStatements,
            int queryParamIndex,
            StatementRelationOperator statementRelationOperator
            )
        {
            if (whereStatements.Count <= 0)
            {
                return(new StatementQueryBuildPart
                {
                    StatementQueryPart = null,
                    QueryParamIndex = queryParamIndex
                });
            }

            var parameters               = new ExpandoObject();
            var parametersCollection     = (ICollection <KeyValuePair <string, object> >)parameters;
            var whereStatementSqlBuilder = new StringBuilder();

            var firstStatement = true;

            foreach (var whereStatement in whereStatements)
            {
                if (firstStatement)
                {
                    firstStatement = false;
                }
                else
                {
                    whereStatementSqlBuilder.AppendFormat(@" {0}", ResolveRelation(statementRelationOperator));
                }

                if (whereStatement.NullableStatementOperator.HasValue)
                {
                    whereStatementSqlBuilder.AppendFormat(@" ""{0}"" {1}", whereStatement.ColumnName,
                                                          ResolveNullable(whereStatement.NullableStatementOperator.Value));
                }
                else
                {
                    if (!whereStatement.StatementOperator.HasValue)
                    {
                        throw new ArgumentException("Where statement operator not defined");
                    }

                    if (whereStatement.StatementOperator == WhereStatementOperator.In)
                    {
                        var arrayString = $"('{string.Join("','", (object[]) whereStatement.Value)}')";

                        whereStatementSqlBuilder.AppendFormat(@" ""{0}"" {1} {2}", whereStatement.ColumnName,
                                                              ResolveOperator(whereStatement.StatementOperator.Value), arrayString);
                    }
                    else
                    {
                        whereStatementSqlBuilder.AppendFormat(@" ""{0}"" {1} @WhereValue{2}", whereStatement.ColumnName,
                                                              ResolveOperator(whereStatement.StatementOperator.Value), queryParamIndex);

                        parametersCollection.Add(new KeyValuePair <string, object>($"WhereValue{queryParamIndex}",
                                                                                   whereStatement.Value));

                        queryParamIndex++;
                    }
                }
            }

            return(new StatementQueryBuildPart
            {
                QueryParamIndex = queryParamIndex,
                StatementQueryPart = new StatementQuery(whereStatementSqlBuilder.ToString(), parametersCollection)
            });
        }
Exemple #4
0
 private string ResolveRelation(StatementRelationOperator statementRelation)
 {
     return(statementRelation == StatementRelationOperator.Or ? "OR" : "AND");
 }
 public WhereStatementRelation(WhereStatement left, WhereStatementRelation right, StatementRelationOperator relationOperator)
 {
     RelationOperator = relationOperator;
     WhereStatements.Add(left);
     WhereStatementRelations.Add(right);
 }