in squangle/mysql_client/Row.cpp [104:138]
folly::dynamic Row::getDynamic(size_t l) const {
enum_field_types type = row_block_->getFieldType(l);
try {
switch (type) {
// folly::dynamic::Type::DOUBLE
case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_FLOAT:
case MYSQL_TYPE_DOUBLE:
return folly::dynamic(row_block_->getField<double>(row_number_, l));
// folly::dynamic::Type::INT64
case MYSQL_TYPE_BIT:
case MYSQL_TYPE_TINY:
case MYSQL_TYPE_SHORT:
case MYSQL_TYPE_LONG:
case MYSQL_TYPE_LONGLONG:
case MYSQL_TYPE_INT24:
case MYSQL_TYPE_ENUM:
case MYSQL_TYPE_YEAR:
if (row_block_->getFieldFlags(l) & UNSIGNED_FLAG) {
return folly::dynamic(
row_block_->getField<unsigned long>(row_number_, l));
}
return folly::dynamic(row_block_->getField<long>(row_number_, l));
// folly::dynamic::Type::STRING
default:
return folly::dynamic(
row_block_->getField<std::string>(row_number_, l));
}
} catch (const std::exception& e) {
// If we failed to parse (NULL int, etc), try again as a string
return folly::dynamic(row_block_->getField<std::string>(row_number_, l));
}
}