Skip to content

Commit b8cae01

Browse files
committed
Added clq_result::column_name() method
1 parent 0373f26 commit b8cae01

5 files changed

Lines changed: 52 additions & 3 deletions

File tree

include/cql/cql_result.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ class cql_result_t {
5858
virtual bool
5959
exists(const std::string& column) const = 0;
6060

61+
virtual bool
62+
column_name(int i,
63+
std::string& output_keyspace,
64+
std::string& output_table,
65+
std::string& output_column) const = 0;
66+
6167
virtual bool
6268
column_class(int i,
6369
std::string& output) const = 0;

include/cql/internal/cql_message_result_impl.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ public cql_message_t,
7777
bool
7878
exists(const std::string& column) const;
7979

80+
bool
81+
column_name(int i,
82+
std::string& output_keyspace,
83+
std::string& output_table,
84+
std::string& output_column) const;
85+
8086
bool
8187
column_class(int i,
8288
std::string& output) const;

include/cql/internal/cql_result_metadata.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ class cql_result_metadata_t :
8181
const std::string& table,
8282
const std::string& column) const;
8383

84+
bool
85+
column_name(int i,
86+
std::string& output_keyspace,
87+
std::string& output_table,
88+
std::string& output_column) const;
89+
8490
bool
8591
column_class(int i,
8692
std::string& output) const;
@@ -178,6 +184,7 @@ class cql_result_metadata_t :
178184
private:
179185

180186
struct option_t {
187+
column_name_t name;
181188
cql::cql_column_type_enum primary_type;
182189
cql::cql_column_type_enum collection_primary_type;
183190
cql::cql_column_type_enum collection_secondary_type;

src/cql/internal/cql_message_result_impl.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,18 @@ cql::cql_message_result_impl_t::exists(const std::string& column) const {
203203
return _metadata.exists(column);
204204
}
205205

206+
bool
207+
cql::cql_message_result_impl_t::column_name(int i,
208+
std::string& output_keyspace,
209+
std::string& output_table,
210+
std::string& output_column) const
211+
{
212+
return _metadata.column_name(i,
213+
output_keyspace,
214+
output_table,
215+
output_column);
216+
}
217+
206218
bool
207219
cql::cql_message_result_impl_t::column_class(int i,
208220
std::string& output) const {
@@ -364,7 +376,9 @@ cql::cql_message_result_impl_t::get_double(const std::string& column,
364376
bool
365377
cql::cql_message_result_impl_t::get_bigint(int i,
366378
cql::cql_bigint_t& output) const {
367-
if (is_valid(i, cql::CQL_COLUMN_TYPE_BIGINT)) {
379+
if (is_valid(i, cql::CQL_COLUMN_TYPE_BIGINT)
380+
|| is_valid(i, cql::CQL_COLUMN_TYPE_TIMESTAMP)
381+
|| is_valid(i, cql::CQL_COLUMN_TYPE_COUNTER)) {
368382
cql::decode_bigint(_row[i] + sizeof(cql_int_t), output);
369383
return true;
370384
}

src/cql/internal/cql_result_metadata.cpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ cql::cql_result_metadata_t::read(cql::cql_byte_t* input) {
9999
input = cql::decode_option(input, option.collection_secondary_type, option.collection_secondary_class);
100100
}
101101

102-
column_name_t name(keyspace_name, table_name, column_name);
103-
_column_name_idx.insert(column_name_idx_t::value_type(name, i));
102+
option.name = column_name_t(keyspace_name, table_name, column_name);
103+
_column_name_idx.insert(column_name_idx_t::value_type(option.name, i));
104104
_columns.push_back(option);
105105
}
106106
return input;
@@ -156,6 +156,22 @@ cql::cql_result_metadata_t::global_table(const std::string& table) {
156156
_global_table_name = table;
157157
}
158158

159+
bool
160+
cql::cql_result_metadata_t::column_name(int i,
161+
std::string& output_keyspace,
162+
std::string& output_table,
163+
std::string& output_column) const
164+
{
165+
if (i > _column_count || i < 0) {
166+
return false;
167+
}
168+
169+
output_keyspace = _columns[i].name.get<0>();
170+
output_table = _columns[i].name.get<1>();
171+
output_column = _columns[i].name.get<2>();
172+
return true;
173+
}
174+
159175
bool
160176
cql::cql_result_metadata_t::column_class(int i,
161177
std::string& output) const {

0 commit comments

Comments
 (0)