| 1 | #include "duckdb/main/materialized_query_result.hpp" |
| 2 | |
| 3 | using namespace duckdb; |
| 4 | using namespace std; |
| 5 | |
| 6 | MaterializedQueryResult::MaterializedQueryResult(StatementType statement_type) |
| 7 | : QueryResult(QueryResultType::MATERIALIZED_RESULT, statement_type) { |
| 8 | } |
| 9 | |
| 10 | MaterializedQueryResult::MaterializedQueryResult(StatementType statement_type, vector<SQLType> sql_types, |
| 11 | vector<TypeId> types, vector<string> names) |
| 12 | : QueryResult(QueryResultType::MATERIALIZED_RESULT, statement_type, sql_types, types, names) { |
| 13 | } |
| 14 | |
| 15 | MaterializedQueryResult::MaterializedQueryResult(string error) |
| 16 | : QueryResult(QueryResultType::MATERIALIZED_RESULT, error) { |
| 17 | } |
| 18 | |
| 19 | Value MaterializedQueryResult::GetValue(idx_t column, idx_t index) { |
| 20 | auto &data = collection.GetChunk(index).data[column]; |
| 21 | auto offset_in_chunk = index % STANDARD_VECTOR_SIZE; |
| 22 | return data.GetValue(offset_in_chunk); |
| 23 | } |
| 24 | |
| 25 | string MaterializedQueryResult::ToString() { |
| 26 | string result; |
| 27 | if (success) { |
| 28 | result = HeaderToString(); |
| 29 | result += "[ Rows: " + to_string(collection.count) + "]\n" ; |
| 30 | for (idx_t j = 0; j < collection.count; j++) { |
| 31 | for (idx_t i = 0; i < collection.column_count(); i++) { |
| 32 | auto val = collection.GetValue(i, j); |
| 33 | result += val.is_null ? "NULL" : val.ToString(sql_types[i]); |
| 34 | result += "\t" ; |
| 35 | } |
| 36 | result += "\n" ; |
| 37 | } |
| 38 | result += "\n" ; |
| 39 | } else { |
| 40 | result = "Query Error: " + error + "\n" ; |
| 41 | } |
| 42 | return result; |
| 43 | } |
| 44 | |
| 45 | unique_ptr<DataChunk> MaterializedQueryResult::Fetch() { |
| 46 | if (!success) { |
| 47 | return nullptr; |
| 48 | } |
| 49 | if (collection.chunks.size() == 0) { |
| 50 | return make_unique<DataChunk>(); |
| 51 | } |
| 52 | auto chunk = move(collection.chunks[0]); |
| 53 | collection.chunks.erase(collection.chunks.begin() + 0); |
| 54 | return chunk; |
| 55 | } |
| 56 | |