void sql::write_values( const abstract_mapper_base &value_mapper, const row &data, optional<column_id> excluded ) { write(" VALUES ("); comma_separated_list_scope list_scope(*this); value_mapper.for_each_persistent_column( [&](const persistent_column_mapper &p) { if (p.id() != excluded) { list_scope.start_item(); write_value(*data.find_cell(p.name())); } } ); write(")"); }
void sql::write_extrinsic_comparison(relation r, const abstract_column_sequence &lhs, const row &rhs) { vector<thunk> lhs_thunks; vector<thunk> rhs_thunks; lhs.for_each_column([&](const column_mapper &c) { lhs_thunks.push_back([&](sql &cmd) { cmd.write_evaluation(c); }); const string placeholder = next_placeholder(); rhs_thunks.push_back([=](sql &cmd) { write(placeholder); }); attach_cell(*rhs.find_cell(c.name())); }); write_lexicographic_comparison(r, lhs_thunks, rhs_thunks); }
void sql::write_update( const binomen &table, const abstract_mapper_base &dest, const row &src, optional<column_id> excluded ) { // TODO: factor out the code in common with the other overload // write("UPDATE "); write_quoted(table); write(" SET "); comma_separated_list_scope list_scope(*this); dest.for_each_persistent_column([&](const persistent_column_mapper &p) { if (p.id() != excluded) { list_scope.start_item(); write_quoted(p.name()); write(" = "); write_value(*src.find_cell(p.name())); } }); }