[英]Creating table from a data dictionary
我是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”:
创建表X(fld1 INT,fld2 TEXT,fld3 TEXT,PRIMARY KEY(fld1));
现在,我有了一个C ++函数,该函数从data_dictionary中进行选择*,并将所有字段添加到向量中。 问题是如何从列表中检索字段以进行“ CREATE TABLE”查询?
我正在努力获取所有那些fld_names,table_name = X的fld_typs来进行查询。 如果有人有任何想法,将不胜感激!
谢谢堆!
这是源代码:
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;
}
在我的数据库项目中,我有Field类和Record类。
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记录字段”。}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.