Преобразование из 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));
}
Запрос, конечно, должен быть завершен, так как он урезан здесь.