void table_base::rename_field_impl(const abstract_mapper_base &before, const abstract_mapper_base &after) const { if (_is_open) throw table_open_exception(); const column_id_set my_columns = _value_mapper.column_ids(); if (! ( is_subset(before.column_ids(), my_columns) || is_subset(after.column_ids(), my_columns) )) throw outside_table_exception(_binomen); vector<string> names_before; vector<string> names_after; before.for_each_persistent_column([&](const persistent_column_mapper &p) { names_before.push_back(p.name()); } ); after.for_each_persistent_column([&](const persistent_column_mapper &p) { names_after.push_back(p.name()); } ); const size_t n = names_before.size(); assert(names_after.size() == n); transaction txn(_database); unique_ptr<sql> cmd; for (size_t i = 0; i < n; i++) { cmd = _database.make_sql(); cmd->write_rename_column(_binomen, names_before[i], names_after[i]); _database.get_session()->exec(*cmd); } txn.commit(); }
void sql::write_update( const binomen &table, const abstract_mapper_base &dest, const abstract_mapper_base &src, optional<column_id> excluded ) { vector<const column_mapper *> src_columns; src.for_each_column([&](const column_mapper &c) { src_columns.push_back(&c); }); auto src_column_iter = src_columns.begin(); 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_evaluation(**src_column_iter++); } }); }
void sql::write_titles(const abstract_mapper_base &mapper, optional<column_id> generated_key) { comma_separated_list_scope list_scope(*this); mapper.for_each_persistent_column([&](const persistent_column_mapper &p) { list_scope.start_item(); write_title(p, generated_key); if (! p.can_be_all_null()) write(" NOT NULL"); }); }
void sql::write_unconstrain_as_not_null(const binomen &table, const abstract_mapper_base &mapper) { write_alter_table(table); comma_separated_list_scope list_scope(*this); mapper.for_each_persistent_column([&](const persistent_column_mapper &p) { list_scope.start_item(); write("ALTER COLUMN "); write_quoted(p.name()); write(" DROP NOT NULL"); }); }
void sql::write_parenthesized_persistent_column_list(const abstract_mapper_base &mapper, optional<column_id> excluded) { write("("); comma_separated_list_scope list_scope(*this); mapper.for_each_persistent_column( [&](const persistent_column_mapper &p) { if (p.id() != excluded) { list_scope.start_item(); write_quoted(p.name()); } } ); write(")"); }
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_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())); } }); }