void Query::appendValueClauses()

in squangle/mysql_client/Query.cpp [395:427]


void Query::appendValueClauses(
    folly::fbstring* ret,
    size_t* idx,
    const char* sep,
    const QueryArgument& param,
    MYSQL* connection) const {
  auto querySp = query_text_.getQuery();

  if (!param.isPairList()) {
    parseError(
        querySp,
        *idx,
        folly::format(
            "object expected for %Lx but received {}", param.typeName())
            .str());
  }
  // Sort these to get consistent query ordering (mainly for
  // testing, but also aesthetics of the final query).
  bool first_param = true;
  for (const auto& key_value : param.getPairs()) {
    if (!first_param) {
      ret->append(sep);
    }
    first_param = false;
    appendColumnTableName(ret, key_value.first);
    if (key_value.second.isNull() && sep[0] != ',') {
      ret->append(" IS NULL");
    } else {
      ret->append(" = ");
      appendValue(ret, *idx, 'v', key_value.second, connection);
    }
  }
}