44 lines
1.2 KiB
C++
44 lines
1.2 KiB
C++
#include "matador/sql/column_generator.hpp"
|
|
|
|
#include "matador/sql/table.hpp"
|
|
|
|
namespace matador::sql {
|
|
|
|
column_generator::column_generator(std::vector<column> &column_infos,
|
|
const object::repository &scm,
|
|
const std::string &table_name,
|
|
const bool force_lazy)
|
|
: column_infos_(column_infos)
|
|
, table_schema_(scm)
|
|
, force_lazy_(force_lazy)
|
|
{
|
|
table_name_stack_.push(table_name);
|
|
seen_tables.insert(table_name);
|
|
}
|
|
|
|
std::vector<column> column_generator::generate( const object::repository& scm, const std::string& name, bool /*force_lazy*/ ) {
|
|
const auto info = scm.basic_info(name);
|
|
if (!info) {
|
|
return {};
|
|
}
|
|
|
|
std::vector<column> columns;
|
|
for (const auto& attr : info.value().get().definition()) {
|
|
columns.emplace_back(attr.name());
|
|
}
|
|
return columns;
|
|
}
|
|
|
|
void column_generator::on_revision(const char *id, uint64_t &)
|
|
{
|
|
push(id);
|
|
}
|
|
|
|
void column_generator::push(const std::string &column_name)
|
|
{
|
|
char str[4];
|
|
snprintf(str, 4, "c%02d", ++column_index);
|
|
column_infos_.emplace_back(table{table_name_stack_.top()}, column_name, str);
|
|
}
|
|
|
|
} |