Index: src/interfaces/odbc/info.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/odbc/info.c,v retrieving revision 1.47 diff -c -r1.47 info.c *** src/interfaces/odbc/info.c 2001/05/14 21:53:16 1.47 --- src/interfaces/odbc/info.c 2001/05/15 19:17:00 *************** *** 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" ! ", i.indisclustered, a.amname, c.relhasrules" ! " from pg_index i, pg_class c, pg_class d, pg_am a" ! " where d.relname = '%s'" ! " and d.oid = i.indrelid" ! " and i.indexrelid = c.oid" ! " and c.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,2295 ---- sprintf(buf, "%s_idx_fake_oid", table_name); set_tuplefield_string(&row->tuple[5], buf); + /* + * Clustered index? I think non-clustered should be type OTHER + * not HASHED + */ set_tuplefield_int2(&row->tuple[6], (Int2) SQL_INDEX_OTHER); set_tuplefield_int2(&row->tuple[7], (Int2) 1); *************** *** 2272,2278 **** { /* If only requesting unique indexs, then just return those. */ if (fUnique == SQL_INDEX_ALL || ! (fUnique == SQL_INDEX_UNIQUE && atoi(isunique))) { i = 0; /* add a row in this table for each field in the index */ --- 2307,2313 ---- { /* If only requesting unique indexs, then just return those. */ if (fUnique == SQL_INDEX_ALL || ! (fUnique == SQL_INDEX_UNIQUE && isunique[0] == 't')) { i = 0; /* add a row in this table for each field in the index */ *************** *** 2289,2295 **** /* non-unique index? */ if (globals.unique_index) ! set_tuplefield_int2(&row->tuple[3], (Int2) (atoi(isunique) ? FALSE : TRUE)); else set_tuplefield_int2(&row->tuple[3], TRUE); --- 2324,2330 ---- /* non-unique index? */ if (globals.unique_index) ! set_tuplefield_int2(&row->tuple[3], (Int2) (isunique[0] == 't' ? FALSE : TRUE)); else set_tuplefield_int2(&row->tuple[3], TRUE); *************** *** 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) --- 2332,2344 ---- set_tuplefield_string(&row->tuple[4], ""); set_tuplefield_string(&row->tuple[5], index_name); ! /* ! * Clustered index? I think non-clustered should be type ! * OTHER not HASHED ! */ ! set_tuplefield_int2(&row->tuple[6], (Int2) ! (isclustered[0] == 't') ? 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)