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); }
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); }