diff options
Diffstat (limited to 'src/interfaces/odbc/dlg_specific.c')
-rw-r--r-- | src/interfaces/odbc/dlg_specific.c | 131 |
1 files changed, 72 insertions, 59 deletions
diff --git a/src/interfaces/odbc/dlg_specific.c b/src/interfaces/odbc/dlg_specific.c index 7c8c3559eec..316941b7657 100644 --- a/src/interfaces/odbc/dlg_specific.c +++ b/src/interfaces/odbc/dlg_specific.c @@ -16,10 +16,27 @@ * */ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#ifdef UNIX +#include <string.h> +#include "gpps.h" +#define SQLGetPrivateProfileString(a,b,c,d,e,f) GetPrivateProfileString(a,b,c,d,e,f) +#define SQLWritePrivateProfileString(a,b,c,d) WritePrivateProfileString(a,b,c,d) +#if !HAVE_STRICMP +#define stricmp(s1,s2) strcasecmp(s1,s2) +#define strnicmp(s1,s2,n) strncasecmp(s1,s2,n) +#endif +#endif + #include "dlg_specific.h" +#include "convert.h" extern GLOBAL_VALUES globals; +#ifndef UNIX /* best to find a #ifdef for WINDOWS */ void SetDlgStuff(HWND hdlg, ConnInfo *ci) { @@ -81,7 +98,9 @@ int CALLBACK driver_optionsProc(HWND hdlg, CheckDlgButton(hdlg, DRV_TEXT_LONGVARCHAR, globals.text_as_longvarchar); CheckDlgButton(hdlg, DRV_UNKNOWNS_LONGVARCHAR, globals.unknowns_as_longvarchar); CheckDlgButton(hdlg, DRV_BOOLS_CHAR, globals.bools_as_char); - + + CheckDlgButton(hdlg, DRV_PARSE, globals.parse); + SetDlgItemInt(hdlg, DRV_CACHE_SIZE, globals.fetch_max, FALSE); SetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, globals.max_varchar_size, FALSE); SetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, globals.max_longvarchar_size, TRUE); @@ -117,6 +136,8 @@ int CALLBACK driver_optionsProc(HWND hdlg, globals.unknowns_as_longvarchar = IsDlgButtonChecked(hdlg, DRV_UNKNOWNS_LONGVARCHAR); globals.bools_as_char = IsDlgButtonChecked(hdlg, DRV_BOOLS_CHAR); + globals.parse = IsDlgButtonChecked(hdlg, DRV_PARSE); + globals.fetch_max = GetDlgItemInt(hdlg, DRV_CACHE_SIZE, NULL, FALSE); globals.max_varchar_size = GetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, NULL, FALSE); globals.max_longvarchar_size= GetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, NULL, TRUE); // allows for SQL_NO_TOTAL @@ -141,6 +162,8 @@ int CALLBACK driver_optionsProc(HWND hdlg, CheckDlgButton(hdlg, DRV_READONLY, DEFAULT_READONLY); CheckDlgButton(hdlg, DRV_USEDECLAREFETCH, DEFAULT_USEDECLAREFETCH); + CheckDlgButton(hdlg, DRV_PARSE, DEFAULT_PARSE); + /* Unknown Sizes */ CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 0); CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 0); @@ -185,7 +208,6 @@ int CALLBACK ds_optionsProc(HWND hdlg, { ConnInfo *ci; char buf[128]; -// int unknown_sizes; switch (wMsg) { case WM_INITDIALOG: @@ -209,20 +231,6 @@ char buf[128]; else CheckDlgButton(hdlg, DS_PG62, 0); - /* Unknown Data Type sizes -- currently only needed in Driver options. - switch (atoi(ci->unknown_sizes)) { - case UNKNOWNS_AS_DONTKNOW: - CheckDlgButton(hdlg, DS_UNKNOWN_DONTKNOW, 1); - break; - case UNKNOWNS_AS_LONGEST: - CheckDlgButton(hdlg, DS_UNKNOWN_LONGEST, 1); - break; - case UNKNOWNS_AS_MAX: - default: - CheckDlgButton(hdlg, DS_UNKNOWN_MAX, 1); - break; - } - */ CheckDlgButton(hdlg, DS_SHOWOIDCOLUMN, atoi(ci->show_oid_column)); CheckDlgButton(hdlg, DS_FAKEOIDINDEX, atoi(ci->fake_oid_index)); @@ -259,18 +267,6 @@ char buf[128]; ci->protocol[0] = '\0'; - /* Unknown Data Type sizes -- currently only needed in Driver options. - if (IsDlgButtonChecked(hdlg, DS_UNKNOWN_MAX)) - unknown_sizes = UNKNOWNS_AS_MAX; - else if (IsDlgButtonChecked(hdlg, DS_UNKNOWN_DONTKNOW)) - unknown_sizes = UNKNOWNS_AS_DONTKNOW; - else if (IsDlgButtonChecked(hdlg, DS_UNKNOWN_LONGEST)) - unknown_sizes = UNKNOWNS_AS_LONGEST; - else - unknown_sizes = UNKNOWNS_AS_MAX; - - sprintf(ci->unknown_sizes, "%d", unknown_sizes); - */ sprintf(ci->show_system_tables, "%d", IsDlgButtonChecked(hdlg, DS_SHOWSYSTEMTABLES)); @@ -295,27 +291,36 @@ char buf[128]; return FALSE; } +#endif /* !UNIX */ + void makeConnectString(char *connect_string, ConnInfo *ci) { char got_dsn = (ci->dsn[0] != '\0'); +char encoded_conn_settings[LARGE_REGISTRY_LEN]; - sprintf(connect_string, "%s=%s;DATABASE=%s;SERVER=%s;PORT=%s;UID=%s;READONLY=%s;PWD=%s;PROTOCOL=%s;FAKEOIDINDEX=%s;SHOWOIDCOLUMN=%s;ROWVERSIONING=%s;SHOWSYSTEMTABLES=%s;CONNSETTINGS=%s", + /* fundamental info */ + sprintf(connect_string, "%s=%s;DATABASE=%s;SERVER=%s;PORT=%s;UID=%s;PWD=%s", got_dsn ? "DSN" : "DRIVER", got_dsn ? ci->dsn : ci->driver, ci->database, ci->server, ci->port, ci->username, + ci->password); + + encode(ci->conn_settings, encoded_conn_settings); + + /* extra info */ + sprintf(&connect_string[strlen(connect_string)], + ";READONLY=%s;PROTOCOL=%s;FAKEOIDINDEX=%s;SHOWOIDCOLUMN=%s;ROWVERSIONING=%s;SHOWSYSTEMTABLES=%s;CONNSETTINGS=%s", ci->readonly, - ci->password, ci->protocol, -// ci->unknown_sizes, -- currently only needed in Driver options. ci->fake_oid_index, ci->show_oid_column, ci->row_versioning, ci->show_system_tables, - ci->conn_settings); + encoded_conn_settings); } void @@ -349,10 +354,6 @@ copyAttributes(ConnInfo *ci, char *attribute, char *value) else if (stricmp(attribute, INI_PROTOCOL) == 0) strcpy(ci->protocol, value); - /* - else if (stricmp(attribute, INI_UNKNOWNSIZES) == 0) - strcpy(ci->unknown_sizes, value); - */ else if (stricmp(attribute, INI_SHOWOIDCOLUMN) == 0) strcpy(ci->show_oid_column, value); @@ -365,9 +366,10 @@ copyAttributes(ConnInfo *ci, char *attribute, char *value) else if (stricmp(attribute, INI_SHOWSYSTEMTABLES) == 0) strcpy(ci->show_system_tables, value); - else if (stricmp(attribute, INI_CONNSETTINGS) == 0) - strcpy(ci->conn_settings, value); - + else if (stricmp(attribute, INI_CONNSETTINGS) == 0) { + decode(value, ci->conn_settings); + // strcpy(ci->conn_settings, value); + } mylog("copyAttributes: DSN='%s',server='%s',dbase='%s',user='%s',passwd='%s',port='%s',readonly='%s',protocol='%s', conn_settings='%s')\n", ci->dsn, @@ -378,7 +380,6 @@ copyAttributes(ConnInfo *ci, char *attribute, char *value) ci->port, ci->readonly, ci->protocol, - // ci->unknown_sizes, ci->conn_settings); } @@ -392,10 +393,6 @@ getDSNdefaults(ConnInfo *ci) if (ci->readonly[0] == '\0') sprintf(ci->readonly, "%d", globals.readonly); -/* -- currently only needed in Driver options. - if (ci->unknown_sizes[0] == '\0') - sprintf(ci->unknown_sizes, "%d", globals.unknown_sizes); -*/ if (ci->fake_oid_index[0] == '\0') sprintf(ci->fake_oid_index, "%d", DEFAULT_FAKEOIDINDEX); @@ -414,6 +411,7 @@ void getDSNinfo(ConnInfo *ci, char overwrite) { char *DSN = ci->dsn; +char encoded_conn_settings[LARGE_REGISTRY_LEN]; // If a driver keyword was present, then dont use a DSN and return. // If DSN is null and no driver, then use the default datasource. @@ -447,10 +445,6 @@ char *DSN = ci->dsn; if ( ci->readonly[0] == '\0' || overwrite) SQLGetPrivateProfileString(DSN, INI_READONLY, "", ci->readonly, sizeof(ci->readonly), ODBC_INI); - /* -- currently only needed in Driver options. - if ( ci->unknown_sizes[0] == '\0' || overwrite) - SQLGetPrivateProfileString(DSN, INI_UNKNOWNSIZES, "", ci->unknown_sizes, sizeof(ci->unknown_sizes), ODBC_INI); - */ if ( ci->show_oid_column[0] == '\0' || overwrite) SQLGetPrivateProfileString(DSN, INI_SHOWOIDCOLUMN, "", ci->show_oid_column, sizeof(ci->show_oid_column), ODBC_INI); @@ -466,8 +460,16 @@ char *DSN = ci->dsn; if ( ci->protocol[0] == '\0' || overwrite) SQLGetPrivateProfileString(DSN, INI_PROTOCOL, "", ci->protocol, sizeof(ci->protocol), ODBC_INI); - if ( ci->conn_settings[0] == '\0' || overwrite) - SQLGetPrivateProfileString(DSN, INI_CONNSETTINGS, "", ci->conn_settings, sizeof(ci->conn_settings), ODBC_INI); + if ( ci->conn_settings[0] == '\0' || overwrite) { + SQLGetPrivateProfileString(DSN, INI_CONNSETTINGS, "", encoded_conn_settings, sizeof(encoded_conn_settings), ODBC_INI); + decode(encoded_conn_settings, ci->conn_settings); + } + + if ( ci->translation_dll[0] == '\0' || overwrite) + SQLGetPrivateProfileString(DSN, INI_TRANSLATIONDLL, "", ci->translation_dll, sizeof(ci->translation_dll), ODBC_INI); + + if ( ci->translation_option[0] == '\0' || overwrite) + SQLGetPrivateProfileString(DSN, INI_TRANSLATIONOPTION, "", ci->translation_option, sizeof(ci->translation_option), ODBC_INI); qlog("DSN info: DSN='%s',server='%s',port='%s',dbase='%s',user='%s',passwd='%s'\n", DSN, @@ -481,10 +483,13 @@ char *DSN = ci->dsn; ci->protocol, ci->show_oid_column, ci->fake_oid_index, - // ci->unknown_sizes, ci->show_system_tables); qlog(" conn_settings='%s'\n", ci->conn_settings); + qlog(" translation_dll='%s',translation_option='%s'\n", + ci->translation_dll, + ci->translation_option); + } @@ -493,6 +498,9 @@ void writeDSNinfo(ConnInfo *ci) { char *DSN = ci->dsn; +char encoded_conn_settings[LARGE_REGISTRY_LEN]; + + encode(ci->conn_settings, encoded_conn_settings); SQLWritePrivateProfileString(DSN, INI_KDESC, @@ -529,12 +537,6 @@ char *DSN = ci->dsn; ci->readonly, ODBC_INI); - /* -- currently only needed in Driver options. - SQLWritePrivateProfileString(DSN, - INI_UNKNOWNSIZES, - ci->unknown_sizes, - ODBC_INI); - */ SQLWritePrivateProfileString(DSN, INI_SHOWOIDCOLUMN, ci->show_oid_column, @@ -562,7 +564,7 @@ char *DSN = ci->dsn; SQLWritePrivateProfileString(DSN, INI_CONNSETTINGS, - ci->conn_settings, + encoded_conn_settings, ODBC_INI); } @@ -631,7 +633,7 @@ char temp[128]; globals.unique_index = atoi(temp); - // Unknown Sizes is stored in the driver section AND per datasource + // Unknown Sizes is stored in the driver section only SQLGetPrivateProfileString(DBMS_NAME, INI_UNKNOWNSIZES, "", temp, sizeof(temp), ODBCINST_INI); if ( temp[0] == '\0') @@ -648,6 +650,13 @@ char temp[128]; else globals.lie = atoi(temp); + // Parse statements + SQLGetPrivateProfileString(DBMS_NAME, INI_PARSE, "", + temp, sizeof(temp), ODBCINST_INI); + if ( temp[0] == '\0') + globals.parse = DEFAULT_PARSE; + else + globals.parse = atoi(temp); // Readonly is stored in the driver section AND per datasource SQLGetPrivateProfileString(DBMS_NAME, INI_READONLY, "", @@ -772,6 +781,10 @@ char tmp[128]; SQLWritePrivateProfileString(DBMS_NAME, INI_BOOLSASCHAR, tmp, ODBCINST_INI); + sprintf(tmp, "%d", globals.parse); + SQLWritePrivateProfileString(DBMS_NAME, + INI_PARSE, tmp, ODBCINST_INI); + sprintf(tmp, "%d", globals.max_varchar_size); SQLWritePrivateProfileString(DBMS_NAME, INI_MAXVARCHARSIZE, tmp, ODBCINST_INI); |