folly::dynamic Row::getDynamic()

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));
  }
}