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