Преобразование из 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-примерами, это было бы здорово.

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));
}

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

Другие вопросы по тегам