From: | Igor Korot <ikorot01(at)gmail(dot)com> |
---|---|
To: | "pgsql-generallists(dot)postgresql(dot)org" <pgsql-general(at)lists(dot)postgresql(dot)org> |
Subject: | How to get the data from the query |
Date: | 2025-04-27 00:18:03 |
Message-ID: | CA+FnnTxPsPRzOtLGh7389gwjS3tOJaLpQ3Jhxi26UOr9BW5a+g@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hi, ALL,
[code]
std::wstring query2 = L"SELECT DISTINCT column_name, data_type,
character_maximum_length, character_octet_length, numeric_precision,
numeric_precision_radix, numeric_scale, is_nullable, column_default,
CASE WHEN column_name IN (SELECT ccu.column_name FROM
information_schema.constraint_column_usage ccu,
information_schema.table_constraints tc WHERE ccu.constraint_name =
tc.constraint_name AND tc.constraint_type = 'PRIMARY KEY' AND
ccu.table_name = 'leagues') THEN 'YES' ELSE 'NO' END AS is_pk,
ordinal_position FROM information_schema.columns col,
information_schema.table_constraints tc WHERE tc.table_schema =
col.table_schema AND tc.table_name = col.table_name AND
col.table_schema = $1 AND col.table_name = $2 ORDER BY
ordinal_position;";
res2 = PQprepare( m_db, "get_columns",
m_pimpl->m_myconv.to_bytes( query2.c_str() ).c_str(), 2, NULL );
if( PQresultStatus( res2 ) != PGRES_COMMAND_OK )
{
std::wstring err = m_pimpl->m_myconv.from_bytes(
PQerrorMessage( m_db ) );
errorMsg.push_back( L"Error executing query: " + err );
PQclear( res2 );
result = 1;
}
else
{
PQclear( res2 );
......
res2 = PQexecPrepared( m_db, "get_columns", 2, values1,
length1, formats1, 1 );
status = PQresultStatus( res2 );
if( status != PGRES_COMMAND_OK && status != PGRES_TUPLES_OK )
{
std::wstring err = m_pimpl->m_myconv.from_bytes(
PQerrorMessage( m_db ) );
errorMsg.push_back( L"Error executing query: " + err );
PQclear( res2 );
fields.erase( fields.begin(), fields.end() );
foreign_keys.erase( foreign_keys.begin(), foreign_keys.end() );
result = 1;
}
else if( status == PGRES_TUPLES_OK )
{
int numFields = 0;
for( int j = 0; j < PQntuples( res2 ); j++ )
{
int size, precision;
bool autoinc = false;
const char *field_name = PQgetvalue( res2, j, 0 );
fieldName = m_pimpl->m_myconv.from_bytes( field_name );
fieldType = m_pimpl->m_myconv.from_bytes( PQgetvalue(
res2, j, 1 ) );
char *char_length = PQgetvalue( res2, j, 2 );
char *numeric_length = PQgetvalue( res2, j, 4 );
char *numeric_scale = PQgetvalue( res2, j, 6 );
fieldDefaultValue = m_pimpl->m_myconv.from_bytes(
PQgetvalue( res2, j, 8 ) );
fieldIsNull = !strcmp( PQgetvalue( res2, j, 7 ), "YES"
) ? 1 : 0;
fieldPK = !strcmp( PQgetvalue( res2, j, 9 ), "YES" ) ? 1 : 0;
if( *char_length == '0' )
{
size = atoi( numeric_length );
precision = atoi( numeric_scale );
}
else
{
size = atoi( char_length );
precision = 0;
}
if( fieldType == L"serial" || fieldType == L"bigserial" )
autoinc = true;
[/code]
I'm able to get field name and field type, but the size comes out "" (empty)
.
WHat am I doing wrong?
Thank you.
From | Date | Subject | |
---|---|---|---|
Next Message | David G. Johnston | 2025-04-27 01:06:22 | How to get the data from the query |
Previous Message | Igor Korot | 2025-04-26 21:43:27 | Re: How to properly fix memory leak |