How to get the data from the query - Mailing list pgsql-general

From Igor Korot
Subject How to get the data from the query
Date
Msg-id CA+FnnTxPsPRzOtLGh7389gwjS3tOJaLpQ3Jhxi26UOr9BW5a+g@mail.gmail.com
Whole thread Raw
Responses How to get the data from the query
List 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.



pgsql-general by date:

Previous
From: Igor Korot
Date:
Subject: Re: How to properly fix memory leak
Next
From: "David G. Johnston"
Date:
Subject: How to get the data from the query