Index: connection.c =================================================================== RCS file: /cvsroot/psqlodbc/psqlodbc/connection.c,v retrieving revision 1.161 diff -u -r1.161 connection.c --- connection.c 4 Jun 2007 11:49:49 -0000 1.161 +++ connection.c 7 Jun 2007 14:34:03 -0000 @@ -286,6 +286,7 @@ conninfo->fake_mss = -1; conninfo->cvt_null_date_string = -1; conninfo->autocommit_public = SQL_AUTOCOMMIT_ON; + conninfo->list_usertables_only = -1; #ifdef _HANDLE_ENLIST_IN_DTC_ conninfo->xa_opt = -1; #endif /* _HANDLE_ENLIST_IN_DTC_ */ Index: connection.h =================================================================== RCS file: /cvsroot/psqlodbc/psqlodbc/connection.h,v retrieving revision 1.85 diff -u -r1.85 connection.h --- connection.h 2 Jun 2007 05:32:18 -0000 1.85 +++ connection.h 5 Jun 2007 05:18:57 -0000 @@ -306,6 +306,7 @@ signed char fake_mss; signed char cvt_null_date_string; signed char autocommit_public; + signed char list_usertables_only; #ifdef _HANDLE_ENLIST_IN_DTC_ signed char xa_opt; #endif /* _HANDLE_ENLIST_IN_DTC_ */ Index: dlg_specific.c =================================================================== RCS file: /cvsroot/psqlodbc/psqlodbc/dlg_specific.c,v retrieving revision 1.80 diff -u -r1.80 dlg_specific.c --- dlg_specific.c 2 Jun 2007 05:32:18 -0000 1.80 +++ dlg_specific.c 7 Jun 2007 14:38:22 -0000 @@ -188,6 +188,7 @@ INI_BYTEAASLONGVARBINARY "=%d;" INI_USESERVERSIDEPREPARE "=%d;" INI_LOWERCASEIDENTIFIER "=%d;" + INI_LISTUSERTABLESONLY "=%d;" #ifdef _HANDLE_ENLIST_IN_DTC_ INI_XAOPT "=%d" /* XAOPT */ #endif /* _HANDLE_ENLIST_IN_DTC_ */ @@ -223,6 +224,7 @@ ,ci->bytea_as_longvarbinary ,ci->use_server_side_prepare ,ci->lower_case_identifier + ,ci->list_usertables_only #ifdef _HANDLE_ENLIST_IN_DTC_ ,ci->xa_opt #endif /* _HANDLE_ENLIST_IN_DTC_ */ @@ -293,6 +295,8 @@ flag |= BIT_USESERVERSIDEPREPARE; if (ci->lower_case_identifier) flag |= BIT_LOWERCASEIDENTIFIER; + if (ci->list_usertables_only) + flag |= BIT_LISTUSERTABLESONLY; if (ci->sslmode[0]) olen = snprintf(&connect_string[hlen], nlen, ";" @@ -407,10 +411,12 @@ sprintf(ci->show_system_tables, "%d", (char)((flag & BIT_SHOWSYSTEMTABLES) != 0)); sprintf(ci->show_oid_column, "%d", (char)((flag & BIT_SHOWOIDCOLUMN) != 0)); sprintf(ci->fake_oid_index, "%d", (char)((flag & BIT_FAKEOIDINDEX) != 0)); + ci->list_usertables_only = (char)((flag & BIT_LISTUSERTABLESONLY) != 0); ci->true_is_minus1 = (char)((flag & BIT_TRUEISMINUS1) != 0); ci->bytea_as_longvarbinary = (char)((flag & BIT_BYTEAASLONGVARBINARY) != 0); ci->use_server_side_prepare = (char)((flag & BIT_USESERVERSIDEPREPARE) != 0); ci->lower_case_identifier = (char)((flag & BIT_LOWERCASEIDENTIFIER) != 0); + } BOOL copyAttributes(ConnInfo *ci, const char *attribute, const char *value) @@ -494,6 +500,8 @@ ci->use_server_side_prepare = atoi(value); else if (stricmp(attribute, INI_LOWERCASEIDENTIFIER) == 0 || stricmp(attribute, ABBR_LOWERCASEIDENTIFIER) == 0) ci->lower_case_identifier = atoi(value); + else if (stricmp(attribute, INI_LISTUSERTABLESONLY) == 0 || stricmp(attribute, ABBR_LISTUSERTABLESONLY) == 0) + ci->list_usertables_only = atoi(value); else if (stricmp(attribute, INI_SSLMODE) == 0 || stricmp(attribute, ABBR_SSLMODE) == 0) { switch (value[0]) @@ -670,6 +678,9 @@ ci->bde_environment = 0; if (ci->cvt_null_date_string < 0) ci->cvt_null_date_string = 0; + if (ci->list_usertables_only < 0) + ci->list_usertables_only = DEFAULT_LISTUSERTABLESONLY; + #ifdef _HANDLE_ENLIST_IN_DTC_ if (ci->xa_opt < 0) ci->xa_opt = DEFAULT_XAOPT; @@ -835,6 +846,14 @@ if (ci->sslmode[0] == '\0' || overwrite) SQLGetPrivateProfileString(DSN, INI_SSLMODE, "", ci->sslmode, sizeof(ci->sslmode), ODBC_INI); + if (ci->list_usertables_only < 0 || overwrite) + { + SQLGetPrivateProfileString(DSN, INI_LISTUSERTABLESONLY, "", temp, sizeof(temp), ODBC_INI); + if (temp[0]) + ci->list_usertables_only = atoi(temp); + } + + #ifdef _HANDLE_ENLIST_IN_DTC_ if (ci->xa_opt < 0 || overwrite) { @@ -1117,6 +1136,11 @@ INI_SSLMODE, ci->sslmode, ODBC_INI); + sprintf(temp, "%d", ci->list_usertables_only); + SQLWritePrivateProfileString(DSN, + INI_LISTUSERTABLESONLY, + temp, + ODBC_INI); #ifdef _HANDLE_ENLIST_IN_DTC_ sprintf(temp, "%d", ci->xa_opt); SQLWritePrivateProfileString(DSN, INI_XAOPT, temp, ODBC_INI); Index: dlg_specific.h =================================================================== RCS file: /cvsroot/psqlodbc/psqlodbc/dlg_specific.h,v retrieving revision 1.55 diff -u -r1.55 dlg_specific.h --- dlg_specific.h 11 Apr 2007 15:22:23 -0000 1.55 +++ dlg_specific.h 7 Jun 2007 13:20:46 -0000 @@ -141,6 +141,8 @@ #define ABBR_LOWERCASEIDENTIFIER "C9" #define INI_SSLMODE "SSLmode" #define ABBR_SSLMODE "CA" +#define INI_LISTUSERTABLESONLY "ListUserTablesOnly" +#define ABBR_LISTUSERTABLESONLY "CB" #define INI_EXTRAOPTIONS "AB" #define SSLMODE_DISABLE "disable" @@ -180,8 +182,9 @@ #define BIT_BYTEAASLONGVARBINARY (1L<<24) #define BIT_USESERVERSIDEPREPARE (1L<<25) #define BIT_LOWERCASEIDENTIFIER (1L<<26) +#define BIT_LISTUSERTABLESONLY (1L<<27) -#define EFFECTIVE_BIT_COUNT 27 +#define EFFECTIVE_BIT_COUNT 28 /* Mask for extra options */ #define BIT_FORCEABBREVCONNSTR 1L @@ -203,6 +206,7 @@ #define DEFAULT_UNIQUEINDEX 1 /* dont recognize */ #define DEFAULT_COMMLOG 0 /* dont log */ #define DEFAULT_DEBUG 0 +#define DEFAULT_LISTUSERTABLESONLY 0 /* show all tables by default */ #define DEFAULT_UNKNOWNSIZES UNKNOWNS_AS_MAX Index: dlg_wingui.c =================================================================== RCS file: /cvsroot/psqlodbc/psqlodbc/dlg_wingui.c,v retrieving revision 1.18 diff -u -r1.18 dlg_wingui.c --- dlg_wingui.c 2 Jun 2007 05:32:18 -0000 1.18 +++ dlg_wingui.c 7 Jun 2007 14:43:51 -0000 @@ -566,6 +566,7 @@ CheckDlgButton(hdlg, DS_UPDATABLECURSORS, ci->allow_keyset); CheckDlgButton(hdlg, DS_SERVERSIDEPREPARE, ci->use_server_side_prepare); CheckDlgButton(hdlg, DS_BYTEAASLONGVARBINARY, ci->bytea_as_longvarbinary); + CheckDlgButton(hdlg, DS_LISTUSERTABLESONLY, ci->list_usertables_only); /*CheckDlgButton(hdlg, DS_LOWERCASEIDENTIFIER, ci->lower_case_identifier);*/ EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), atoi(ci->show_oid_column)); @@ -638,6 +639,7 @@ ci->allow_keyset = IsDlgButtonChecked(hdlg, DS_UPDATABLECURSORS); ci->use_server_side_prepare = IsDlgButtonChecked(hdlg, DS_SERVERSIDEPREPARE); ci->bytea_as_longvarbinary = IsDlgButtonChecked(hdlg, DS_BYTEAASLONGVARBINARY); + ci->list_usertables_only = IsDlgButtonChecked(hdlg, DS_LISTUSERTABLESONLY); /*ci->lower_case_identifier = IsDlgButtonChecked(hdlg, DS_LOWERCASEIDENTIFIER);*/ /* OID Options */ Index: info.c =================================================================== RCS file: /cvsroot/psqlodbc/psqlodbc/info.c,v retrieving revision 1.145 diff -u -r1.145 info.c --- info.c 2 Jun 2007 05:32:18 -0000 1.145 +++ info.c 7 Jun 2007 12:38:04 -0000 @@ -1709,6 +1709,18 @@ } } + /* + * Check to see if we are only interested in listing tables upon + * which the user has one of SELECT, INSERT, DELETE or UPDATE + * privileges + */ + if (!list_some) + { + if (ci->list_usertables_only) + strcat(tables_query, " and (has_table_privilege(current_user, c.oid, 'select') or has_table_privilege(current_user, c.oid, 'insert') or" + " has_table_privilege(current_user, c.oid, 'delete') or has_table_privilege(current_user, c.oid, 'update'))"); + } + if (list_schemas) strcat(tables_query, " order by nspname"); else if (list_some) Index: psqlodbc.rc =================================================================== RCS file: /cvsroot/psqlodbc/psqlodbc/psqlodbc.rc,v retrieving revision 1.87 diff -u -r1.87 psqlodbc.rc --- psqlodbc.rc 23 Oct 2006 15:58:29 -0000 1.87 +++ psqlodbc.rc 4 Jun 2007 20:59:01 -0000 @@ -542,6 +542,8 @@ BS_AUTOCHECKBOX | WS_TABSTOP,163,71,90,10 CONTROL "bytea as LO",DS_BYTEAASLONGVARBINARY,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,16,84,87,10 + CONTROL "Only list user-accessible tables",DS_LISTUSERTABLESONLY,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,163,84,147,10 GROUPBOX "Int8 As",IDC_STATIC,5,97,256,25 CONTROL "default",DS_INT8_AS_DEFAULT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,12,107,40,10 Index: resource.h =================================================================== RCS file: /cvsroot/psqlodbc/psqlodbc/resource.h,v retrieving revision 1.40 diff -u -r1.40 resource.h --- resource.h 23 Oct 2006 15:58:29 -0000 1.40 +++ resource.h 4 Jun 2007 20:58:51 -0000 @@ -94,6 +94,7 @@ #define DRV_DTCLOG 1083 #define DS_EXTRA_OPTIONS 1084 #define IDC_TEST 1085 +#define DS_LISTUSERTABLESONLY 1086 // Next default values for new objects //