Пример #1
0
        public MemoryDbDataReader.ResultBatch Execute(Dictionary <string, Table> tables, RawData rawData,
                                                      SqlQuerySpecification sqlQuery,
                                                      SqlOrderByClause orderByClause = null)
        {
            if (sqlQuery.FromClause != null)
            {
                rawData.AddTablesFromClause(sqlQuery.FromClause, tables);
                if (sqlQuery.WhereClause != null)
                {
                    rawData.ExecuteWhereClause(sqlQuery.WhereClause);
                }
            }
            else
            {
                // We do not select data from any table, so we insert an empty row to trigger a result in AddData().
                rawData.RawRowList.Add(new RawTableJoinRow());
            }

            var batch = InitializeBatch(rawData, sqlQuery);

            if (sqlQuery.GroupByClause != null)
            {
                rawData.AddGroupByClause(sqlQuery.GroupByClause);
            }

            rawData.HavingClause = sqlQuery.HavingClause?.Expression;
            rawData.SortOrder    = GetSortOrder(orderByClause, sqlQuery);

            new QueryResultBuilder(rawData, sqlQuery.SelectClause.IsDistinct).AddData(batch);
            if (sqlQuery.IntoClause != null)
            {
                InsertIntoTable(sqlQuery.IntoClause, tables, batch);
            }
            return(batch);
        }
Пример #2
0
        private static bool IsMissingTopOffsetOrForXml(SqlQuerySpecification sqlQuery)
        {
            var select = sqlQuery.Children.FirstOrDefault(c => c is SqlSelectClause) as SqlSelectClause;

            if (select == null)
            {
                return(true);
            }
            return(select.Children.Any(c => c is SqlTopSpecification) == false &&
                   select.Children.Any(c => c is SqlForXmlClause) == false &&
                   select.Children.Any(c => c is SqlOffsetFetchClause) == false);
        }
Пример #3
0
 private static SqlOrderByItemCollection GetSortOrder(SqlOrderByClause orderByClause,
                                                      SqlQuerySpecification sqlQuery)
 {
     if (sqlQuery.OrderByClause != null && orderByClause == null)
     {
         orderByClause = sqlQuery.OrderByClause;
         if (IsPartialQuery(sqlQuery.Parent) && IsMissingTopOffsetOrForXml(sqlQuery))
         {
             throw new SqlOrderByException( );
         }
     }
     return(orderByClause?.Items);
 }
Пример #4
0
        public override void Visit(SqlQuerySpecification codeObject)
        {
            var children = codeObject.Children.ToList();

            for (var i = 0; i < children.Count; i++)
            {
                if (i > 0)
                {
                    _stringBuilder.AppendIndentedLine();
                }

                children[i].Accept(this);
            }
        }
Пример #5
0
        private MemoryDbDataReader.ResultBatch InitializeBatch(RawData rawData, SqlQuerySpecification sqlQuery)
        {
            var batch  = new MemoryDbDataReader.ResultBatch( );
            var fields = sqlQuery.SelectClause.Children.ToList( );

            if (_InsertColumns != null)
            {
                var fieldCount = fields.Count;
                if (_InsertColumns.Count > fieldCount)
                {
                    throw new SqlInsertTooManyColumnsException( );
                }

                if (_InsertColumns.Count < fieldCount)
                {
                    throw new SqlInsertTooManyValuesException( );
                }
            }
            InitializeFields(batch, fields, rawData);

            return(batch);
        }
 public override void Visit(SqlQuerySpecification codeObject)
 {
     Format(codeObject);
 }