@@ -170,10 +170,12 @@ const char *mysqlx_result_t::column_get_info_char(uint32_t pos, col_info_type in
170
170
return NULL ;
171
171
}
172
172
173
+
173
174
/*
174
175
Get metadata information such as column precision, flags, etc that could
175
176
be represented by numbers
176
177
*/
178
+
177
179
uint32_t mysqlx_result_t::column_get_info_int (uint32_t pos, col_info_type info_type)
178
180
{
179
181
if (!m_cursor || !m_cursor->col_count () || pos >= m_cursor->col_count ())
@@ -182,90 +184,103 @@ uint32_t mysqlx_result_t::column_get_info_int(uint32_t pos, col_info_type info_t
182
184
// if ((cdk::Format<cdk::TYPE_INTEGER>)m_cursor->format(pos)).is_unsigned()))
183
185
switch (info_type)
184
186
{
185
- case COL_INFO_TYPE:
186
- switch (m_cursor->type (pos))
187
+ case COL_INFO_TYPE:
188
+ switch (m_cursor->type (pos))
189
+ {
190
+ case cdk::TYPE_INTEGER:
187
191
{
188
- case cdk::TYPE_INTEGER:
189
- {
190
- cdk::Format<cdk::TYPE_INTEGER> format (m_cursor->format (pos));
191
- if (format.length () == 1 )
192
- return MYSQLX_TYPE_BOOL;
192
+ cdk::Format<cdk::TYPE_INTEGER> format (m_cursor->format (pos));
193
+ if (format.length () == 1 )
194
+ return MYSQLX_TYPE_BOOL;
193
195
194
- if (format.is_unsigned ())
195
- return MYSQLX_TYPE_UINT;
196
+ if (format.is_unsigned ())
197
+ return MYSQLX_TYPE_UINT;
196
198
197
- return MYSQLX_TYPE_SINT;
198
- }
199
- case cdk::TYPE_FLOAT:
200
- {
201
- cdk::Format<cdk::TYPE_FLOAT> format (m_cursor->format (pos));
202
-
203
- if (format.type () == cdk::Format<cdk::TYPE_FLOAT>::FLOAT)
204
- return MYSQLX_TYPE_FLOAT;
205
- else if (format.type () == cdk::Format<cdk::TYPE_FLOAT>::DOUBLE)
206
- return MYSQLX_TYPE_DOUBLE;
207
- else
208
- return MYSQLX_TYPE_DECIMAL;
209
- }
210
- case cdk::TYPE_DATETIME:
211
- {
212
- cdk::Format<cdk::TYPE_DATETIME> format (m_cursor->format (pos));
213
- switch (format.type ())
214
- {
215
- case cdk::Format<cdk::TYPE_DATETIME>::TIME:
216
- return MYSQLX_TYPE_TIME;
217
- case cdk::Format<cdk::TYPE_DATETIME>::TIMESTAMP:
218
- return MYSQLX_TYPE_TIMESTAMP;
219
- default :
220
- return MYSQLX_TYPE_DATETIME;
221
- }
222
- break ;
223
- }
224
- // TODO: differ the blob types by their length
225
- case cdk::TYPE_BYTES:
226
- {
227
- // TODO: use it when GEOMETRY type is supported by CDK
228
- // cdk::Format<cdk::TYPE_BYTES> format(m_cursor->format(pos));
229
- return MYSQLX_TYPE_BYTES;
230
- }
231
- case cdk::TYPE_STRING:
232
- {
233
- cdk::Format<cdk::TYPE_STRING> format (m_cursor->format (pos));
234
- if (format.is_enum ())
235
- return MYSQLX_TYPE_ENUM;
236
- else if (format.is_set ())
237
- return MYSQLX_TYPE_SET;
199
+ return MYSQLX_TYPE_SINT;
200
+ }
201
+ break ;
202
+
203
+ case cdk::TYPE_FLOAT:
204
+ {
205
+ cdk::Format<cdk::TYPE_FLOAT> format (m_cursor->format (pos));
206
+
207
+ if (format.type () == cdk::Format<cdk::TYPE_FLOAT>::FLOAT)
208
+ return MYSQLX_TYPE_FLOAT;
209
+ else if (format.type () == cdk::Format<cdk::TYPE_FLOAT>::DOUBLE)
210
+ return MYSQLX_TYPE_DOUBLE;
211
+ else
212
+ return MYSQLX_TYPE_DECIMAL;
213
+ }
214
+ break ;
238
215
239
- return MYSQLX_TYPE_STRING;
216
+ case cdk::TYPE_DATETIME:
217
+ {
218
+ cdk::Format<cdk::TYPE_DATETIME> format (m_cursor->format (pos));
219
+ switch (format.type ())
220
+ {
221
+ case cdk::Format<cdk::TYPE_DATETIME>::TIME:
222
+ return MYSQLX_TYPE_TIME;
223
+ case cdk::Format<cdk::TYPE_DATETIME>::TIMESTAMP:
224
+ return MYSQLX_TYPE_TIMESTAMP;
225
+ default :
226
+ return MYSQLX_TYPE_DATETIME;
240
227
}
241
- case cdk::TYPE_DOCUMENT:
242
- return MYSQLX_TYPE_JSON;
243
- case cdk::TYPE_GEOMETRY:
244
- return MYSQLX_TYPE_GEOMETRY;
245
- default :
246
- return m_cursor->type (pos);
247
228
}
229
+ break ;
248
230
249
- case COL_INFO_LENGTH: return m_cursor->col_info (pos).length ();
250
- case COL_INFO_PRECISION: return m_cursor->col_info (pos).decimals ();
231
+ // TODO: differ the blob types by their length
232
+ case cdk::TYPE_BYTES:
233
+ // TODO: use it when GEOMETRY type is supported by CDK
234
+ // cdk::Format<cdk::TYPE_BYTES> format(m_cursor->format(pos));
235
+ return MYSQLX_TYPE_BYTES;
251
236
252
- // TODO: collation and flags should be added later
253
- case COL_INFO_FLAGS:
254
- case COL_INFO_COLLATION: return 0 ;
255
- default : // the rest of info types are processed in column_get_info_char
237
+ case cdk::TYPE_STRING:
238
+ {
239
+ cdk::Format<cdk::TYPE_STRING> format (m_cursor->format (pos));
240
+ if (format.is_enum ())
241
+ return MYSQLX_TYPE_ENUM;
242
+ else if (format.is_set ())
243
+ return MYSQLX_TYPE_SET;
244
+
245
+ return MYSQLX_TYPE_STRING;
246
+ }
256
247
break ;
248
+
249
+ case cdk::TYPE_DOCUMENT:
250
+ return MYSQLX_TYPE_JSON;
251
+
252
+ case cdk::TYPE_GEOMETRY:
253
+ return MYSQLX_TYPE_GEOMETRY;
254
+
255
+ default :
256
+ return m_cursor->type (pos);
257
+ };
258
+ break ;
259
+
260
+ case COL_INFO_LENGTH: return m_cursor->col_info (pos).length ();
261
+ case COL_INFO_PRECISION: return m_cursor->col_info (pos).decimals ();
262
+
263
+ // TODO: collation and flags should be added later
264
+ case COL_INFO_FLAGS:
265
+ case COL_INFO_COLLATION: return 0 ;
266
+
267
+ default : // the rest of info types are processed in column_get_info_char
268
+ break ;
257
269
}
258
270
259
271
return 0 ;
260
272
}
261
273
274
+
262
275
void mysqlx_result_t::set_table_list_mask (uint32_t mask)
263
276
{ m_filter_mask = mask; }
264
277
278
+
265
279
/*
266
280
The method which can filter out rows returned by the server on the client side.
267
281
Returns true if the row is allowed to go through or false otherwise.
268
282
*/
283
+
269
284
bool mysqlx_result_t::row_filter (mysqlx_row_t *row)
270
285
{
271
286
if (m_crud.op_type () != OP_ADMIN_LIST || row->row_size () < 2 )
@@ -541,7 +556,7 @@ const char * mysqlx_result_t::get_next_doc_id()
541
556
mysqlx_error_t * mysqlx_result_t::get_error ()
542
557
{
543
558
mysqlx_error_t *err = Mysqlx_diag::get_error ();
544
-
559
+
545
560
if (err)
546
561
return err; // return the error if there is any
547
562
0 commit comments