Создание таблицы из словаря данных

Я новичок в C ++, и мне трудно разрешить следующую ситуацию:

Предположим, у нас есть таблица словаря данных в следующем виде:

---------------------------------------
tbl_name | fld_name | fld_typ | is_pk |
---------------------------------------
X      |  fld1    |   INT   |    1  |
---------------------------------------
X      |  fld2    | TEXT    |    0  |
---------------------------------------
X      |  fld3    | TEXT    |    0  |
---------------------------------------
Y      |  fld1    |   INT   |    1  |
---------------------------------------
Y      |  fld2    | TEXT    |    0  |

Я хотел бы создать таблицу «X» таким образом:

CREATE TABLE X (fld1 INT, fld2 TEXT, fld3 TEXT, ПЕРВИЧНЫЙ КЛЮЧ (fld1));

На данный момент у меня есть функция C ++, которая делает выбор * из data_dictionary и добавляет все поля в векторе. Проблема в том, как я могу получить поля из списка, чтобы сделать мой запрос «CREATE TABLE»?

Я изо всех сил пытаюсь получить все эти fld_names, fld_typs для table_name = X, чтобы сделать мой запрос. Если у кого-то есть идея, это будет оценено!

Спасибо, куча!

Вот исходный код:

std::vector<std::string> gettableinfo(std::string table) {
std::vector<std::string> list_table;
string prep_query =
string(
"SELECT table_name, column_name, data_type, is_pk, length, start_position FROM dd_table WHERE table_name = '")
+ table + string("' ALLOW FILTERING;");
boost::shared_ptr<cql::cql_query_t> select(
new cql::cql_query_t(prep_query, cql::CQL_CONSISTENCY_ONE));
query_result = session->query(select);
query_result.wait();
if (query_result.get().error.is_err()) {
cout << "ERROR IN THE QUERY" << endl;
} else {
cout << "QUERY SUCCESSFUL: " + prep_query << endl;
}
if (query_result.get().result) {
if (query_result.get().result != 0) {
cql::cql_result_t& result = *query_result.get().result;
std::size_t const columns(result.column_count());
while (result.next()) {
int counter = 0;
for (std::size_t column(0); column != columns; ++column) {
cql::cql_column_type_enum type;
if (result.column_type(column, type)) {

switch (type) {
case cql::CQL_COLUMN_TYPE_INT: {
int value;
if (result.get_int(column, value)) {
list_table.push_back(
static_cast<ostringstream*>(&(ostringstream()
<< value))->str());
} else {
std::cout
<< "failed to extract int for column \n";
}
break;
}
case cql::CQL_COLUMN_TYPE_VARCHAR: {
std::string value;
if (result.get_string(column, value)) {
list_table.push_back(value);
} else {
std::cout
<< "failed to extract text for column \n";
}
break;
}

}
}
}
}

} else {
cout << "0 ROW RETURNED" << endl;
}
}

return list_table;
}

0

Решение

В моем проекте базы данных у меня есть классы поля и классы записи.

Класс Field обеспечивает функциональность для извлечения элемента данных из набора результатов, а также для извлечения имени поля.

class Field
{
public:
virtual std::string get_field_name(void) const = 0;
virtual void load_from_result_set(const Result_Set& rs,
unsigned int column) = 0;
};

Имя таблицы заносится в запись. Запись является контейнером Field:

class Record
{
public:
virtual std::string get_table_name(void) const = 0;
virtual void load_from_result_set(const Result_Set& rs) = 0;

private:
std::vector< boost::smart_ptr<Field> >  m_field_container;
};

Запись также поддерживает посетителей и итераторов.

Различные типы полей являются классами, полученными из Field Базовый класс.

Надеюсь это поможет.
{Вы можете найти в StackOverflow некоторые из моих вопросов: «Поле записей C ++ Thomas Matthews».}

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector