Exemplo n.º 1
0
        private RawData GetRowsForDelete(Dictionary <string, Table> tables, SqlDeleteStatement deleteStatement)
        {
            var rawData = new RawData(_Command);

            var specification = deleteStatement.DeleteSpecification;

            if (specification.FromClause != null)
            {
                rawData.AddTablesFromClause(specification.FromClause, tables);
            }
            else
            {
                rawData.AddTable(specification.Target, tables);
            }

            if (specification.WhereClause != null)
            {
                rawData.ExecuteWhereClause(specification.WhereClause);
            }

            if (specification.TopSpecification != null)
            {
                var rowCount = int.Parse(specification.TopSpecification.Value.Sql);
                rawData.RawRowList = rawData.RawRowList.Take(rowCount).ToList( );
            }

            return(rawData);
        }
Exemplo n.º 2
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);
        }