Ejemplo n.º 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
            });
        }
Ejemplo n.º 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));
        }