diff options
Diffstat (limited to 'src/interfaces/odbc/dlg_specific.c')
-rw-r--r-- | src/interfaces/odbc/dlg_specific.c | 971 |
1 files changed, 0 insertions, 971 deletions
diff --git a/src/interfaces/odbc/dlg_specific.c b/src/interfaces/odbc/dlg_specific.c deleted file mode 100644 index 4f96a6f7c56..00000000000 --- a/src/interfaces/odbc/dlg_specific.c +++ /dev/null @@ -1,971 +0,0 @@ -/*------- - * Module: dlg_specific.c - * - * Description: This module contains any specific code for handling - * dialog boxes such as driver/datasource options. Both the - * ConfigDSN() and the SQLDriverConnect() functions use - * functions in this module. If you were to add a new option - * to any dialog box, you would most likely only have to change - * things in here rather than in 2 separate places as before. - * - * Classes: none - * - * API functions: none - * - * Comments: See "notice.txt" for copyright and license information. - *------- - */ -/* Multibyte support Eiji Tokuya 2001-03-15 */ - -#include "dlg_specific.h" - -#include "convert.h" - -#ifdef MULTIBYTE -#include "multibyte.h" -#endif -#include "pgapifunc.h" - -#ifndef BOOL -#define BOOL int -#endif -#ifndef FALSE -#define FALSE (BOOL)0 -#endif -#ifndef TRUE -#define TRUE (BOOL)1 -#endif - -extern GLOBAL_VALUES globals; - -void -makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len) -{ - char got_dsn = (ci->dsn[0] != '\0'); - char encoded_conn_settings[LARGE_REGISTRY_LEN]; - UWORD hlen; - /*BOOL abbrev = (len <= 400);*/ - BOOL abbrev = (len < 1024); - - /* 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 */ - hlen = strlen(connect_string); - if (!abbrev) - sprintf(&connect_string[hlen], - ";%s=%s;%s=%s;%s=%s;%s=%s;%s=%s;%s=%s;%s=%s;%s=%d;%s=%d;%s=%d;%s=%d;%s=%d;%s=%d;%s=%d;%s=%d;%s=%d;%s=%d;%s=%d;%s=%d;%s=%d;%s=%d;%s=%d;%s=%s;%s=%d;%s=%d;%s=%d;%s=%d;%s=%d", - INI_READONLY, - ci->onlyread, - INI_PROTOCOL, - ci->protocol, - INI_FAKEOIDINDEX, - ci->fake_oid_index, - INI_SHOWOIDCOLUMN, - ci->show_oid_column, - INI_ROWVERSIONING, - ci->row_versioning, - INI_SHOWSYSTEMTABLES, - ci->show_system_tables, - INI_CONNSETTINGS, - encoded_conn_settings, - INI_FETCH, - ci->drivers.fetch_max, - INI_SOCKET, - ci->drivers.socket_buffersize, - INI_UNKNOWNSIZES, - ci->drivers.unknown_sizes, - INI_MAXVARCHARSIZE, - ci->drivers.max_varchar_size, - INI_MAXLONGVARCHARSIZE, - ci->drivers.max_longvarchar_size, - INI_DEBUG, - ci->drivers.debug, - INI_COMMLOG, - ci->drivers.commlog, - INI_OPTIMIZER, - ci->drivers.disable_optimizer, - INI_KSQO, - ci->drivers.ksqo, - INI_USEDECLAREFETCH, - ci->drivers.use_declarefetch, - INI_TEXTASLONGVARCHAR, - ci->drivers.text_as_longvarchar, - INI_UNKNOWNSASLONGVARCHAR, - ci->drivers.unknowns_as_longvarchar, - INI_BOOLSASCHAR, - ci->drivers.bools_as_char, - INI_PARSE, - ci->drivers.parse, - INI_CANCELASFREESTMT, - ci->drivers.cancel_as_freestmt, - INI_EXTRASYSTABLEPREFIXES, - ci->drivers.extra_systable_prefixes, - INI_LFCONVERSION, - ci->lf_conversion, - INI_UPDATABLECURSORS, - ci->allow_keyset, - INI_DISALLOWPREMATURE, - ci->disallow_premature, - INI_TRUEISMINUS1, - ci->true_is_minus1, - INI_INT8AS, - ci->true_is_minus1); - /* Abbrebiation is needed ? */ - if (abbrev || strlen(connect_string) >= len) - { - unsigned long flag = 0; - if (ci->disallow_premature) - flag |= BIT_DISALLOWPREMATURE; - if (ci->allow_keyset) - flag |= BIT_UPDATABLECURSORS; - if (ci->lf_conversion) - flag |= BIT_LFCONVERSION; - if (ci->drivers.unique_index) - flag |= BIT_UNIQUEINDEX; - if (strncmp(ci->protocol, PG64, strlen(PG64)) == 0) - flag |= BIT_PROTOCOL_64; - else if (strncmp(ci->protocol, PG63, strlen(PG63)) == 0) - flag |= BIT_PROTOCOL_63; - switch (ci->drivers.unknown_sizes) - { - case UNKNOWNS_AS_DONTKNOW: - flag |= BIT_UNKNOWN_DONTKNOW; - break; - case UNKNOWNS_AS_MAX: - flag |= BIT_UNKNOWN_ASMAX; - break; - } - if (ci->drivers.disable_optimizer) - flag |= BIT_OPTIMIZER; - if (ci->drivers.ksqo) - flag |= BIT_KSQO; - if (ci->drivers.commlog) - flag |= BIT_COMMLOG; - if (ci->drivers.debug) - flag |= BIT_DEBUG; - if (ci->drivers.parse) - flag |= BIT_PARSE; - if (ci->drivers.cancel_as_freestmt) - flag |= BIT_CANCELASFREESTMT; - if (ci->drivers.use_declarefetch) - flag |= BIT_USEDECLAREFETCH; - if (ci->onlyread[0] == '1') - flag |= BIT_READONLY; - if (ci->drivers.text_as_longvarchar) - flag |= BIT_TEXTASLONGVARCHAR; - if (ci->drivers.unknowns_as_longvarchar) - flag |= BIT_UNKNOWNSASLONGVARCHAR; - if (ci->drivers.bools_as_char) - flag |= BIT_BOOLSASCHAR; - if (ci->row_versioning[0] == '1') - flag |= BIT_ROWVERSIONING; - if (ci->show_system_tables[0] == '1') - flag |= BIT_SHOWSYSTEMTABLES; - if (ci->show_oid_column[0] == '1') - flag |= BIT_SHOWOIDCOLUMN; - if (ci->fake_oid_index[0] == '1') - flag |= BIT_FAKEOIDINDEX; - if (ci->true_is_minus1) - flag |= BIT_TRUEISMINUS1; - - sprintf(&connect_string[hlen], - ";A6=%s;A7=%d;A8=%d;B0=%d;B1=%d;%s=%d;C2=%s;CX=%02x%lx", - encoded_conn_settings, - ci->drivers.fetch_max, - ci->drivers.socket_buffersize, - ci->drivers.max_varchar_size, - ci->drivers.max_longvarchar_size, - INI_INT8AS, - ci->int8_as, - ci->drivers.extra_systable_prefixes, - EFFECTIVE_BIT_COUNT, - flag); - } -} - -static void -unfoldCXAttribute(ConnInfo *ci, const char *value) -{ - int count; - unsigned long flag; - - if (strlen(value) < 2) - { - count = 3; - sscanf(value, "%lx", &flag); - } - else - { - char cnt[8]; - memcpy(cnt, value, 2); - cnt[2] = '\0'; - sscanf(cnt, "%x", &count); - sscanf(value + 2, "%lx", &flag); - } - ci->disallow_premature = (char)((flag & BIT_DISALLOWPREMATURE) != 0); - ci->allow_keyset = (char)((flag & BIT_UPDATABLECURSORS) != 0); - ci->lf_conversion = (char)((flag & BIT_LFCONVERSION) != 0); - if (count < 4) - return; - ci->drivers.unique_index = (char)((flag & BIT_UNIQUEINDEX) != 0); - if ((flag & BIT_PROTOCOL_64) != 0) - strcpy(ci->protocol, PG64); - else if ((flag & BIT_PROTOCOL_63) != 0) - strcpy(ci->protocol, PG63); - else - strcpy(ci->protocol, PG62); - if ((flag & BIT_UNKNOWN_DONTKNOW) != 0) - ci->drivers.unknown_sizes = UNKNOWNS_AS_DONTKNOW; - else if ((flag & BIT_UNKNOWN_ASMAX) != 0) - ci->drivers.unknown_sizes = UNKNOWNS_AS_MAX; - else - ci->drivers.unknown_sizes = UNKNOWNS_AS_LONGEST; - ci->drivers.disable_optimizer = (char)((flag & BIT_OPTIMIZER) != 0); - ci->drivers.ksqo = (char)((flag & BIT_KSQO) != 0); - ci->drivers.commlog = (char)((flag & BIT_COMMLOG) != 0); - ci->drivers.debug = (char)((flag & BIT_DEBUG) != 0); - ci->drivers.parse = (char)((flag & BIT_PARSE) != 0); - ci->drivers.cancel_as_freestmt = (char)((flag & BIT_CANCELASFREESTMT) != 0); - ci->drivers.use_declarefetch = (char)((flag & BIT_USEDECLAREFETCH) != 0); - sprintf(ci->onlyread, "%d", (char)((flag & BIT_READONLY) != 0)); - ci->drivers.text_as_longvarchar = (char)((flag & BIT_TEXTASLONGVARCHAR) !=0); - ci->drivers.unknowns_as_longvarchar = (char)((flag & BIT_UNKNOWNSASLONGVARCHAR) !=0); - ci->drivers.bools_as_char = (char)((flag & BIT_BOOLSASCHAR) != 0); - sprintf(ci->row_versioning, "%d", (char)((flag & BIT_ROWVERSIONING) != 0)); - 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->true_is_minus1 = (char)((flag & BIT_TRUEISMINUS1) != 0); -} -void -copyAttributes(ConnInfo *ci, const char *attribute, const char *value) -{ - if (stricmp(attribute, "DSN") == 0) - strcpy(ci->dsn, value); - - else if (stricmp(attribute, "driver") == 0) - strcpy(ci->driver, value); - - else if (stricmp(attribute, INI_DATABASE) == 0) - strcpy(ci->database, value); - - else if (stricmp(attribute, INI_SERVER) == 0 || stricmp(attribute, "server") == 0) - strcpy(ci->server, value); - - else if (stricmp(attribute, INI_USER) == 0 || stricmp(attribute, "uid") == 0) - strcpy(ci->username, value); - - else if (stricmp(attribute, INI_PASSWORD) == 0 || stricmp(attribute, "pwd") == 0) - strcpy(ci->password, value); - - else if (stricmp(attribute, INI_PORT) == 0) - strcpy(ci->port, value); - - else if (stricmp(attribute, INI_READONLY) == 0 || stricmp(attribute, "A0") == 0) - strcpy(ci->onlyread, value); - - else if (stricmp(attribute, INI_PROTOCOL) == 0 || stricmp(attribute, "A1") == 0) - strcpy(ci->protocol, value); - - else if (stricmp(attribute, INI_SHOWOIDCOLUMN) == 0 || stricmp(attribute, "A3") == 0) - strcpy(ci->show_oid_column, value); - - else if (stricmp(attribute, INI_FAKEOIDINDEX) == 0 || stricmp(attribute, "A2") == 0) - strcpy(ci->fake_oid_index, value); - - else if (stricmp(attribute, INI_ROWVERSIONING) == 0 || stricmp(attribute, "A4") == 0) - strcpy(ci->row_versioning, value); - - else if (stricmp(attribute, INI_SHOWSYSTEMTABLES) == 0 || stricmp(attribute, "A5") == 0) - strcpy(ci->show_system_tables, value); - - else if (stricmp(attribute, INI_CONNSETTINGS) == 0 || stricmp(attribute, "A6") == 0) - { - decode(value, ci->conn_settings); - /* strcpy(ci->conn_settings, value); */ - } - else if (stricmp(attribute, INI_DISALLOWPREMATURE) == 0 || stricmp(attribute, "C3") == 0) - ci->disallow_premature = atoi(value); - else if (stricmp(attribute, INI_UPDATABLECURSORS) == 0 || stricmp(attribute, "C4") == 0) - ci->allow_keyset = atoi(value); - else if (stricmp(attribute, INI_LFCONVERSION) == 0) - ci->lf_conversion = atoi(value); - else if (stricmp(attribute, INI_TRUEISMINUS1) == 0) - ci->true_is_minus1 = atoi(value); - else if (stricmp(attribute, INI_INT8AS) == 0) - ci->int8_as = atoi(value); - else if (stricmp(attribute, "CX") == 0) - unfoldCXAttribute(ci, value); - - mylog("copyAttributes: DSN='%s',server='%s',dbase='%s',user='%s',passwd='%s',port='%s',onlyread='%s',protocol='%s',conn_settings='%s',disallow_premature=%d)\n", ci->dsn, ci->server, ci->database, ci->username, ci->password, ci->port, ci->onlyread, ci->protocol, ci->conn_settings, ci->disallow_premature); -} - -void -copyCommonAttributes(ConnInfo *ci, const char *attribute, const char *value) -{ - if (stricmp(attribute, INI_FETCH) == 0 || stricmp(attribute, "A7") == 0) - ci->drivers.fetch_max = atoi(value); - else if (stricmp(attribute, INI_SOCKET) == 0 || stricmp(attribute, "A8") == 0) - ci->drivers.socket_buffersize = atoi(value); - else if (stricmp(attribute, INI_DEBUG) == 0 || stricmp(attribute, "B2") == 0) - ci->drivers.debug = atoi(value); - else if (stricmp(attribute, INI_COMMLOG) == 0 || stricmp(attribute, "B3") == 0) - ci->drivers.commlog = atoi(value); - else if (stricmp(attribute, INI_OPTIMIZER) == 0 || stricmp(attribute, "B4") == 0) - ci->drivers.disable_optimizer = atoi(value); - else if (stricmp(attribute, INI_KSQO) == 0 || stricmp(attribute, "B5") == 0) - ci->drivers.ksqo = atoi(value); - - /* - * else if (stricmp(attribute, INI_UNIQUEINDEX) == 0 || - * stricmp(attribute, "UIX") == 0) ci->drivers.unique_index = - * atoi(value); - */ - else if (stricmp(attribute, INI_UNKNOWNSIZES) == 0 || stricmp(attribute, "A9") == 0) - ci->drivers.unknown_sizes = atoi(value); - else if (stricmp(attribute, INI_LIE) == 0) - ci->drivers.lie = atoi(value); - else if (stricmp(attribute, INI_PARSE) == 0 || stricmp(attribute, "C0") == 0) - ci->drivers.parse = atoi(value); - else if (stricmp(attribute, INI_CANCELASFREESTMT) == 0 || stricmp(attribute, "C1") == 0) - ci->drivers.cancel_as_freestmt = atoi(value); - else if (stricmp(attribute, INI_USEDECLAREFETCH) == 0 || stricmp(attribute, "B6") == 0) - ci->drivers.use_declarefetch = atoi(value); - else if (stricmp(attribute, INI_MAXVARCHARSIZE) == 0 || stricmp(attribute, "B0") == 0) - ci->drivers.max_varchar_size = atoi(value); - else if (stricmp(attribute, INI_MAXLONGVARCHARSIZE) == 0 || stricmp(attribute, "B1") == 0) - ci->drivers.max_longvarchar_size = atoi(value); - else if (stricmp(attribute, INI_TEXTASLONGVARCHAR) == 0 || stricmp(attribute, "B7") == 0) - ci->drivers.text_as_longvarchar = atoi(value); - else if (stricmp(attribute, INI_UNKNOWNSASLONGVARCHAR) == 0 || stricmp(attribute, "B8") == 0) - ci->drivers.unknowns_as_longvarchar = atoi(value); - else if (stricmp(attribute, INI_BOOLSASCHAR) == 0 || stricmp(attribute, "B9") == 0) - ci->drivers.bools_as_char = atoi(value); - else if (stricmp(attribute, INI_EXTRASYSTABLEPREFIXES) == 0 || stricmp(attribute, "C2") == 0) - strcpy(ci->drivers.extra_systable_prefixes, value); - mylog("CopyCommonAttributes: A7=%d;A8=%d;A9=%d;B0=%d;B1=%d;B2=%d;B3=%d;B4=%d;B5=%d;B6=%d;B7=%d;B8=%d;B9=%d;C0=%d;C1=%d;C2=%s", - ci->drivers.fetch_max, - ci->drivers.socket_buffersize, - ci->drivers.unknown_sizes, - ci->drivers.max_varchar_size, - ci->drivers.max_longvarchar_size, - ci->drivers.debug, - ci->drivers.commlog, - ci->drivers.disable_optimizer, - ci->drivers.ksqo, - ci->drivers.use_declarefetch, - ci->drivers.text_as_longvarchar, - ci->drivers.unknowns_as_longvarchar, - ci->drivers.bools_as_char, - ci->drivers.parse, - ci->drivers.cancel_as_freestmt, - ci->drivers.extra_systable_prefixes); -} - - -void -getDSNdefaults(ConnInfo *ci) -{ - if (ci->port[0] == '\0') - strcpy(ci->port, DEFAULT_PORT); - - if (ci->onlyread[0] == '\0') - sprintf(ci->onlyread, "%d", globals.onlyread); - - if (ci->protocol[0] == '\0') - strcpy(ci->protocol, globals.protocol); - - if (ci->fake_oid_index[0] == '\0') - sprintf(ci->fake_oid_index, "%d", DEFAULT_FAKEOIDINDEX); - - if (ci->show_oid_column[0] == '\0') - sprintf(ci->show_oid_column, "%d", DEFAULT_SHOWOIDCOLUMN); - - if (ci->show_system_tables[0] == '\0') - sprintf(ci->show_system_tables, "%d", DEFAULT_SHOWSYSTEMTABLES); - - if (ci->row_versioning[0] == '\0') - sprintf(ci->row_versioning, "%d", DEFAULT_ROWVERSIONING); - - if (ci->disallow_premature < 0) - ci->disallow_premature = DEFAULT_DISALLOWPREMATURE; - if (ci->allow_keyset < 0) - ci->allow_keyset = DEFAULT_UPDATABLECURSORS; - if (ci->lf_conversion < 0) - ci->lf_conversion = DEFAULT_LFCONVERSION; - if (ci->true_is_minus1 < 0) - ci->true_is_minus1 = DEFAULT_TRUEISMINUS1; - if (ci->int8_as < -100) - ci->int8_as = DEFAULT_INT8AS; -} - - -void -getDSNinfo(ConnInfo *ci, char overwrite) -{ - char *DSN = ci->dsn; - char encoded_conn_settings[LARGE_REGISTRY_LEN], - temp[SMALL_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. - */ - if (DSN[0] == '\0') - { - if (ci->driver[0] != '\0') - return; - else - strcpy(DSN, INI_DSN); - } - - /* brute-force chop off trailing blanks... */ - while (*(DSN + strlen(DSN) - 1) == ' ') - *(DSN + strlen(DSN) - 1) = '\0'; - - /* Proceed with getting info for the given DSN. */ - - if (ci->desc[0] == '\0' || overwrite) - SQLGetPrivateProfileString(DSN, INI_KDESC, "", ci->desc, sizeof(ci->desc), ODBC_INI); - - if (ci->server[0] == '\0' || overwrite) - SQLGetPrivateProfileString(DSN, INI_SERVER, "", ci->server, sizeof(ci->server), ODBC_INI); - - if (ci->database[0] == '\0' || overwrite) - SQLGetPrivateProfileString(DSN, INI_DATABASE, "", ci->database, sizeof(ci->database), ODBC_INI); - - if (ci->username[0] == '\0' || overwrite) - SQLGetPrivateProfileString(DSN, INI_USER, "", ci->username, sizeof(ci->username), ODBC_INI); - - if (ci->password[0] == '\0' || overwrite) - SQLGetPrivateProfileString(DSN, INI_PASSWORD, "", ci->password, sizeof(ci->password), ODBC_INI); - - if (ci->port[0] == '\0' || overwrite) - SQLGetPrivateProfileString(DSN, INI_PORT, "", ci->port, sizeof(ci->port), ODBC_INI); - - if (ci->onlyread[0] == '\0' || overwrite) - SQLGetPrivateProfileString(DSN, INI_READONLY, "", ci->onlyread, sizeof(ci->onlyread), 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); - - if (ci->fake_oid_index[0] == '\0' || overwrite) - SQLGetPrivateProfileString(DSN, INI_FAKEOIDINDEX, "", ci->fake_oid_index, sizeof(ci->fake_oid_index), ODBC_INI); - - if (ci->row_versioning[0] == '\0' || overwrite) - SQLGetPrivateProfileString(DSN, INI_ROWVERSIONING, "", ci->row_versioning, sizeof(ci->row_versioning), ODBC_INI); - - if (ci->show_system_tables[0] == '\0' || overwrite) - SQLGetPrivateProfileString(DSN, INI_SHOWSYSTEMTABLES, "", ci->show_system_tables, sizeof(ci->show_system_tables), ODBC_INI); - - 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, "", 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); - - if (ci->disallow_premature < 0 || overwrite) - { - SQLGetPrivateProfileString(DSN, INI_DISALLOWPREMATURE, "", temp, sizeof(temp), ODBC_INI); - if (temp[0]) - ci->disallow_premature = atoi(temp); - } - - if (ci->allow_keyset < 0 || overwrite) - { - SQLGetPrivateProfileString(DSN, INI_UPDATABLECURSORS, "", temp, sizeof(temp), ODBC_INI); - if (temp[0]) - ci->allow_keyset = atoi(temp); - } - - if (ci->lf_conversion < 0 || overwrite) - { - SQLGetPrivateProfileString(DSN, INI_LFCONVERSION, "", temp, sizeof(temp), ODBC_INI); - if (temp[0]) - ci->lf_conversion = atoi(temp); - } - - if (ci->true_is_minus1 < 0 || overwrite) - { - SQLGetPrivateProfileString(DSN, INI_TRUEISMINUS1, "", temp, sizeof(temp), ODBC_INI); - if (temp[0]) - ci->true_is_minus1 = atoi(temp); - } - - if (ci->int8_as < -100 || overwrite) - { - SQLGetPrivateProfileString(DSN, INI_INT8AS, "", temp, sizeof(temp), ODBC_INI); - if (temp[0]) - ci->int8_as = atoi(temp); - } - - /* Allow override of odbcinst.ini parameters here */ - getCommonDefaults(DSN, ODBC_INI, ci); - - qlog("DSN info: DSN='%s',server='%s',port='%s',dbase='%s',user='%s',passwd='%s'\n", - DSN, - ci->server, - ci->port, - ci->database, - ci->username, - ci->password); - qlog(" onlyread='%s',protocol='%s',showoid='%s',fakeoidindex='%s',showsystable='%s'\n", - ci->onlyread, - ci->protocol, - ci->show_oid_column, - ci->fake_oid_index, - ci->show_system_tables); - -#ifdef MULTIBYTE - check_client_encoding(ci->conn_settings); - qlog(" conn_settings='%s',conn_encoding='%s'\n", - ci->conn_settings, - check_client_encoding(ci->conn_settings)); -#else - qlog(" conn_settings='%s'\n", - ci->conn_settings); -#endif - - qlog(" translation_dll='%s',translation_option='%s'\n", - ci->translation_dll, - ci->translation_option); -} - -/* - * This function writes any global parameters (that can be manipulated) - * to the ODBCINST.INI portion of the registry - */ -void -writeDriverCommoninfo(const ConnInfo *ci) -{ - const char *sectionName; - const char *fileName; - const GLOBAL_VALUES *comval; - char tmp[128]; - - if (ci) - if (ci->dsn && ci->dsn[0]) - { - mylog("DSN=%s updating\n", ci->dsn); - comval = &(ci->drivers); - sectionName = ci->dsn; - fileName = ODBC_INI; - } - else - { - mylog("ci but dsn==NULL\n"); - return; - } - else - { - mylog("drivers updating\n"); - comval = &globals; - sectionName = DBMS_NAME; - fileName = ODBCINST_INI; - } - sprintf(tmp, "%d", comval->fetch_max); - SQLWritePrivateProfileString(sectionName, - INI_FETCH, tmp, fileName); - - sprintf(tmp, "%d", comval->commlog); - SQLWritePrivateProfileString(sectionName, - INI_COMMLOG, tmp, fileName); - - sprintf(tmp, "%d", comval->debug); - SQLWritePrivateProfileString(sectionName, - INI_DEBUG, tmp, fileName); - - sprintf(tmp, "%d", comval->disable_optimizer); - SQLWritePrivateProfileString(sectionName, - INI_OPTIMIZER, tmp, fileName); - - sprintf(tmp, "%d", comval->ksqo); - SQLWritePrivateProfileString(sectionName, - INI_KSQO, tmp, fileName); - - sprintf(tmp, "%d", comval->unique_index); - SQLWritePrivateProfileString(sectionName, INI_UNIQUEINDEX, tmp, fileName); - /* - * Never update the onlyread from this module. - */ - if (!ci) - { - sprintf(tmp, "%d", comval->onlyread); - SQLWritePrivateProfileString(sectionName, INI_READONLY, tmp, - fileName); - } - - sprintf(tmp, "%d", comval->use_declarefetch); - SQLWritePrivateProfileString(sectionName, - INI_USEDECLAREFETCH, tmp, fileName); - - sprintf(tmp, "%d", comval->unknown_sizes); - SQLWritePrivateProfileString(sectionName, - INI_UNKNOWNSIZES, tmp, fileName); - - sprintf(tmp, "%d", comval->text_as_longvarchar); - SQLWritePrivateProfileString(sectionName, - INI_TEXTASLONGVARCHAR, tmp, fileName); - - sprintf(tmp, "%d", comval->unknowns_as_longvarchar); - SQLWritePrivateProfileString(sectionName, - INI_UNKNOWNSASLONGVARCHAR, tmp, fileName); - - sprintf(tmp, "%d", comval->bools_as_char); - SQLWritePrivateProfileString(sectionName, - INI_BOOLSASCHAR, tmp, fileName); - - sprintf(tmp, "%d", comval->parse); - SQLWritePrivateProfileString(sectionName, - INI_PARSE, tmp, fileName); - - sprintf(tmp, "%d", comval->cancel_as_freestmt); - SQLWritePrivateProfileString(sectionName, - INI_CANCELASFREESTMT, tmp, fileName); - - sprintf(tmp, "%d", comval->max_varchar_size); - SQLWritePrivateProfileString(sectionName, - INI_MAXVARCHARSIZE, tmp, fileName); - - sprintf(tmp, "%d", comval->max_longvarchar_size); - SQLWritePrivateProfileString(sectionName, - INI_MAXLONGVARCHARSIZE, tmp, fileName); - - SQLWritePrivateProfileString(sectionName, - INI_EXTRASYSTABLEPREFIXES, comval->extra_systable_prefixes, fileName); - - /* - * Never update the conn_setting from this module - * SQLWritePrivateProfileString(sectionName, INI_CONNSETTINGS, - * comval->conn_settings, fileName); - */ -} - -/* This is for datasource based options only */ -void -writeDSNinfo(const ConnInfo *ci) -{ - const char *DSN = ci->dsn; - char encoded_conn_settings[LARGE_REGISTRY_LEN], - temp[SMALL_REGISTRY_LEN]; - - encode(ci->conn_settings, encoded_conn_settings); - - SQLWritePrivateProfileString(DSN, - INI_KDESC, - ci->desc, - ODBC_INI); - - SQLWritePrivateProfileString(DSN, - INI_DATABASE, - ci->database, - ODBC_INI); - - SQLWritePrivateProfileString(DSN, - INI_SERVER, - ci->server, - ODBC_INI); - - SQLWritePrivateProfileString(DSN, - INI_PORT, - ci->port, - ODBC_INI); - - SQLWritePrivateProfileString(DSN, - INI_USER, - ci->username, - ODBC_INI); - - SQLWritePrivateProfileString(DSN, - INI_PASSWORD, - ci->password, - ODBC_INI); - - SQLWritePrivateProfileString(DSN, - INI_READONLY, - ci->onlyread, - ODBC_INI); - - SQLWritePrivateProfileString(DSN, - INI_SHOWOIDCOLUMN, - ci->show_oid_column, - ODBC_INI); - - SQLWritePrivateProfileString(DSN, - INI_FAKEOIDINDEX, - ci->fake_oid_index, - ODBC_INI); - - SQLWritePrivateProfileString(DSN, - INI_ROWVERSIONING, - ci->row_versioning, - ODBC_INI); - - SQLWritePrivateProfileString(DSN, - INI_SHOWSYSTEMTABLES, - ci->show_system_tables, - ODBC_INI); - - SQLWritePrivateProfileString(DSN, - INI_PROTOCOL, - ci->protocol, - ODBC_INI); - - SQLWritePrivateProfileString(DSN, - INI_CONNSETTINGS, - encoded_conn_settings, - ODBC_INI); - - sprintf(temp, "%d", ci->disallow_premature); - SQLWritePrivateProfileString(DSN, - INI_DISALLOWPREMATURE, - temp, - ODBC_INI); - sprintf(temp, "%d", ci->allow_keyset); - SQLWritePrivateProfileString(DSN, - INI_UPDATABLECURSORS, - temp, - ODBC_INI); - sprintf(temp, "%d", ci->lf_conversion); - SQLWritePrivateProfileString(DSN, - INI_LFCONVERSION, - temp, - ODBC_INI); - sprintf(temp, "%d", ci->true_is_minus1); - SQLWritePrivateProfileString(DSN, - INI_TRUEISMINUS1, - temp, - ODBC_INI); - sprintf(temp, "%d", ci->int8_as); - SQLWritePrivateProfileString(DSN, - INI_INT8AS, - temp, - ODBC_INI); -} - - -/* - * This function reads the ODBCINST.INI portion of - * the registry and gets any driver defaults. - */ -void -getCommonDefaults(const char *section, const char *filename, ConnInfo *ci) -{ - char temp[256]; - GLOBAL_VALUES *comval; - - if (ci) - comval = &(ci->drivers); - else - comval = &globals; - /* Fetch Count is stored in driver section */ - SQLGetPrivateProfileString(section, INI_FETCH, "", - temp, sizeof(temp), filename); - if (temp[0]) - { - comval->fetch_max = atoi(temp); - /* sanity check if using cursors */ - if (comval->fetch_max <= 0) - comval->fetch_max = FETCH_MAX; - } - else if (!ci) - comval->fetch_max = FETCH_MAX; - - /* Socket Buffersize is stored in driver section */ - SQLGetPrivateProfileString(section, INI_SOCKET, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->socket_buffersize = atoi(temp); - else if (!ci) - comval->socket_buffersize = SOCK_BUFFER_SIZE; - - /* Debug is stored in the driver section */ - SQLGetPrivateProfileString(section, INI_DEBUG, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->debug = atoi(temp); - else if (!ci) - comval->debug = DEFAULT_DEBUG; - - /* CommLog is stored in the driver section */ - SQLGetPrivateProfileString(section, INI_COMMLOG, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->commlog = atoi(temp); - else if (!ci) - comval->commlog = DEFAULT_COMMLOG; - - if (!ci) - logs_on_off(0, 0, 0); - /* Optimizer is stored in the driver section only */ - SQLGetPrivateProfileString(section, INI_OPTIMIZER, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->disable_optimizer = atoi(temp); - else if (!ci) - comval->disable_optimizer = DEFAULT_OPTIMIZER; - - /* KSQO is stored in the driver section only */ - SQLGetPrivateProfileString(section, INI_KSQO, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->ksqo = atoi(temp); - else if (!ci) - comval->ksqo = DEFAULT_KSQO; - - /* Recognize Unique Index is stored in the driver section only */ - SQLGetPrivateProfileString(section, INI_UNIQUEINDEX, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->unique_index = atoi(temp); - else if (!ci) - comval->unique_index = DEFAULT_UNIQUEINDEX; - - - /* Unknown Sizes is stored in the driver section only */ - SQLGetPrivateProfileString(section, INI_UNKNOWNSIZES, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->unknown_sizes = atoi(temp); - else if (!ci) - comval->unknown_sizes = DEFAULT_UNKNOWNSIZES; - - - /* Lie about supported functions? */ - SQLGetPrivateProfileString(section, INI_LIE, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->lie = atoi(temp); - else if (!ci) - comval->lie = DEFAULT_LIE; - - /* Parse statements */ - SQLGetPrivateProfileString(section, INI_PARSE, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->parse = atoi(temp); - else if (!ci) - comval->parse = DEFAULT_PARSE; - - /* SQLCancel calls SQLFreeStmt in Driver Manager */ - SQLGetPrivateProfileString(section, INI_CANCELASFREESTMT, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->cancel_as_freestmt = atoi(temp); - else if (!ci) - comval->cancel_as_freestmt = DEFAULT_CANCELASFREESTMT; - - /* UseDeclareFetch is stored in the driver section only */ - SQLGetPrivateProfileString(section, INI_USEDECLAREFETCH, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->use_declarefetch = atoi(temp); - else if (!ci) - comval->use_declarefetch = DEFAULT_USEDECLAREFETCH; - - /* Max Varchar Size */ - SQLGetPrivateProfileString(section, INI_MAXVARCHARSIZE, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->max_varchar_size = atoi(temp); - else if (!ci) - comval->max_varchar_size = MAX_VARCHAR_SIZE; - - /* Max TextField Size */ - SQLGetPrivateProfileString(section, INI_MAXLONGVARCHARSIZE, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->max_longvarchar_size = atoi(temp); - else if (!ci) - comval->max_longvarchar_size = TEXT_FIELD_SIZE; - - /* Text As LongVarchar */ - SQLGetPrivateProfileString(section, INI_TEXTASLONGVARCHAR, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->text_as_longvarchar = atoi(temp); - else if (!ci) - comval->text_as_longvarchar = DEFAULT_TEXTASLONGVARCHAR; - - /* Unknowns As LongVarchar */ - SQLGetPrivateProfileString(section, INI_UNKNOWNSASLONGVARCHAR, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->unknowns_as_longvarchar = atoi(temp); - else if (!ci) - comval->unknowns_as_longvarchar = DEFAULT_UNKNOWNSASLONGVARCHAR; - - /* Bools As Char */ - SQLGetPrivateProfileString(section, INI_BOOLSASCHAR, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->bools_as_char = atoi(temp); - else if (!ci) - comval->bools_as_char = DEFAULT_BOOLSASCHAR; - - /* Extra Systable prefixes */ - - /* - * Use @@@ to distinguish between blank extra prefixes and no key - * entry - */ - SQLGetPrivateProfileString(section, INI_EXTRASYSTABLEPREFIXES, "@@@", - temp, sizeof(temp), filename); - if (strcmp(temp, "@@@")) - strcpy(comval->extra_systable_prefixes, temp); - else if (!ci) - strcpy(comval->extra_systable_prefixes, DEFAULT_EXTRASYSTABLEPREFIXES); - - mylog("globals.extra_systable_prefixes = '%s'\n", comval->extra_systable_prefixes); - - - /* Dont allow override of an override! */ - if (!ci) - { - /* - * ConnSettings is stored in the driver section and per datasource - * for override - */ - SQLGetPrivateProfileString(section, INI_CONNSETTINGS, "", - comval->conn_settings, sizeof(comval->conn_settings), filename); - - /* Default state for future DSN's Readonly attribute */ - SQLGetPrivateProfileString(section, INI_READONLY, "", - temp, sizeof(temp), filename); - if (temp[0]) - comval->onlyread = atoi(temp); - else - comval->onlyread = DEFAULT_READONLY; - - /* - * Default state for future DSN's protocol attribute This isn't a - * real driver option YET. This is more intended for - * customization from the install. - */ - SQLGetPrivateProfileString(section, INI_PROTOCOL, "@@@", - temp, sizeof(temp), filename); - if (strcmp(temp, "@@@")) - strcpy(comval->protocol, temp); - else - strcpy(comval->protocol, DEFAULT_PROTOCOL); - } -} |