Преобразование из ibpp в pqxx в проекте C++

У меня есть код C++, который использует Firebird (драйвер ibpp), и мне нужно сделать преобразование в PostgreSQL (используется pqxx). Основной файл, который мне нужно изменить, это этот. Я начал, но сейчас у меня трудности.

while (st->Fetch())
{
    st->Get(1, tName);
    st->Get(2, fieldName);
    st->Get(3, fieldType);

    if (tName != tableName)
        continue;

    result.push_back(DbField(fieldName, fieldType, ""));
 } 

Я понятия не имею, как переписать его с помощью pqxx. Я переписал часть кода в pqxx, вы можете увидеть его здесь. Так ты можешь помочь мне с этим фрагментом?

Я только начал работать с SQL, и было бы здорово, если бы кто-нибудь объяснил мне, как работает код ibpp. И если бы вы оставили несколько ссылок с большими pqxx-примерами, было бы здорово.


person koshachok    schedule 19.08.2016    source источник


Ответы (1)


Фрагмент IBPP выполняет запрос sql1, и данный цикл проходит по результирующим строкам таблицы и подталкивает их все к result, который, вероятно, является своего рода вектором.

Аналоговый код Postgres будет

vector<tuple<string, string, string>> result_set;
pqxx::work txn(*conn);
pqxx::result res = txn.exec("SELECT TRIM(RL.RDB$RELATION_NAME), TRIM(FR.RDB$FIELD_NAME), FS.RDB$FIELD_TYPE ...");
for (unsigned i = 0; i < res.size(); ++i)
{
    string first = res[i][0].as<string>("");
    string second = res[i][1].as<string>("");
    string third = res[i][2].as<string>("");
    result_set.push_back(make_tuple(provider, oper, priority));
}

Запрос, конечно, должен быть завершен, так как здесь он усечен.

person karastojko    schedule 19.08.2016