Thread: BUG #5180: How to get only User created tables by using SQLTables() in ODBC

BUG #5180: How to get only User created tables by using SQLTables() in ODBC

From
"Jitendra Lenka"
Date:
The following bug has been logged online:

Bug reference:      5180
Logged by:          Jitendra Lenka
Email address:      jitendra.lenka@csqldb.com
PostgreSQL version: 8.3.3
Operating system:   Fedora10
Description:        How to get only User created tables by using SQLTables()
in ODBC
Details:

Hi,

I created a table named "t1" in postgres. Used SQLTables() function in ODBC
to retrieve the table "t1" only. But it retrieves many System and Metadata
tables which bothers me.

Follow below to get all system tables along with user created table "t1".

sql_features
sql_implementation_info
sql_languages
sql_packages
sql_parts
sql_sizing
sql_sizing_profiles
t1

Can I get only user created table ?

If anybody find it good please report it in my mail ID.

Your reply is highly solicited.

Please find the code:
--------------------
retValue=SQLTables(hstmt, NULL, 0, NULL, 0, NULL, 0, (SQLCHAR*) "TABLE",
SQL_NTS);

while (SQL_SUCCEEDED(retValue = SQLFetch(hstmt))) {
        SQLUSMALLINT i;
        i=3;
        if(i<=columns){
            SQLINTEGER indicator;
            char buf[512];
            retValue=SQLGetData(hstmt, i, SQL_C_CHAR,
                         buf, sizeof(buf), &indicator);
            if (SQL_SUCCEEDED(retValue)) {
                 if (indicator == SQL_NULL_DATA) strcpy(buf, "NULL");
                 else{
                         printf("table:%s\n",buf);

                  }
             }
          }
      }

Re: BUG #5180: How to get only User created tables by using SQLTables() in ODBC

From
Pavel Stehule
Date:
2009/11/12 Jitendra Lenka <jitendra.lenka@csqldb.com>:
>
> The following bug has been logged online:
>
> Bug reference: =C2=A0 =C2=A0 =C2=A05180
> Logged by: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Jitendra Lenka
> Email address: =C2=A0 =C2=A0 =C2=A0jitendra.lenka@csqldb.com
> PostgreSQL version: 8.3.3
> Operating system: =C2=A0 Fedora10
> Description: =C2=A0 =C2=A0 =C2=A0 =C2=A0How to get only User created tabl=
es by using SQLTables()
> in ODBC
> Details:
>
> Hi,
>
> I created a table named "t1" in postgres. Used SQLTables() function in OD=
BC
> to retrieve the table "t1" only. But it retrieves many System and Metadata
> tables which bothers me.
>
> Follow below to get all system tables along with user created table "t1".
>
> sql_features
> sql_implementation_info
> sql_languages
> sql_packages
> sql_parts
> sql_sizing
> sql_sizing_profiles
> t1
>
> Can I get only user created table ?

Hello,

look on information_schema, please.

postgres=3D# \dt
No relations found.
postgres=3D# create table omega(a integer);
CREATE TABLE
postgres=3D# \x

postgres=3D# SELECT *
                       FROM information_schema.tables
                     WHERE table_schema NOT IN
('pg_catalog','information_schema');
-[ RECORD 1 ]----------------+-----------
table_catalog                | postgres
table_schema                 | public
table_name                   | omega
table_type                   | BASE TABLE
self_referencing_column_name |
reference_generation         |
user_defined_type_catalog    |
user_defined_type_schema     |
user_defined_type_name       |
is_insertable_into           | YES
is_typed                     | NO
commit_action

Regards
Pavel Stehule

>
> If anybody find it good please report it in my mail ID.
>
> Your reply is highly solicited.
>
> Please find the code:
> --------------------
> retValue=3DSQLTables(hstmt, NULL, 0, NULL, 0, NULL, 0, (SQLCHAR*) "TABLE",
> SQL_NTS);
>
> while (SQL_SUCCEEDED(retValue =3D SQLFetch(hstmt))) {
> =C2=A0 =C2=A0 =C2=A0 =C2=A0SQLUSMALLINT i;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0i=3D3;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0if(i<=3Dcolumns){
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0SQLINTEGER indicator;
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0char buf[512];
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0retValue=3DSQLGetData(hstmt, i, =
SQL_C_CHAR,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 buf, sizeof(buf), &indicator);
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (SQL_SUCCEEDED(retValue)) {
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (indicator =3D=
=3D SQL_NULL_DATA) strcpy(buf, "NULL");
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 else{
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 printf("table:%s\n",buf);
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}
> =C2=A0 =C2=A0 =C2=A0}
>
> --
> Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-bugs
>

Re: BUG #5180: How to get only User created tables by using SQLTables() in ODBC

From
Nikhil Sontakke
Date:
Hi,

> Please find the code:
> --------------------
> retValue=SQLTables(hstmt, NULL, 0, NULL, 0, NULL, 0, (SQLCHAR*) "TABLE",
> SQL_NTS);
>

You should pass the schemaname to the above call to restrict the
result set to a specific schema. For example:

SQLTables(hstmt, NULL, 0, (SQLCHAR *)"public", SQL_NTS, NULL, 0,
(SQLCHAR*) "TABLE", SQL_NTS);

Regards,
Nikhils
--
http://www.enterprisedb.com