public bool Execute()
        {
            Command.Connection.Open();

            try
            {
                using (var reader = Command.ExecuteReader())
                {
                    bool          maxReached           = false;
                    List <object> queryLevelResultsKey = new List <object> ();

                    while (reader.Read())
                    {
                        foreach (var table in QueryBuilder.ProcessedColumns)
                        {
                            object keyValue = reader.GetValue(reader.GetOrdinal(table.Key.KeyColumn.Name));


                            if (ResponseBuilder.ResultExists(table.Key.Name, keyValue))
                            {
                                continue;
                            }

                            if (ShouldPaginate( ) && table.Key.Name == ResponseBuilder.QueryLevelTableName)
                            {
                                // if this is true then we alerady have a full page
                                // and we are skipping adding to ResponseBuilder,
                                // we should also skip here too
                                if (queryLevelResultsKey.Contains(keyValue))
                                {
                                    break;
                                }

                                queryLevelResultsKey.Add(keyValue);

                                if (QueryOptions.Offset >= queryLevelResultsKey.Count)
                                {
                                    break;
                                }

                                // Now we should have enough responses
                                if (queryLevelResultsKey.Count > (QueryOptions.Offset + QueryOptions.Limit))
                                {
                                    System.Diagnostics.Debug.Assert(QueryOptions.Limit == ResponseBuilder.GetResponse().Count());

                                    break;
                                }
                            }

                            ResponseBuilder.BeginResultSet(table.Key.Name);
                            ResponseBuilder.BeginRead();

                            foreach (var column in table.Value)
                            {
                                object value = reader.GetValue(reader.GetOrdinal(column));

                                ResponseBuilder.ReadData(table.Key.Name, column, value);
                            }

                            if (null != CountColumnName && null != CountColumnTable &&
                                string.Compare(CountColumnTable, table.Key.Name, true) == 0)
                            {
                                TotalCount = reader.GetInt32(reader.GetOrdinal(CountColumnName));
                            }

                            ResponseBuilder.EndRead( );
                            ResponseBuilder.EndResultSet( );
                        }

                        if (ShouldPaginate() && maxReached)
                        {
                            break;
                        }
                    }

                    if (ApplyPagination)
                    {
                        TotalCount = queryLevelResultsKey.Count;
                    }
                }

                return(true);
            }
            finally
            {
                if (Command.Connection.State == System.Data.ConnectionState.Open)
                {
                    Command.Connection.Close();
                }
            }
        }