protected virtual void SetQueryContext(SimpleQuery query)
        {
            _query     = query;
            _tableName = _schema.BuildObjectName(query.TableName);
            _table     = _schema.FindTable(_tableName);
            var selectClause = _query.Clauses.OfType <SelectClause>().SingleOrDefault();

            if (selectClause != null)
            {
                if (selectClause.Columns.OfType <AllColumnsSpecialReference>().Any())
                {
                    _columns = ExpandAllColumnsReferences(selectClause.Columns).ToArray();
                }
                else
                {
                    _columns = selectClause.Columns.ToArray();
                }
            }
            else
            {
                _columns = _table.Columns.Select(c => ObjectReference.FromStrings(_table.Schema, _table.ActualName, c.ActualName)).ToArray();
            }

            HandleWithClauses();

            _whereCriteria = _query.Clauses.OfType <WhereClause>().Aggregate(SimpleExpression.Empty,
                                                                             (seed, where) => seed && where.Criteria);
            _havingCriteria = _query.Clauses.OfType <HavingClause>().Aggregate(SimpleExpression.Empty,
                                                                               (seed, having) => seed && having.Criteria);

            _commandBuilder.SetText(GetSelectClause(_tableName));
        }
Esempio n. 2
0
        public IEnumerable <string> GetJoinClauses(IEnumerable <JoinClause> joins, ICommandBuilder commandBuilder)
        {
            var expressionFormatter = new ExpressionFormatter(commandBuilder, _schema);

            foreach (var join in joins)
            {
                var builder = new StringBuilder(JoinKeyword);
                builder.AppendFormat(" JOIN {0}{1} ON ({2})",
                                     _schema.FindTable(_schema.BuildObjectName(join.Table.ToString())).QualifiedName,
                                     string.IsNullOrWhiteSpace(join.Table.GetAlias()) ? string.Empty : " " + _schema.QuoteObjectName(join.Table.GetAlias()),
                                     expressionFormatter.Format(join.JoinExpression));
                yield return(builder.ToString().Trim());
            }
        }
Esempio n. 3
0
        private void SetQueryContext(SimpleQuery query)
        {
            _query = query;
            var selectClause = _query.Clauses.OfType <SelectClause>().SingleOrDefault();

            if (selectClause != null)
            {
                _columns = selectClause.Columns.ToArray();
            }
            else
            {
                _columns = new SimpleReference[0];
            }

            _whereCriteria = _query.Clauses.OfType <WhereClause>().Aggregate(SimpleExpression.Empty,
                                                                             (seed, where) => seed && where.Criteria);
            _havingCriteria = _query.Clauses.OfType <HavingClause>().Aggregate(SimpleExpression.Empty,
                                                                               (seed, having) => seed && having.Criteria);

            _tableName = _schema.BuildObjectName(query.TableName.Split('.').Last());
            _table     = _schema.FindTable(_tableName);
            _commandBuilder.SetText(GetSelectClause(_tableName));
        }