0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-05-23 21:33:44 +02:00

ircd::db::options::map: Add merge suite for adding to existing options.

This commit is contained in:
Jason Volk 2023-02-27 19:58:11 -08:00
parent 7f45a7eb63
commit fc06ea8ded
2 changed files with 63 additions and 25 deletions

View file

@ -110,6 +110,12 @@ struct ircd::db::options
struct ircd::db::options::map
:std::unordered_map<std::string, std::string>
{
// Merge output of options structures from map (map takes precedence).
rocksdb::DBOptions merge(const rocksdb::DBOptions &) const;
rocksdb::ColumnFamilyOptions merge(const rocksdb::ColumnFamilyOptions &) const;
rocksdb::PlainTableOptions merge(const rocksdb::PlainTableOptions &) const;
rocksdb::BlockBasedTableOptions merge(const rocksdb::BlockBasedTableOptions &) const;
// Output of options structures from map
operator rocksdb::DBOptions() const;
operator rocksdb::ColumnFamilyOptions() const;
@ -120,7 +126,7 @@ struct ircd::db::options::map
map(const options &);
// Input of options map from user
map(std::unordered_map<std::string, std::string> m)
map(std::unordered_map<std::string, std::string> m = {})
:std::unordered_map<std::string, std::string>{std::move(m)}
{}
};

View file

@ -3920,49 +3920,81 @@ ircd::db::options::map::map(const options &o)
};
}
ircd::db::options::map::operator rocksdb::PlainTableOptions()
const
{
rocksdb::PlainTableOptions ret;
throw_on_error
{
rocksdb::GetPlainTableOptionsFromMap(ret, *this, &ret)
};
return ret;
}
ircd::db::options::map::operator rocksdb::BlockBasedTableOptions()
const
{
rocksdb::BlockBasedTableOptions ret;
throw_on_error
{
rocksdb::GetBlockBasedTableOptionsFromMap(ret, *this, &ret)
};
return merge(ret);
}
return ret;
ircd::db::options::map::operator rocksdb::PlainTableOptions()
const
{
rocksdb::PlainTableOptions ret;
return merge(ret);
}
ircd::db::options::map::operator rocksdb::ColumnFamilyOptions()
const
{
rocksdb::ColumnFamilyOptions ret;
throw_on_error
{
rocksdb::GetColumnFamilyOptionsFromMap(ret, *this, &ret)
};
return ret;
return merge(ret);
}
ircd::db::options::map::operator rocksdb::DBOptions()
const
{
rocksdb::DBOptions ret;
return merge(ret);
}
rocksdb::BlockBasedTableOptions
ircd::db::options::map::merge(const rocksdb::BlockBasedTableOptions &opts)
const
{
rocksdb::BlockBasedTableOptions ret;
throw_on_error
{
rocksdb::GetDBOptionsFromMap(ret, *this, &ret)
rocksdb::GetBlockBasedTableOptionsFromMap(opts, *this, &ret, true, true)
};
return ret;
}
rocksdb::PlainTableOptions
ircd::db::options::map::merge(const rocksdb::PlainTableOptions &opts)
const
{
rocksdb::PlainTableOptions ret;
throw_on_error
{
rocksdb::GetPlainTableOptionsFromMap(opts, *this, &ret, true, true)
};
return ret;
}
rocksdb::ColumnFamilyOptions
ircd::db::options::map::merge(const rocksdb::ColumnFamilyOptions &opts)
const
{
rocksdb::ColumnFamilyOptions ret;
throw_on_error
{
rocksdb::GetColumnFamilyOptionsFromMap(opts, *this, &ret, true, true)
};
return ret;
}
rocksdb::DBOptions
ircd::db::options::map::merge(const rocksdb::DBOptions &opts)
const
{
rocksdb::DBOptions ret;
throw_on_error
{
rocksdb::GetDBOptionsFromMap(opts, *this, &ret, true, true)
};
return ret;