Patch for ODBC Index info - Mailing list pgsql-odbc
From | Bruce Momjian |
---|---|
Subject | Patch for ODBC Index info |
Date | |
Msg-id | 200105161758.f4GHwhN22099@candle.pha.pa.us Whole thread Raw |
Responses |
Re: Patch for ODBC Index info
|
List | pgsql-odbc |
I have applied the following patch to ODBC index lookups for HASH. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026 Index: info.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/odbc/info.c,v retrieving revision 1.47 retrieving revision 1.48 diff -c -r1.47 -r1.48 *** info.c 2001/05/14 21:53:16 1.47 --- info.c 2001/05/16 17:47:27 1.48 *************** *** 2009,2015 **** char *table_name; char index_name[MAX_INFO_STRING]; short fields_vector[16]; ! char isunique[10]; SDWORD index_name_len, fields_vector_len; TupleNode *row; --- 2009,2017 ---- char *table_name; char index_name[MAX_INFO_STRING]; short fields_vector[16]; ! char isunique[10], ! isclustered[10], ! ishash[MAX_INFO_STRING]; SDWORD index_name_len, fields_vector_len; TupleNode *row; *************** *** 2169,2178 **** indx_stmt = (StatementClass *) hindx_stmt; sprintf(index_query, "select c.relname, i.indkey, i.indisunique" ! ", c.relhasrules" ! " from pg_index i, pg_class c, pg_class d" ! " where c.oid = i.indexrelid and d.relname = '%s'" ! " and d.oid = i.indrelid", table_name); result = SQLExecDirect(hindx_stmt, index_query, strlen(index_query)); if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) --- 2171,2183 ---- indx_stmt = (StatementClass *) hindx_stmt; sprintf(index_query, "select c.relname, i.indkey, i.indisunique" ! ", x.indisclustered, a.amname, i.relhasrules" ! " from pg_index x, pg_class i, pg_class c, pg_am a" ! " where c.relname = '%s'" ! " and c.oid = x.indrelid" ! " and x.indexrelid = i.oid" ! " and i.relam = a.oid" ! , table_name); result = SQLExecDirect(hindx_stmt, index_query, strlen(index_query)); if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) *************** *** 2224,2230 **** --- 2229,2261 ---- goto SEEYA; } + /* bind the "is clustered" column */ result = SQLBindCol(hindx_stmt, 4, SQL_C_CHAR, + isclustered, sizeof(isclustered), NULL); + if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) + { + stmt->errormsg = indx_stmt->errormsg; /* "Couldn't bind column + * in SQLStatistics."; */ + stmt->errornumber = indx_stmt->errornumber; + SQLFreeStmt(hindx_stmt, SQL_DROP); + goto SEEYA; + + } + + /* bind the "is hash" column */ + result = SQLBindCol(hindx_stmt, 5, SQL_C_CHAR, + ishash, sizeof(ishash), NULL); + if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) + { + stmt->errormsg = indx_stmt->errormsg; /* "Couldn't bind column + * in SQLStatistics."; */ + stmt->errornumber = indx_stmt->errornumber; + SQLFreeStmt(hindx_stmt, SQL_DROP); + goto SEEYA; + + } + + result = SQLBindCol(hindx_stmt, 6, SQL_C_CHAR, relhasrules, MAX_INFO_STRING, NULL); if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) { *************** *** 2255,2260 **** --- 2286,2294 ---- sprintf(buf, "%s_idx_fake_oid", table_name); set_tuplefield_string(&row->tuple[5], buf); + /* + * Clustered/HASH index? + */ set_tuplefield_int2(&row->tuple[6], (Int2) SQL_INDEX_OTHER); set_tuplefield_int2(&row->tuple[7], (Int2) 1); *************** *** 2297,2303 **** set_tuplefield_string(&row->tuple[4], ""); set_tuplefield_string(&row->tuple[5], index_name); ! set_tuplefield_int2(&row->tuple[6], (Int2) SQL_INDEX_OTHER); set_tuplefield_int2(&row->tuple[7], (Int2) (i + 1)); if (fields_vector[i] == OID_ATTNUM) --- 2331,2342 ---- set_tuplefield_string(&row->tuple[4], ""); set_tuplefield_string(&row->tuple[5], index_name); ! /* ! * Clustered/HASH index? ! */ ! set_tuplefield_int2(&row->tuple[6], (Int2) ! (atoi(isclustered) ? SQL_INDEX_CLUSTERED : ! (!strncmp(ishash, "hash", 4)) ? SQL_INDEX_HASHED : SQL_INDEX_OTHER); set_tuplefield_int2(&row->tuple[7], (Int2) (i + 1)); if (fields_vector[i] == OID_ATTNUM)
pgsql-odbc by date: