Ejemplo n.º 1
0
void
table_base::open() {
    if (_is_open)  throw table_open_exception();
    if (_key_mapper == nullptr)  throw no_primary_key_exception();

    {
        _database.make_enclosure_available(_binomen._enclosure);
        transaction txn(_database);
        const unique_ptr<sql> cmd = _database.make_sql();
        cmd->write_create_table(
            _binomen,
            get_value_mapper_base(),
            *_key_mapper,
            readback_id(),
            _foreign_specs
        );
        if (_database.get_session()->unchecked_exec(*cmd)) {  // failure is benign, but in that case we needn't commit.
            for (size_t i = 0; i < _index_specs.size(); i++) {
                const index_spec &is = _index_specs[i];
                const unique_ptr<sql> cmd = _database.make_sql();
                cmd->write_create_index(_binomen, i, is._mappers, is._is_unique);
                _database.get_session()->exec(*cmd);
            }
            txn.commit();
        }
    }
    check_metadata();
    _is_open = true;
}
Ejemplo n.º 2
0
Archivo: schema.cpp Proyecto: ryjen/db
        std::string schema::primary_key() const {
            for (auto &c : columns_) {
                if (c.pk && c.autoincrement) {
                    return c.name;
                }
            }

            throw no_primary_key_exception("no primary key found for schema");
        }