Commit 89d6f680 authored by Hiroshi Inoue's avatar Hiroshi Inoue

Add *Int8 As* option.

parent 52069570
...@@ -240,6 +240,7 @@ CC_conninfo_init(ConnInfo *conninfo) ...@@ -240,6 +240,7 @@ CC_conninfo_init(ConnInfo *conninfo)
conninfo->allow_keyset = -1; conninfo->allow_keyset = -1;
conninfo->lf_conversion = -1; conninfo->lf_conversion = -1;
conninfo->true_is_minus1 = -1; conninfo->true_is_minus1 = -1;
conninfo->int8_as = -101;
memcpy(&(conninfo->drivers), &globals, sizeof(globals)); memcpy(&(conninfo->drivers), &globals, sizeof(globals));
} }
/* /*
...@@ -298,6 +299,7 @@ CC_Constructor() ...@@ -298,6 +299,7 @@ CC_Constructor()
rv->client_encoding = NULL; rv->client_encoding = NULL;
rv->server_encoding = NULL; rv->server_encoding = NULL;
#endif /* MULTIBYTE */ #endif /* MULTIBYTE */
rv->current_schema = NULL;
/* Initialize statement options to defaults */ /* Initialize statement options to defaults */
...@@ -503,6 +505,9 @@ CC_cleanup(ConnectionClass *self) ...@@ -503,6 +505,9 @@ CC_cleanup(ConnectionClass *self)
free(self->server_encoding); free(self->server_encoding);
self->server_encoding = NULL; self->server_encoding = NULL;
#endif /* MULTIBYTE */ #endif /* MULTIBYTE */
if (self->current_schema)
free(self->current_schema);
self->current_schema = NULL;
/* Free cached table info */ /* Free cached table info */
if (self->col_info) if (self->col_info)
{ {
...@@ -513,6 +518,8 @@ CC_cleanup(ConnectionClass *self) ...@@ -513,6 +518,8 @@ CC_cleanup(ConnectionClass *self)
if (self->col_info[i]->result) /* Free the SQLColumns result structure */ if (self->col_info[i]->result) /* Free the SQLColumns result structure */
QR_Destructor(self->col_info[i]->result); QR_Destructor(self->col_info[i]->result);
if (self->col_info[i]->schema)
free(self->col_info[i]->schema);
free(self->col_info[i]); free(self->col_info[i]);
} }
free(self->col_info); free(self->col_info);
...@@ -986,6 +993,9 @@ another_version_retry: ...@@ -986,6 +993,9 @@ another_version_retry:
} }
} }
} }
#else
{
}
#endif /* UNICODE_SUPPORT */ #endif /* UNICODE_SUPPORT */
} }
#ifdef UNICODE_SUPPORT #ifdef UNICODE_SUPPORT
...@@ -2046,6 +2056,27 @@ CC_get_max_query_len(const ConnectionClass *conn) ...@@ -2046,6 +2056,27 @@ CC_get_max_query_len(const ConnectionClass *conn)
return value; return value;
} }
/*
* This deosn't really return the CURRENT SCHEMA
* but there's no alternative.
*/
const char *
CC_get_current_schema(ConnectionClass *conn)
{
if (!conn->current_schema && conn->schema_support)
{
QResultClass *res;
if (res = CC_send_query(conn, "select current_schema()", NULL, CLEAR_RESULT_ON_ABORT), res)
{
if (QR_get_num_total_tuples(res) == 1)
conn->current_schema = strdup(QR_get_value_backend_row(res, 0, 0));
QR_Destructor(res);
}
}
return (const char *) conn->current_schema;
}
int int
CC_send_cancel_request(const ConnectionClass *conn) CC_send_cancel_request(const ConnectionClass *conn)
{ {
......
...@@ -170,6 +170,7 @@ typedef struct ...@@ -170,6 +170,7 @@ typedef struct
char updatable_cursors; char updatable_cursors;
char lf_conversion; char lf_conversion;
char true_is_minus1; char true_is_minus1;
char int8_as;
GLOBAL_VALUES drivers; /* moved from driver's option */ GLOBAL_VALUES drivers; /* moved from driver's option */
} ConnInfo; } ConnInfo;
...@@ -219,6 +220,7 @@ typedef struct ...@@ -219,6 +220,7 @@ typedef struct
struct col_info struct col_info
{ {
QResultClass *result; QResultClass *result;
char *schema;
char name[MAX_TABLE_LEN + 1]; char name[MAX_TABLE_LEN + 1];
}; };
...@@ -298,6 +300,7 @@ struct ConnectionClass_ ...@@ -298,6 +300,7 @@ struct ConnectionClass_
int be_pid; /* pid returned by backend */ int be_pid; /* pid returned by backend */
int be_key; /* auth code needed to send cancel */ int be_key; /* auth code needed to send cancel */
UInt4 isolation; UInt4 isolation;
char *current_schema;
}; };
...@@ -343,6 +346,7 @@ int CC_send_cancel_request(const ConnectionClass *conn); ...@@ -343,6 +346,7 @@ int CC_send_cancel_request(const ConnectionClass *conn);
void CC_on_commit(ConnectionClass *conn); void CC_on_commit(ConnectionClass *conn);
void CC_on_abort(ConnectionClass *conn, UDWORD opt); void CC_on_abort(ConnectionClass *conn, UDWORD opt);
void ProcessRollback(ConnectionClass *conn, BOOL undo); void ProcessRollback(ConnectionClass *conn, BOOL undo);
const char *CC_get_current_schema(ConnectionClass *conn);
/* CC_send_query options */ /* CC_send_query options */
#define CLEAR_RESULT_ON_ABORT 1L #define CLEAR_RESULT_ON_ABORT 1L
......
...@@ -497,7 +497,6 @@ copy_and_convert_field(StatementClass *stmt, Int4 field_type, void *value, Int2 ...@@ -497,7 +497,6 @@ copy_and_convert_field(StatementClass *stmt, Int4 field_type, void *value, Int2
*/ */
bZone = FALSE; /* time zone stuff is unreliable */ bZone = FALSE; /* time zone stuff is unreliable */
timestamp2stime(value, &st, &bZone, &zone); timestamp2stime(value, &st, &bZone, &zone);
inolog("2stime fr=%d\n", st.fr);
} }
else else
{ {
...@@ -1096,7 +1095,6 @@ inolog("2stime fr=%d\n", st.fr); ...@@ -1096,7 +1095,6 @@ inolog("2stime fr=%d\n", st.fr);
case SQL_C_ULONG: case SQL_C_ULONG:
len = 4; len = 4;
inolog("rgb=%x + %d, pcb=%x, set %s\n", rgbValue, bind_row * bind_size, pcbValue, neut_str);
if (bind_size > 0) if (bind_size > 0)
*(UDWORD *) ((char *) rgbValue + (bind_row * bind_size)) = atol(neut_str); *(UDWORD *) ((char *) rgbValue + (bind_row * bind_size)) = atol(neut_str);
else else
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Comments: See "notice.txt" for copyright and license information. * Comments: See "notice.txt" for copyright and license information.
* *
* $Id: descriptor.h,v 1.5 2002/05/22 05:51:03 inoue Exp $ * $Id: descriptor.h,v 1.6 2002/06/06 04:50:47 inoue Exp $
* *
*/ */
...@@ -41,6 +41,7 @@ typedef struct ...@@ -41,6 +41,7 @@ typedef struct
char dot[MAX_TABLE_LEN + 1]; char dot[MAX_TABLE_LEN + 1];
char name[MAX_COLUMN_LEN + 1]; char name[MAX_COLUMN_LEN + 1];
char alias[MAX_COLUMN_LEN + 1]; char alias[MAX_COLUMN_LEN + 1];
char *schema;
} FIELD_INFO; } FIELD_INFO;
Int4 FI_precision(const FIELD_INFO *); Int4 FI_precision(const FIELD_INFO *);
Int4 FI_scale(const FIELD_INFO *); Int4 FI_scale(const FIELD_INFO *);
......
...@@ -38,483 +38,6 @@ ...@@ -38,483 +38,6 @@
extern GLOBAL_VALUES globals; extern GLOBAL_VALUES globals;
#ifdef WIN32
static int driver_optionsDraw(HWND, const ConnInfo *, int src, BOOL enable);
static int driver_options_update(HWND hdlg, ConnInfo *ci, BOOL);
static void updateCommons(const ConnInfo *ci);
#endif
#ifdef WIN32
void
SetDlgStuff(HWND hdlg, const ConnInfo *ci)
{
/*
* If driver attribute NOT present, then set the datasource name and
* description
*/
if (ci->driver[0] == '\0')
{
SetDlgItemText(hdlg, IDC_DSNAME, ci->dsn);
SetDlgItemText(hdlg, IDC_DESC, ci->desc);
}
SetDlgItemText(hdlg, IDC_DATABASE, ci->database);
SetDlgItemText(hdlg, IDC_SERVER, ci->server);
SetDlgItemText(hdlg, IDC_USER, ci->username);
SetDlgItemText(hdlg, IDC_PASSWORD, ci->password);
SetDlgItemText(hdlg, IDC_PORT, ci->port);
}
void
GetDlgStuff(HWND hdlg, ConnInfo *ci)
{
GetDlgItemText(hdlg, IDC_DESC, ci->desc, sizeof(ci->desc));
GetDlgItemText(hdlg, IDC_DATABASE, ci->database, sizeof(ci->database));
GetDlgItemText(hdlg, IDC_SERVER, ci->server, sizeof(ci->server));
GetDlgItemText(hdlg, IDC_USER, ci->username, sizeof(ci->username));
GetDlgItemText(hdlg, IDC_PASSWORD, ci->password, sizeof(ci->password));
GetDlgItemText(hdlg, IDC_PORT, ci->port, sizeof(ci->port));
}
static int
driver_optionsDraw(HWND hdlg, const ConnInfo *ci, int src, BOOL enable)
{
const GLOBAL_VALUES *comval;
static BOOL defset = FALSE;
static GLOBAL_VALUES defval;
switch (src)
{
case 0: /* driver common */
comval = &globals;
break;
case 1: /* dsn specific */
comval = &(ci->drivers);
break;
case 2: /* default */
if (!defset)
{
defval.commlog = DEFAULT_COMMLOG;
defval.disable_optimizer = DEFAULT_OPTIMIZER;
defval.ksqo = DEFAULT_KSQO;
defval.unique_index = DEFAULT_UNIQUEINDEX;
defval.onlyread = DEFAULT_READONLY;
defval.use_declarefetch = DEFAULT_USEDECLAREFETCH;
defval.parse = DEFAULT_PARSE;
defval.cancel_as_freestmt = DEFAULT_CANCELASFREESTMT;
defval.debug = DEFAULT_DEBUG;
/* Unknown Sizes */
defval.unknown_sizes = DEFAULT_UNKNOWNSIZES;
defval.text_as_longvarchar = DEFAULT_TEXTASLONGVARCHAR;
defval.unknowns_as_longvarchar = DEFAULT_UNKNOWNSASLONGVARCHAR;
defval.bools_as_char = DEFAULT_BOOLSASCHAR;
}
defset = TRUE;
comval = &defval;
break;
}
CheckDlgButton(hdlg, DRV_COMMLOG, comval->commlog);
#ifndef Q_LOG
EnableWindow(GetDlgItem(hdlg, DRV_COMMLOG), FALSE);
#endif /* Q_LOG */
CheckDlgButton(hdlg, DRV_OPTIMIZER, comval->disable_optimizer);
CheckDlgButton(hdlg, DRV_KSQO, comval->ksqo);
CheckDlgButton(hdlg, DRV_UNIQUEINDEX, comval->unique_index);
/* EnableWindow(GetDlgItem(hdlg, DRV_UNIQUEINDEX), enable); */
CheckDlgButton(hdlg, DRV_READONLY, comval->onlyread);
EnableWindow(GetDlgItem(hdlg, DRV_READONLY), enable);
CheckDlgButton(hdlg, DRV_USEDECLAREFETCH, comval->use_declarefetch);
/* Unknown Sizes clear */
CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 0);
CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 0);
CheckDlgButton(hdlg, DRV_UNKNOWN_MAX, 0);
/* Unknown (Default) Data Type sizes */
switch (comval->unknown_sizes)
{
case UNKNOWNS_AS_DONTKNOW:
CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 1);
break;
case UNKNOWNS_AS_LONGEST:
CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 1);
break;
case UNKNOWNS_AS_MAX:
default:
CheckDlgButton(hdlg, DRV_UNKNOWN_MAX, 1);
break;
}
CheckDlgButton(hdlg, DRV_TEXT_LONGVARCHAR, comval->text_as_longvarchar);
CheckDlgButton(hdlg, DRV_UNKNOWNS_LONGVARCHAR, comval->unknowns_as_longvarchar);
CheckDlgButton(hdlg, DRV_BOOLS_CHAR, comval->bools_as_char);
CheckDlgButton(hdlg, DRV_PARSE, comval->parse);
CheckDlgButton(hdlg, DRV_CANCELASFREESTMT, comval->cancel_as_freestmt);
CheckDlgButton(hdlg, DRV_DEBUG, comval->debug);
#ifndef MY_LOG
EnableWindow(GetDlgItem(hdlg, DRV_DEBUG), FALSE);
#endif /* MY_LOG */
SetDlgItemInt(hdlg, DRV_CACHE_SIZE, comval->fetch_max, FALSE);
SetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, comval->max_varchar_size, FALSE);
SetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, comval->max_longvarchar_size, TRUE);
SetDlgItemText(hdlg, DRV_EXTRASYSTABLEPREFIXES, comval->extra_systable_prefixes);
/* Driver Connection Settings */
SetDlgItemText(hdlg, DRV_CONNSETTINGS, comval->conn_settings);
EnableWindow(GetDlgItem(hdlg, DRV_CONNSETTINGS), enable);
return 0;
}
static int
driver_options_update(HWND hdlg, ConnInfo *ci, BOOL updateProfile)
{
GLOBAL_VALUES *comval;
if (ci)
comval = &(ci->drivers);
else
comval = &globals;
comval->commlog = IsDlgButtonChecked(hdlg, DRV_COMMLOG);
comval->disable_optimizer = IsDlgButtonChecked(hdlg, DRV_OPTIMIZER);
comval->ksqo = IsDlgButtonChecked(hdlg, DRV_KSQO);
comval->unique_index = IsDlgButtonChecked(hdlg, DRV_UNIQUEINDEX);
if (!ci)
{
comval->onlyread = IsDlgButtonChecked(hdlg, DRV_READONLY);
}
comval->use_declarefetch = IsDlgButtonChecked(hdlg, DRV_USEDECLAREFETCH);
/* Unknown (Default) Data Type sizes */
if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_MAX))
comval->unknown_sizes = UNKNOWNS_AS_MAX;
else if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_DONTKNOW))
comval->unknown_sizes = UNKNOWNS_AS_DONTKNOW;
else if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_LONGEST))
comval->unknown_sizes = UNKNOWNS_AS_LONGEST;
else
comval->unknown_sizes = UNKNOWNS_AS_MAX;
comval->text_as_longvarchar = IsDlgButtonChecked(hdlg, DRV_TEXT_LONGVARCHAR);
comval->unknowns_as_longvarchar = IsDlgButtonChecked(hdlg, DRV_UNKNOWNS_LONGVARCHAR);
comval->bools_as_char = IsDlgButtonChecked(hdlg, DRV_BOOLS_CHAR);
comval->parse = IsDlgButtonChecked(hdlg, DRV_PARSE);
comval->cancel_as_freestmt = IsDlgButtonChecked(hdlg, DRV_CANCELASFREESTMT);
comval->debug = IsDlgButtonChecked(hdlg, DRV_DEBUG);
comval->fetch_max = GetDlgItemInt(hdlg, DRV_CACHE_SIZE, NULL, FALSE);
comval->max_varchar_size = GetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, NULL, FALSE);
comval->max_longvarchar_size = GetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, NULL, TRUE); /* allows for
* SQL_NO_TOTAL */
GetDlgItemText(hdlg, DRV_EXTRASYSTABLEPREFIXES, comval->extra_systable_prefixes, sizeof(comval->extra_systable_prefixes));
/* Driver Connection Settings */
if (!ci)
GetDlgItemText(hdlg, DRV_CONNSETTINGS, comval->conn_settings, sizeof(comval->conn_settings));
if (updateProfile)
updateCommons(ci);
/* fall through */
return 0;
}
int CALLBACK
driver_optionsProc(HWND hdlg,
UINT wMsg,
WPARAM wParam,
LPARAM lParam)
{
ConnInfo *ci;
switch (wMsg)
{
case WM_INITDIALOG:
SetWindowLong(hdlg, DWL_USER, lParam); /* save for OK etc */
ci = (ConnInfo *) lParam;
CheckDlgButton(hdlg, DRV_OR_DSN, 0);
if (ci && ci->dsn && ci->dsn[0])
SetWindowText(hdlg, "Advanced Options (per DSN)");
else
{
SetWindowText(hdlg, "Advanced Options (Connection)");
ShowWindow(GetDlgItem(hdlg, DRV_OR_DSN), SW_HIDE);
}
driver_optionsDraw(hdlg, ci, 1, FALSE);
break;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case IDOK:
ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
driver_options_update(hdlg, IsDlgButtonChecked(hdlg, DRV_OR_DSN) ? NULL : ci,
ci && ci->dsn && ci->dsn[0]);
case IDCANCEL:
EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);
return TRUE;
case IDDEFAULTS:
if (IsDlgButtonChecked(hdlg, DRV_OR_DSN))
driver_optionsDraw(hdlg, NULL, 2, TRUE);
else
{
ConnInfo *ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
driver_optionsDraw(hdlg, ci, 0, FALSE);
}
break;
case DRV_OR_DSN:
if (GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED)
{
mylog("DRV_OR_DSN clicked\n");
if (IsDlgButtonChecked(hdlg, DRV_OR_DSN))
{
SetWindowText(hdlg, "Advanced Options (Common)");
driver_optionsDraw(hdlg, NULL, 0, TRUE);
}
else
{
ConnInfo *ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
SetWindowText(hdlg, "Advanced Options (per DSN)");
driver_optionsDraw(hdlg, ci, ci ? 1 : 0, ci == NULL);
}
}
break;
}
}
return FALSE;
}
int CALLBACK
ds_optionsProc(HWND hdlg,
UINT wMsg,
WPARAM wParam,
LPARAM lParam)
{
ConnInfo *ci;
char buf[128];
switch (wMsg)
{
case WM_INITDIALOG:
ci = (ConnInfo *) lParam;
SetWindowLong(hdlg, DWL_USER, lParam); /* save for OK */
/* Change window caption */
if (ci->driver[0])
SetWindowText(hdlg, "Advanced Options (Connection)");
else
{
sprintf(buf, "Advanced Options (%s)", ci->dsn);
SetWindowText(hdlg, buf);
}
/* Readonly */
CheckDlgButton(hdlg, DS_READONLY, atoi(ci->onlyread));
/* Protocol */
if (strncmp(ci->protocol, PG62, strlen(PG62)) == 0)
CheckDlgButton(hdlg, DS_PG62, 1);
else if (strncmp(ci->protocol, PG63, strlen(PG63)) == 0)
CheckDlgButton(hdlg, DS_PG63, 1);
else
/* latest */
CheckDlgButton(hdlg, DS_PG64, 1);
CheckDlgButton(hdlg, DS_SHOWOIDCOLUMN, atoi(ci->show_oid_column));
CheckDlgButton(hdlg, DS_FAKEOIDINDEX, atoi(ci->fake_oid_index));
CheckDlgButton(hdlg, DS_ROWVERSIONING, atoi(ci->row_versioning));
CheckDlgButton(hdlg, DS_SHOWSYSTEMTABLES, atoi(ci->show_system_tables));
CheckDlgButton(hdlg, DS_DISALLOWPREMATURE, ci->disallow_premature);
CheckDlgButton(hdlg, DS_LFCONVERSION, ci->lf_conversion);
CheckDlgButton(hdlg, DS_TRUEISMINUS1, ci->true_is_minus1);
CheckDlgButton(hdlg, DS_UPDATABLECURSORS, ci->allow_keyset);
#ifndef DRIVER_CURSOR_IMPLEMENT
EnableWindow(GetDlgItem(hdlg, DS_UPDATABLECURSORS), FALSE);
#endif /* DRIVER_CURSOR_IMPLEMENT */
EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), atoi(ci->show_oid_column));
/* Datasource Connection Settings */
SetDlgItemText(hdlg, DS_CONNSETTINGS, ci->conn_settings);
break;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case DS_SHOWOIDCOLUMN:
mylog("WM_COMMAND: DS_SHOWOIDCOLUMN\n");
EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), IsDlgButtonChecked(hdlg, DS_SHOWOIDCOLUMN));
return TRUE;
case IDOK:
ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
mylog("IDOK: got ci = %u\n", ci);
/* Readonly */
sprintf(ci->onlyread, "%d", IsDlgButtonChecked(hdlg, DS_READONLY));
/* Protocol */
if (IsDlgButtonChecked(hdlg, DS_PG62))
strcpy(ci->protocol, PG62);
else if (IsDlgButtonChecked(hdlg, DS_PG63))
strcpy(ci->protocol, PG63);
else
/* latest */
strcpy(ci->protocol, PG64);
sprintf(ci->show_system_tables, "%d", IsDlgButtonChecked(hdlg, DS_SHOWSYSTEMTABLES));
sprintf(ci->row_versioning, "%d", IsDlgButtonChecked(hdlg, DS_ROWVERSIONING));
ci->disallow_premature = IsDlgButtonChecked(hdlg, DS_DISALLOWPREMATURE);
ci->lf_conversion = IsDlgButtonChecked(hdlg, DS_LFCONVERSION);
ci->true_is_minus1 = IsDlgButtonChecked(hdlg, DS_TRUEISMINUS1);
#ifdef DRIVER_CURSOR_IMPLEMENT
ci->allow_keyset = IsDlgButtonChecked(hdlg, DS_UPDATABLECURSORS);
#endif /* DRIVER_CURSOR_IMPLEMENT */
/* OID Options */
sprintf(ci->fake_oid_index, "%d", IsDlgButtonChecked(hdlg, DS_FAKEOIDINDEX));
sprintf(ci->show_oid_column, "%d", IsDlgButtonChecked(hdlg, DS_SHOWOIDCOLUMN));
/* Datasource Connection Settings */
GetDlgItemText(hdlg, DS_CONNSETTINGS, ci->conn_settings, sizeof(ci->conn_settings));
/* fall through */
case IDCANCEL:
EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);
return TRUE;
}
}
return FALSE;
}
/*
* This function writes any global parameters (that can be manipulated)
* to the ODBCINST.INI portion of the registry
*/
static void
updateCommons(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);
*/
}
#endif /* WIN32 */
void void
makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len) makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len)
{ {
...@@ -540,7 +63,7 @@ makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len) ...@@ -540,7 +63,7 @@ makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len)
hlen = strlen(connect_string); hlen = strlen(connect_string);
if (!abbrev) if (!abbrev)
sprintf(&connect_string[hlen], 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=%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, INI_READONLY,
ci->onlyread, ci->onlyread,
INI_PROTOCOL, INI_PROTOCOL,
...@@ -594,6 +117,8 @@ makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len) ...@@ -594,6 +117,8 @@ makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len)
INI_DISALLOWPREMATURE, INI_DISALLOWPREMATURE,
ci->disallow_premature, ci->disallow_premature,
INI_TRUEISMINUS1, INI_TRUEISMINUS1,
ci->true_is_minus1,
INI_INT8AS,
ci->true_is_minus1); ci->true_is_minus1);
/* Abbrebiation is needed ? */ /* Abbrebiation is needed ? */
if (abbrev || strlen(connect_string) >= len) if (abbrev || strlen(connect_string) >= len)
...@@ -654,12 +179,14 @@ makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len) ...@@ -654,12 +179,14 @@ makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len)
flag |= BIT_TRUEISMINUS1; flag |= BIT_TRUEISMINUS1;
sprintf(&connect_string[hlen], sprintf(&connect_string[hlen],
";A6=%s;A7=%d;A8=%d;B0=%d;B1=%d;C2=%s;CX=%02x%lx", ";A6=%s;A7=%d;A8=%d;B0=%d;B1=%d;%s=%d;C2=%s;CX=%02x%lx",
encoded_conn_settings, encoded_conn_settings,
ci->drivers.fetch_max, ci->drivers.fetch_max,
ci->drivers.socket_buffersize, ci->drivers.socket_buffersize,
ci->drivers.max_varchar_size, ci->drivers.max_varchar_size,
ci->drivers.max_longvarchar_size, ci->drivers.max_longvarchar_size,
INI_INT8AS,
ci->int8_as,
ci->drivers.extra_systable_prefixes, ci->drivers.extra_systable_prefixes,
EFFECTIVE_BIT_COUNT, EFFECTIVE_BIT_COUNT,
flag); flag);
...@@ -775,6 +302,8 @@ copyAttributes(ConnInfo *ci, const char *attribute, const char *value) ...@@ -775,6 +302,8 @@ copyAttributes(ConnInfo *ci, const char *attribute, const char *value)
ci->lf_conversion = atoi(value); ci->lf_conversion = atoi(value);
else if (stricmp(attribute, INI_TRUEISMINUS1) == 0) else if (stricmp(attribute, INI_TRUEISMINUS1) == 0)
ci->true_is_minus1 = atoi(value); ci->true_is_minus1 = atoi(value);
else if (stricmp(attribute, INI_INT8AS) == 0)
ci->int8_as = atoi(value);
else if (stricmp(attribute, "CX") == 0) else if (stricmp(attribute, "CX") == 0)
unfoldCXAttribute(ci, value); unfoldCXAttribute(ci, value);
...@@ -876,6 +405,8 @@ getDSNdefaults(ConnInfo *ci) ...@@ -876,6 +405,8 @@ getDSNdefaults(ConnInfo *ci)
ci->lf_conversion = DEFAULT_LFCONVERSION; ci->lf_conversion = DEFAULT_LFCONVERSION;
if (ci->true_is_minus1 < 0) if (ci->true_is_minus1 < 0)
ci->true_is_minus1 = DEFAULT_TRUEISMINUS1; ci->true_is_minus1 = DEFAULT_TRUEISMINUS1;
if (ci->int8_as < -100)
ci->int8_as = DEFAULT_INT8AS;
} }
...@@ -981,6 +512,13 @@ getDSNinfo(ConnInfo *ci, char overwrite) ...@@ -981,6 +512,13 @@ getDSNinfo(ConnInfo *ci, char overwrite)
ci->true_is_minus1 = atoi(temp); 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 */ /* Allow override of odbcinst.ini parameters here */
getCommonDefaults(DSN, ODBC_INI, ci); getCommonDefaults(DSN, ODBC_INI, ci);
...@@ -1013,6 +551,115 @@ getDSNinfo(ConnInfo *ci, char overwrite) ...@@ -1013,6 +551,115 @@ getDSNinfo(ConnInfo *ci, char overwrite)
ci->translation_option); 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 */ /* This is for datasource based options only */
void void
...@@ -1109,6 +756,11 @@ writeDSNinfo(const ConnInfo *ci) ...@@ -1109,6 +756,11 @@ writeDSNinfo(const ConnInfo *ci)
INI_TRUEISMINUS1, INI_TRUEISMINUS1,
temp, temp,
ODBC_INI); ODBC_INI);
sprintf(temp, "%d", ci->int8_as);
SQLWritePrivateProfileString(DSN,
INI_INT8AS,
temp,
ODBC_INI);
} }
......
...@@ -91,6 +91,7 @@ ...@@ -91,6 +91,7 @@
#define INI_UPDATABLECURSORS "UpdatableCursors" #define INI_UPDATABLECURSORS "UpdatableCursors"
#define INI_LFCONVERSION "LFConversion" #define INI_LFCONVERSION "LFConversion"
#define INI_TRUEISMINUS1 "TrueIsMinus1" #define INI_TRUEISMINUS1 "TrueIsMinus1"
#define INI_INT8AS "BI"
/* Bit representaion for abbreviated connection strings */ /* Bit representaion for abbreviated connection strings */
#define BIT_LFCONVERSION (1L) #define BIT_LFCONVERSION (1L)
#define BIT_UPDATABLECURSORS (1L<<1) #define BIT_UPDATABLECURSORS (1L<<1)
...@@ -160,6 +161,7 @@ ...@@ -160,6 +161,7 @@
#else #else
#define DEFAULT_LFCONVERSION 0 #define DEFAULT_LFCONVERSION 0
#endif /* WIN32 */ #endif /* WIN32 */
#define DEFAULT_INT8AS 0
/* prototypes */ /* prototypes */
void getCommonDefaults(const char *section, const char *filename, ConnInfo *ci); void getCommonDefaults(const char *section, const char *filename, ConnInfo *ci);
...@@ -172,13 +174,18 @@ int CALLBACK driver_optionsProc(HWND hdlg, ...@@ -172,13 +174,18 @@ int CALLBACK driver_optionsProc(HWND hdlg,
UINT wMsg, UINT wMsg,
WPARAM wParam, WPARAM wParam,
LPARAM lParam); LPARAM lParam);
int CALLBACK ds_optionsProc(HWND hdlg, int CALLBACK ds_options1Proc(HWND hdlg,
UINT wMsg,
WPARAM wParam,
LPARAM lParam);
int CALLBACK ds_options2Proc(HWND hdlg,
UINT wMsg, UINT wMsg,
WPARAM wParam, WPARAM wParam,
LPARAM lParam); LPARAM lParam);
#endif /* WIN32 */ #endif /* WIN32 */
void updateGlobals(void); void updateGlobals(void);
void writeDriverCommoninfo(const ConnInfo *ci);
void writeDSNinfo(const ConnInfo *ci); void writeDSNinfo(const ConnInfo *ci);
void getDSNdefaults(ConnInfo *ci); void getDSNdefaults(ConnInfo *ci);
void getDSNinfo(ConnInfo *ci, char overwrite); void getDSNinfo(ConnInfo *ci, char overwrite);
......
#ifdef WIN32
/*-------
* Module: dlg_wingui.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;
extern HINSTANCE NEAR s_hModule;
static int driver_optionsDraw(HWND, const ConnInfo *, int src, BOOL enable);
static int driver_options_update(HWND hdlg, ConnInfo *ci, BOOL);
void
SetDlgStuff(HWND hdlg, const ConnInfo *ci)
{
/*
* If driver attribute NOT present, then set the datasource name and
* description
*/
if (ci->driver[0] == '\0')
{
SetDlgItemText(hdlg, IDC_DSNAME, ci->dsn);
SetDlgItemText(hdlg, IDC_DESC, ci->desc);
}
SetDlgItemText(hdlg, IDC_DATABASE, ci->database);
SetDlgItemText(hdlg, IDC_SERVER, ci->server);
SetDlgItemText(hdlg, IDC_USER, ci->username);
SetDlgItemText(hdlg, IDC_PASSWORD, ci->password);
SetDlgItemText(hdlg, IDC_PORT, ci->port);
}
void
GetDlgStuff(HWND hdlg, ConnInfo *ci)
{
GetDlgItemText(hdlg, IDC_DESC, ci->desc, sizeof(ci->desc));
GetDlgItemText(hdlg, IDC_DATABASE, ci->database, sizeof(ci->database));
GetDlgItemText(hdlg, IDC_SERVER, ci->server, sizeof(ci->server));
GetDlgItemText(hdlg, IDC_USER, ci->username, sizeof(ci->username));
GetDlgItemText(hdlg, IDC_PASSWORD, ci->password, sizeof(ci->password));
GetDlgItemText(hdlg, IDC_PORT, ci->port, sizeof(ci->port));
}
static int
driver_optionsDraw(HWND hdlg, const ConnInfo *ci, int src, BOOL enable)
{
const GLOBAL_VALUES *comval;
static BOOL defset = FALSE;
static GLOBAL_VALUES defval;
switch (src)
{
case 0: /* driver common */
comval = &globals;
break;
case 1: /* dsn specific */
comval = &(ci->drivers);
break;
case 2: /* default */
if (!defset)
{
defval.commlog = DEFAULT_COMMLOG;
defval.disable_optimizer = DEFAULT_OPTIMIZER;
defval.ksqo = DEFAULT_KSQO;
defval.unique_index = DEFAULT_UNIQUEINDEX;
defval.onlyread = DEFAULT_READONLY;
defval.use_declarefetch = DEFAULT_USEDECLAREFETCH;
defval.parse = DEFAULT_PARSE;
defval.cancel_as_freestmt = DEFAULT_CANCELASFREESTMT;
defval.debug = DEFAULT_DEBUG;
/* Unknown Sizes */
defval.unknown_sizes = DEFAULT_UNKNOWNSIZES;
defval.text_as_longvarchar = DEFAULT_TEXTASLONGVARCHAR;
defval.unknowns_as_longvarchar = DEFAULT_UNKNOWNSASLONGVARCHAR;
defval.bools_as_char = DEFAULT_BOOLSASCHAR;
}
defset = TRUE;
comval = &defval;
break;
}
ShowWindow(GetDlgItem(hdlg, DRV_MSG_LABEL2), enable ? SW_SHOW : SW_HIDE);
CheckDlgButton(hdlg, DRV_COMMLOG, comval->commlog);
#ifndef Q_LOG
EnableWindow(GetDlgItem(hdlg, DRV_COMMLOG), FALSE);
#endif /* Q_LOG */
CheckDlgButton(hdlg, DRV_OPTIMIZER, comval->disable_optimizer);
CheckDlgButton(hdlg, DRV_KSQO, comval->ksqo);
CheckDlgButton(hdlg, DRV_UNIQUEINDEX, comval->unique_index);
/* EnableWindow(GetDlgItem(hdlg, DRV_UNIQUEINDEX), enable); */
CheckDlgButton(hdlg, DRV_READONLY, comval->onlyread);
EnableWindow(GetDlgItem(hdlg, DRV_READONLY), enable);
CheckDlgButton(hdlg, DRV_USEDECLAREFETCH, comval->use_declarefetch);
/* Unknown Sizes clear */
CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 0);
CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 0);
CheckDlgButton(hdlg, DRV_UNKNOWN_MAX, 0);
/* Unknown (Default) Data Type sizes */
switch (comval->unknown_sizes)
{
case UNKNOWNS_AS_DONTKNOW:
CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 1);
break;
case UNKNOWNS_AS_LONGEST:
CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 1);
break;
case UNKNOWNS_AS_MAX:
default:
CheckDlgButton(hdlg, DRV_UNKNOWN_MAX, 1);
break;
}
CheckDlgButton(hdlg, DRV_TEXT_LONGVARCHAR, comval->text_as_longvarchar);
CheckDlgButton(hdlg, DRV_UNKNOWNS_LONGVARCHAR, comval->unknowns_as_longvarchar);
CheckDlgButton(hdlg, DRV_BOOLS_CHAR, comval->bools_as_char);
CheckDlgButton(hdlg, DRV_PARSE, comval->parse);
CheckDlgButton(hdlg, DRV_CANCELASFREESTMT, comval->cancel_as_freestmt);
CheckDlgButton(hdlg, DRV_DEBUG, comval->debug);
#ifndef MY_LOG
EnableWindow(GetDlgItem(hdlg, DRV_DEBUG), FALSE);
#endif /* MY_LOG */
SetDlgItemInt(hdlg, DRV_CACHE_SIZE, comval->fetch_max, FALSE);
SetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, comval->max_varchar_size, FALSE);
SetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, comval->max_longvarchar_size, TRUE);
SetDlgItemText(hdlg, DRV_EXTRASYSTABLEPREFIXES, comval->extra_systable_prefixes);
/* Driver Connection Settings */
SetDlgItemText(hdlg, DRV_CONNSETTINGS, comval->conn_settings);
EnableWindow(GetDlgItem(hdlg, DRV_CONNSETTINGS), enable);
ShowWindow(GetDlgItem(hdlg, IDPREVPAGE), enable ? SW_HIDE : SW_SHOW);
ShowWindow(GetDlgItem(hdlg, IDNEXTPAGE), enable ? SW_HIDE : SW_SHOW);
return 0;
}
static int
driver_options_update(HWND hdlg, ConnInfo *ci, BOOL updateProfile)
{
GLOBAL_VALUES *comval;
if (ci)
comval = &(ci->drivers);
else
comval = &globals;
comval->commlog = IsDlgButtonChecked(hdlg, DRV_COMMLOG);
comval->disable_optimizer = IsDlgButtonChecked(hdlg, DRV_OPTIMIZER);
comval->ksqo = IsDlgButtonChecked(hdlg, DRV_KSQO);
comval->unique_index = IsDlgButtonChecked(hdlg, DRV_UNIQUEINDEX);
if (!ci)
{
comval->onlyread = IsDlgButtonChecked(hdlg, DRV_READONLY);
}
comval->use_declarefetch = IsDlgButtonChecked(hdlg, DRV_USEDECLAREFETCH);
/* Unknown (Default) Data Type sizes */
if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_MAX))
comval->unknown_sizes = UNKNOWNS_AS_MAX;
else if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_DONTKNOW))
comval->unknown_sizes = UNKNOWNS_AS_DONTKNOW;
else if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_LONGEST))
comval->unknown_sizes = UNKNOWNS_AS_LONGEST;
else
comval->unknown_sizes = UNKNOWNS_AS_MAX;
comval->text_as_longvarchar = IsDlgButtonChecked(hdlg, DRV_TEXT_LONGVARCHAR);
comval->unknowns_as_longvarchar = IsDlgButtonChecked(hdlg, DRV_UNKNOWNS_LONGVARCHAR);
comval->bools_as_char = IsDlgButtonChecked(hdlg, DRV_BOOLS_CHAR);
comval->parse = IsDlgButtonChecked(hdlg, DRV_PARSE);
comval->cancel_as_freestmt = IsDlgButtonChecked(hdlg, DRV_CANCELASFREESTMT);
comval->debug = IsDlgButtonChecked(hdlg, DRV_DEBUG);
comval->fetch_max = GetDlgItemInt(hdlg, DRV_CACHE_SIZE, NULL, FALSE);
comval->max_varchar_size = GetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, NULL, FALSE);
comval->max_longvarchar_size = GetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, NULL, TRUE); /* allows for
* SQL_NO_TOTAL */
GetDlgItemText(hdlg, DRV_EXTRASYSTABLEPREFIXES, comval->extra_systable_prefixes, sizeof(comval->extra_systable_prefixes));
/* Driver Connection Settings */
if (!ci)
GetDlgItemText(hdlg, DRV_CONNSETTINGS, comval->conn_settings, sizeof(comval->conn_settings));
if (updateProfile)
writeDriverCommoninfo(ci);
/* fall through */
return 0;
}
int CALLBACK
driver_optionsProc(HWND hdlg,
UINT wMsg,
WPARAM wParam,
LPARAM lParam)
{
ConnInfo *ci;
switch (wMsg)
{
case WM_INITDIALOG:
SetWindowLong(hdlg, DWL_USER, lParam); /* save for OK etc */
ci = (ConnInfo *) lParam;
SetWindowText(hdlg, "Advanced Options (Default)");
SetWindowText(GetDlgItem(hdlg, IDOK), "Save");
ShowWindow(GetDlgItem(hdlg, IDAPPLY), SW_HIDE);
driver_optionsDraw(hdlg, ci, 0, TRUE);
break;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case IDOK:
ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
driver_options_update(hdlg, NULL,
ci && ci->dsn && ci->dsn[0]);
case IDCANCEL:
EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);
return TRUE;
case IDDEFAULTS:
driver_optionsDraw(hdlg, NULL, 2, TRUE);
break;
}
}
return FALSE;
}
int CALLBACK
ds_options1Proc(HWND hdlg,
UINT wMsg,
WPARAM wParam,
LPARAM lParam)
{
ConnInfo *ci;
switch (wMsg)
{
case WM_INITDIALOG:
SetWindowLong(hdlg, DWL_USER, lParam); /* save for OK etc */
ci = (ConnInfo *) lParam;
if (ci && ci->dsn && ci->dsn[0])
SetWindowText(hdlg, "Advanced Options (DSN 1/2)");
else
{
SetWindowText(hdlg, "Advanced Options (Connection 1/2)");
ShowWindow(GetDlgItem(hdlg, IDAPPLY), SW_HIDE);
}
driver_optionsDraw(hdlg, ci, 1, FALSE);
break;
case WM_COMMAND:
ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case IDOK:
driver_options_update(hdlg, ci, FALSE);
case IDCANCEL:
EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);
return TRUE;
case IDAPPLY:
driver_options_update(hdlg, ci, FALSE);
SendMessage(GetWindow(hdlg, GW_OWNER), WM_COMMAND, wParam, lParam);
break;
case IDDEFAULTS:
driver_optionsDraw(hdlg, ci, 0, FALSE);
break;
case IDNEXTPAGE:
driver_options_update(hdlg, ci, FALSE);
EndDialog(hdlg, FALSE);
DialogBoxParam(s_hModule,
MAKEINTRESOURCE(DLG_OPTIONS_DS),
hdlg, ds_options2Proc, (LPARAM)
ci);
break;
}
}
return FALSE;
}
int CALLBACK
ds_options2Proc(HWND hdlg,
UINT wMsg,
WPARAM wParam,
LPARAM lParam)
{
ConnInfo *ci;
char buf[128];
DWORD cmd;
switch (wMsg)
{
case WM_INITDIALOG:
ci = (ConnInfo *) lParam;
SetWindowLong(hdlg, DWL_USER, lParam); /* save for OK */
/* Change window caption */
if (ci->driver[0])
{
SetWindowText(hdlg, "Advanced Options (Connection 2/2)");
ShowWindow(GetDlgItem(hdlg, IDAPPLY), SW_HIDE); }
else
{
sprintf(buf, "Advanced Options (%s) 2/2", ci->dsn);
SetWindowText(hdlg, buf);
}
/* Readonly */
CheckDlgButton(hdlg, DS_READONLY, atoi(ci->onlyread));
/* Protocol */
if (strncmp(ci->protocol, PG62, strlen(PG62)) == 0)
CheckDlgButton(hdlg, DS_PG62, 1);
else if (strncmp(ci->protocol, PG63, strlen(PG63)) == 0)
CheckDlgButton(hdlg, DS_PG63, 1);
else
/* latest */
CheckDlgButton(hdlg, DS_PG64, 1);
/* Int8 As */
switch (ci->int8_as)
{
case SQL_BIGINT:
CheckDlgButton(hdlg, DS_INT8_AS_BIGINT, 1);
break;
case SQL_NUMERIC:
CheckDlgButton(hdlg, DS_INT8_AS_NUMERIC, 1);
break;
case SQL_VARCHAR:
CheckDlgButton(hdlg, DS_INT8_AS_VARCHAR, 1);
break;
case SQL_DOUBLE:
CheckDlgButton(hdlg, DS_INT8_AS_DOUBLE, 1);
break;
case SQL_INTEGER:
CheckDlgButton(hdlg, DS_INT8_AS_INT4, 1);
break;
default:
CheckDlgButton(hdlg, DS_INT8_AS_DEFAULT, 1);
}
CheckDlgButton(hdlg, DS_SHOWOIDCOLUMN, atoi(ci->show_oid_column));
CheckDlgButton(hdlg, DS_FAKEOIDINDEX, atoi(ci->fake_oid_index));
CheckDlgButton(hdlg, DS_ROWVERSIONING, atoi(ci->row_versioning));
CheckDlgButton(hdlg, DS_SHOWSYSTEMTABLES, atoi(ci->show_system_tables));
CheckDlgButton(hdlg, DS_DISALLOWPREMATURE, ci->disallow_premature);
CheckDlgButton(hdlg, DS_LFCONVERSION, ci->lf_conversion);
CheckDlgButton(hdlg, DS_TRUEISMINUS1, ci->true_is_minus1);
CheckDlgButton(hdlg, DS_UPDATABLECURSORS, ci->allow_keyset);
#ifndef DRIVER_CURSOR_IMPLEMENT
EnableWindow(GetDlgItem(hdlg, DS_UPDATABLECURSORS), FALSE);
#endif /* DRIVER_CURSOR_IMPLEMENT */
EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), atoi(ci->show_oid_column));
/* Datasource Connection Settings */
SetDlgItemText(hdlg, DS_CONNSETTINGS, ci->conn_settings);
break;
case WM_COMMAND:
switch (cmd = GET_WM_COMMAND_ID(wParam, lParam))
{
case DS_SHOWOIDCOLUMN:
mylog("WM_COMMAND: DS_SHOWOIDCOLUMN\n");
EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), IsDlgButtonChecked(hdlg, DS_SHOWOIDCOLUMN));
return TRUE;
case IDOK:
case IDAPPLY:
case IDPREVPAGE:
ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
mylog("IDOK: got ci = %u\n", ci);
/* Readonly */
sprintf(ci->onlyread, "%d", IsDlgButtonChecked(hdlg, DS_READONLY));
/* Protocol */
if (IsDlgButtonChecked(hdlg, DS_PG62))
strcpy(ci->protocol, PG62);
else if (IsDlgButtonChecked(hdlg, DS_PG63))
strcpy(ci->protocol, PG63);
else
/* latest */
strcpy(ci->protocol, PG64);
/* Int8 As */
if (IsDlgButtonChecked(hdlg, DS_INT8_AS_DEFAULT))
ci->int8_as = 0;
else if (IsDlgButtonChecked(hdlg, DS_INT8_AS_BIGINT))
ci->int8_as = SQL_BIGINT;
else if (IsDlgButtonChecked(hdlg, DS_INT8_AS_NUMERIC))
ci->int8_as = SQL_NUMERIC;
else if (IsDlgButtonChecked(hdlg, DS_INT8_AS_DOUBLE))
ci->int8_as = SQL_DOUBLE;
else if (IsDlgButtonChecked(hdlg, DS_INT8_AS_INT4))
ci->int8_as = SQL_INTEGER;
else
ci->int8_as = SQL_VARCHAR;
sprintf(ci->show_system_tables, "%d", IsDlgButtonChecked(hdlg, DS_SHOWSYSTEMTABLES));
sprintf(ci->row_versioning, "%d", IsDlgButtonChecked(hdlg, DS_ROWVERSIONING));
ci->disallow_premature = IsDlgButtonChecked(hdlg, DS_DISALLOWPREMATURE);
ci->lf_conversion = IsDlgButtonChecked(hdlg, DS_LFCONVERSION);
ci->true_is_minus1 = IsDlgButtonChecked(hdlg, DS_TRUEISMINUS1);
#ifdef DRIVER_CURSOR_IMPLEMENT
ci->allow_keyset = IsDlgButtonChecked(hdlg, DS_UPDATABLECURSORS);
#endif /* DRIVER_CURSOR_IMPLEMENT */
/* OID Options */
sprintf(ci->fake_oid_index, "%d", IsDlgButtonChecked(hdlg, DS_FAKEOIDINDEX));
sprintf(ci->show_oid_column, "%d", IsDlgButtonChecked(hdlg, DS_SHOWOIDCOLUMN));
/* Datasource Connection Settings */
GetDlgItemText(hdlg, DS_CONNSETTINGS, ci->conn_settings, sizeof(ci->conn_settings));
if (IDAPPLY == cmd)
{
SendMessage(GetWindow(hdlg, GW_OWNER), WM_COMMAND, wParam, lParam);
break;
}
EndDialog(hdlg, cmd == IDOK);
if (IDOK == cmd)
return TRUE;
DialogBoxParam(s_hModule,
MAKEINTRESOURCE(DLG_OPTIONS_DRV),
hdlg, ds_options1Proc, (LPARAM) ci);
break;
case IDCANCEL:
EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);
return TRUE;
}
}
return FALSE;
}
#endif /* WIN32 */
...@@ -293,6 +293,7 @@ dconn_FDriverConnectProc( ...@@ -293,6 +293,7 @@ dconn_FDriverConnectProc(
ShowWindow(GetDlgItem(hdlg, IDC_DSNAME), SW_HIDE); ShowWindow(GetDlgItem(hdlg, IDC_DSNAME), SW_HIDE);
ShowWindow(GetDlgItem(hdlg, IDC_DESCTEXT), SW_HIDE); ShowWindow(GetDlgItem(hdlg, IDC_DESCTEXT), SW_HIDE);
ShowWindow(GetDlgItem(hdlg, IDC_DESC), SW_HIDE); ShowWindow(GetDlgItem(hdlg, IDC_DESC), SW_HIDE);
ShowWindow(GetDlgItem(hdlg, IDC_DRIVER), SW_HIDE);
SetWindowLong(hdlg, DWL_USER, lParam); /* Save the ConnInfo for SetWindowLong(hdlg, DWL_USER, lParam); /* Save the ConnInfo for
* the "OK" */ * the "OK" */
...@@ -322,16 +323,16 @@ dconn_FDriverConnectProc( ...@@ -322,16 +323,16 @@ dconn_FDriverConnectProc(
EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK); EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);
return TRUE; return TRUE;
case IDC_DRIVER: case IDC_DATASOURCE:
ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER); ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DRV), DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DRV),
hdlg, driver_optionsProc, (LPARAM) ci); hdlg, ds_options1Proc, (LPARAM) ci);
break; break;
case IDC_DATASOURCE: case IDC_DRIVER:
ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER); ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER);
DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DS), DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DRV),
hdlg, ds_optionsProc, (LPARAM) ci); hdlg, driver_optionsProc, (LPARAM) ci);
break; break;
} }
} }
......
...@@ -1231,7 +1231,7 @@ PGAPI_Tables( ...@@ -1231,7 +1231,7 @@ PGAPI_Tables(
} }
if (conn->schema_support) if (conn->schema_support)
schema_strcat(tables_query, " and nspname like '%.*s'", szTableOwner, cbTableOwner, szTableName, cbTableName); schema_strcat(tables_query, " and nspname like '%.*s'", szTableOwner, cbTableOwner, szTableName, cbTableName, conn);
else else
my_strcat(tables_query, " and usename like '%.*s'", szTableOwner, cbTableOwner); my_strcat(tables_query, " and usename like '%.*s'", szTableOwner, cbTableOwner);
my_strcat(tables_query, " and relname like '%.*s'", szTableName, cbTableName); my_strcat(tables_query, " and relname like '%.*s'", szTableName, cbTableName);
...@@ -1627,7 +1627,7 @@ PGAPI_Columns( ...@@ -1627,7 +1627,7 @@ PGAPI_Columns(
{ {
my_strcat(columns_query, " and c.relname = '%.*s'", szTableName, cbTableName); my_strcat(columns_query, " and c.relname = '%.*s'", szTableName, cbTableName);
if (conn->schema_support) if (conn->schema_support)
schema_strcat(columns_query, " and u.nspname = '%.*s'", szTableOwner, cbTableOwner, szTableName, cbTableName); schema_strcat(columns_query, " and u.nspname = '%.*s'", szTableOwner, cbTableOwner, szTableName, cbTableName, conn);
else else
my_strcat(columns_query, " and u.usename = '%.*s'", szTableOwner, cbTableOwner); my_strcat(columns_query, " and u.usename = '%.*s'", szTableOwner, cbTableOwner);
my_strcat(columns_query, " and a.attname = '%.*s'", szColumnName, cbColumnName); my_strcat(columns_query, " and a.attname = '%.*s'", szColumnName, cbColumnName);
...@@ -1640,7 +1640,7 @@ PGAPI_Columns( ...@@ -1640,7 +1640,7 @@ PGAPI_Columns(
escTbnamelen = reallyEscapeCatalogEscapes(szTableName, cbTableName, esc_table_name, sizeof(esc_table_name), conn->ccsc); escTbnamelen = reallyEscapeCatalogEscapes(szTableName, cbTableName, esc_table_name, sizeof(esc_table_name), conn->ccsc);
my_strcat(columns_query, " and c.relname like '%.*s'", esc_table_name, escTbnamelen); my_strcat(columns_query, " and c.relname like '%.*s'", esc_table_name, escTbnamelen);
if (conn->schema_support) if (conn->schema_support)
schema_strcat(columns_query, " and u.nspname like '%.*s'", szTableOwner, cbTableOwner, szTableName, cbTableName); schema_strcat(columns_query, " and u.nspname like '%.*s'", szTableOwner, cbTableOwner, szTableName, cbTableName, conn);
else else
my_strcat(columns_query, " and u.usename like '%.*s'", szTableOwner, cbTableOwner); my_strcat(columns_query, " and u.usename like '%.*s'", szTableOwner, cbTableOwner);
my_strcat(columns_query, " and a.attname like '%.*s'", szColumnName, cbColumnName); my_strcat(columns_query, " and a.attname like '%.*s'", szColumnName, cbColumnName);
...@@ -2130,7 +2130,7 @@ PGAPI_SpecialColumns( ...@@ -2130,7 +2130,7 @@ PGAPI_SpecialColumns(
my_strcat(columns_query, " and c.relname = '%.*s'", szTableName, cbTableName); my_strcat(columns_query, " and c.relname = '%.*s'", szTableName, cbTableName);
/* SchemaName cannot contain a string search pattern */ /* SchemaName cannot contain a string search pattern */
if (conn->schema_support) if (conn->schema_support)
schema_strcat(columns_query, " and u.nspname = '%.*s'", szTableOwner, cbTableOwner, szTableName, cbTableName); schema_strcat(columns_query, " and u.nspname = '%.*s'", szTableOwner, cbTableOwner, szTableName, cbTableName, conn);
else else
my_strcat(columns_query, " and u.usename = '%.*s'", szTableOwner, cbTableOwner); my_strcat(columns_query, " and u.usename = '%.*s'", szTableOwner, cbTableOwner);
...@@ -2377,7 +2377,7 @@ PGAPI_Statistics( ...@@ -2377,7 +2377,7 @@ PGAPI_Statistics(
} }
table_qualifier[0] = '\0'; table_qualifier[0] = '\0';
if (conn->schema_support) if (conn->schema_support)
schema_strcat(table_qualifier, "%.*s", szTableOwner, cbTableOwner, szTableName, cbTableName); schema_strcat(table_qualifier, "%.*s", szTableOwner, cbTableOwner, szTableName, cbTableName, conn);
/* /*
* we need to get a list of the field names first, so we can return * we need to get a list of the field names first, so we can return
...@@ -2843,7 +2843,7 @@ PGAPI_PrimaryKeys( ...@@ -2843,7 +2843,7 @@ PGAPI_PrimaryKeys(
} }
pkscm[0] = '\0'; pkscm[0] = '\0';
if (conn->schema_support) if (conn->schema_support)
schema_strcat(pkscm, "%.*s", szTableOwner, cbTableOwner, szTableName, cbTableName); schema_strcat(pkscm, "%.*s", szTableOwner, cbTableOwner, szTableName, cbTableName, conn);
result = PGAPI_BindCol(htbl_stmt, 1, SQL_C_CHAR, result = PGAPI_BindCol(htbl_stmt, 1, SQL_C_CHAR,
attname, MAX_INFO_STRING, &attname_len); attname, MAX_INFO_STRING, &attname_len);
...@@ -3379,7 +3379,7 @@ char schema_fetched[MAX_SCHEMA_LEN + 1]; ...@@ -3379,7 +3379,7 @@ char schema_fetched[MAX_SCHEMA_LEN + 1];
mylog("%s: entering Foreign Key Case #2", func); mylog("%s: entering Foreign Key Case #2", func);
if (conn->schema_support) if (conn->schema_support)
{ {
schema_strcat(schema_needed, "%.*s", szFkTableOwner, cbFkTableOwner, szFkTableName, cbFkTableName); schema_strcat(schema_needed, "%.*s", szFkTableOwner, cbFkTableOwner, szFkTableName, cbFkTableName, conn);
sprintf(tables_query, "SELECT pt.tgargs, " sprintf(tables_query, "SELECT pt.tgargs, "
" pt.tgnargs, " " pt.tgnargs, "
" pt.tgdeferrable, " " pt.tgdeferrable, "
...@@ -3781,7 +3781,7 @@ if (conn->schema_support) ...@@ -3781,7 +3781,7 @@ if (conn->schema_support)
{ {
if (conn->schema_support) if (conn->schema_support)
{ {
schema_strcat(schema_needed, "%.*s", szPkTableOwner, cbPkTableOwner, szPkTableName, cbPkTableName); schema_strcat(schema_needed, "%.*s", szPkTableOwner, cbPkTableOwner, szPkTableName, cbPkTableName, conn);
sprintf(tables_query, "SELECT pt.tgargs, " sprintf(tables_query, "SELECT pt.tgargs, "
" pt.tgnargs, " " pt.tgnargs, "
" pt.tgdeferrable, " " pt.tgdeferrable, "
...@@ -4191,7 +4191,7 @@ PGAPI_Procedures( ...@@ -4191,7 +4191,7 @@ PGAPI_Procedures(
if (conn->schema_support) if (conn->schema_support)
{ {
strcat(proc_query, " where pg_proc.pronamespace = pg_namespace.oid"); strcat(proc_query, " where pg_proc.pronamespace = pg_namespace.oid");
schema_strcat(proc_query, " and nspname like '%.*s'", szProcOwner, cbProcOwner, szProcName, cbProcName); schema_strcat(proc_query, " and nspname like '%.*s'", szProcOwner, cbProcOwner, szProcName, cbProcName, conn);
my_strcat(proc_query, " and proname like '%.*s'", szProcName, cbProcName); my_strcat(proc_query, " and proname like '%.*s'", szProcName, cbProcName);
} }
else else
...@@ -4330,7 +4330,7 @@ PGAPI_TablePrivileges( ...@@ -4330,7 +4330,7 @@ PGAPI_TablePrivileges(
{ {
if (conn->schema_support) if (conn->schema_support)
{ {
schema_strcat(proc_query, " nspname = '%.*s' and", szTableOwner, cbTableOwner, szTableName, cbTableName); schema_strcat(proc_query, " nspname = '%.*s' and", szTableOwner, cbTableOwner, szTableName, cbTableName, conn);
} }
my_strcat(proc_query, " relname = '%.*s' and", szTableName, cbTableName); my_strcat(proc_query, " relname = '%.*s' and", szTableName, cbTableName);
} }
...@@ -4342,7 +4342,7 @@ PGAPI_TablePrivileges( ...@@ -4342,7 +4342,7 @@ PGAPI_TablePrivileges(
if (conn->schema_support) if (conn->schema_support)
{ {
escTbnamelen = reallyEscapeCatalogEscapes(szTableOwner, cbTableOwner, esc_table_name, sizeof(esc_table_name), conn->ccsc); escTbnamelen = reallyEscapeCatalogEscapes(szTableOwner, cbTableOwner, esc_table_name, sizeof(esc_table_name), conn->ccsc);
schema_strcat(proc_query, " nspname like '%.*s' and", esc_table_name, escTbnamelen, szTableName, cbTableName); schema_strcat(proc_query, " nspname like '%.*s' and", esc_table_name, escTbnamelen, szTableName, cbTableName, conn);
} }
escTbnamelen = reallyEscapeCatalogEscapes(szTableName, cbTableName, esc_table_name, sizeof(esc_table_name), conn->ccsc); escTbnamelen = reallyEscapeCatalogEscapes(szTableName, cbTableName, esc_table_name, sizeof(esc_table_name), conn->ccsc);
my_strcat(proc_query, " relname like '%.*s' and", esc_table_name, escTbnamelen); my_strcat(proc_query, " relname like '%.*s' and", esc_table_name, escTbnamelen);
......
...@@ -46,13 +46,13 @@ PGAPI_GetInfo30(HDBC hdbc, UWORD fInfoType, PTR rgbInfoValue, ...@@ -46,13 +46,13 @@ PGAPI_GetInfo30(HDBC hdbc, UWORD fInfoType, PTR rgbInfoValue,
break; break;
case SQL_KEYSET_CURSOR_ATTRIBUTES1: case SQL_KEYSET_CURSOR_ATTRIBUTES1:
len = 4; len = 4;
value = 0; value = SQL_CA1_NEXT | SQL_CA1_ABSOLUTE
if (ci->updatable_cursors || ci->drivers.lie)
value |= (SQL_CA1_NEXT | SQL_CA1_ABSOLUTE
| SQL_CA1_RELATIVE | SQL_CA1_BOOKMARK | SQL_CA1_RELATIVE | SQL_CA1_BOOKMARK
| SQL_CA1_LOCK_NO_CHANGE | SQL_CA1_POS_POSITION | SQL_CA1_LOCK_NO_CHANGE | SQL_CA1_POS_POSITION
| SQL_CA1_POS_UPDATE | SQL_CA1_POS_DELETE | SQL_CA1_POS_REFRESH;
| SQL_CA1_POS_REFRESH | SQL_CA1_BULK_ADD if (ci->updatable_cursors || ci->drivers.lie)
value |= (SQL_CA1_POS_UPDATE | SQL_CA1_POS_DELETE
| SQL_CA1_BULK_ADD
| SQL_CA1_BULK_UPDATE_BY_BOOKMARK | SQL_CA1_BULK_UPDATE_BY_BOOKMARK
| SQL_CA1_BULK_DELETE_BY_BOOKMARK | SQL_CA1_BULK_DELETE_BY_BOOKMARK
| SQL_CA1_BULK_FETCH_BY_BOOKMARK | SQL_CA1_BULK_FETCH_BY_BOOKMARK
...@@ -67,7 +67,7 @@ PGAPI_GetInfo30(HDBC hdbc, UWORD fInfoType, PTR rgbInfoValue, ...@@ -67,7 +67,7 @@ PGAPI_GetInfo30(HDBC hdbc, UWORD fInfoType, PTR rgbInfoValue,
break; break;
case SQL_KEYSET_CURSOR_ATTRIBUTES2: case SQL_KEYSET_CURSOR_ATTRIBUTES2:
len = 4; len = 4;
value = 0; value = SQL_CA2_READ_ONLY_CONCURRENCY;
if (ci->updatable_cursors || ci->drivers.lie) if (ci->updatable_cursors || ci->drivers.lie)
value |= (SQL_CA2_OPT_ROWVER_CONCURRENCY value |= (SQL_CA2_OPT_ROWVER_CONCURRENCY
/*| SQL_CA2_CRC_APPROXIMATE*/ /*| SQL_CA2_CRC_APPROXIMATE*/
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <process.h> /* Byron: is this where Windows keeps def. #include <process.h> /* Byron: is this where Windows keeps def.
* of getpid ? */ * of getpid ? */
#endif #endif
#include "connection.h"
extern GLOBAL_VALUES globals; extern GLOBAL_VALUES globals;
void generate_filename(const char *, const char *, char *); void generate_filename(const char *, const char *, char *);
...@@ -280,17 +281,17 @@ my_strcat(char *buf, const char *fmt, const char *s, int len) ...@@ -280,17 +281,17 @@ my_strcat(char *buf, const char *fmt, const char *s, int len)
} }
char * char *
schema_strcat(char *buf, const char *fmt, const char *s, int len, const char *tbname, int tbnmlen) schema_strcat(char *buf, const char *fmt, const char *s, int len, const char *tbname, int tbnmlen, ConnectionClass *conn)
{ {
if (!s || 0 == len) if (!s || 0 == len)
{ {
/* /*
* I can find no appropriate way to find * Note that this driver assumes the implicit schema is
* the CURRENT SCHEMA. If you are lucky * the CURRENT_SCHEMA() though it doesn't worth the
* you can get expected result. * naming.
*/ */
/***** if (tbname && (tbnmlen > 0 || tbnmlen == SQL_NTS)) if (conn->schema_support && tbname && (tbnmlen > 0 || tbnmlen == SQL_NTS))
return my_strcat(buf, fmt, "public", 6); *****/ return my_strcat(buf, fmt, CC_get_current_schema(conn), SQL_NTS);
return NULL; return NULL;
} }
return my_strcat(buf, fmt, s, len); return my_strcat(buf, fmt, s, len);
......
...@@ -92,7 +92,7 @@ char *trim(char *string); ...@@ -92,7 +92,7 @@ char *trim(char *string);
char *make_string(const char *s, int len, char *buf); char *make_string(const char *s, int len, char *buf);
char *my_strcat(char *buf, const char *fmt, const char *s, int len); char *my_strcat(char *buf, const char *fmt, const char *s, int len);
char *schema_strcat(char *buf, const char *fmt, const char *s, int len, char *schema_strcat(char *buf, const char *fmt, const char *s, int len,
const char *, int); const char *, int, ConnectionClass *conn);
/* #define GET_SCHEMA_NAME(nspname) (stricmp(nspname, "public") ? nspname : "") */ /* #define GET_SCHEMA_NAME(nspname) (stricmp(nspname, "public") ? nspname : "") */
#define GET_SCHEMA_NAME(nspname) (nspname) #define GET_SCHEMA_NAME(nspname) (nspname)
......
...@@ -351,6 +351,44 @@ CC_lookup_characterset(ConnectionClass *self) ...@@ -351,6 +351,44 @@ CC_lookup_characterset(ConnectionClass *self)
encstr = CC_lookup_cs_new(self); encstr = CC_lookup_cs_new(self);
if (self->client_encoding) if (self->client_encoding)
free(self->client_encoding); free(self->client_encoding);
#ifndef UNICODE_SUPPORT
#ifdef WIN32
else
{
const char *wenc = NULL;
switch (GetACP())
{
case 932:
wenc = "SJIS";
break;
case 936:
wenc = "GBK";
break;
case 949:
wenc = "UHC";
break;
case 950:
wenc = "BIG5";
break;
}
if (wenc && stricmp(encstr, wenc))
{
QResultClass *res;
char query[64];
sprintf(query, "set client_encoding to '%s'", wenc);
res = CC_send_query(self, query, NULL, CLEAR_RESULT_ON_ABORT);
if (res)
{
self->client_encoding = strdup(wenc);
QR_Destructor(res);
free(encstr);
return;
}
}
}
#endif /* WIN32 */
#endif /* UNICODE_SUPPORT */
if (encstr) if (encstr)
{ {
self->client_encoding = encstr; self->client_encoding = encstr;
......
...@@ -597,11 +597,9 @@ parse_statement(StatementClass *stmt) ...@@ -597,11 +597,9 @@ parse_statement(StatementClass *stmt)
if (fi[ifld]->dot[0]) if (fi[ifld]->dot[0])
{ {
strcat(fi[ifld]->dot, "."); fi[ifld]->schema = strdup(fi[ifld]->dot);
strcat(fi[ifld]->dot, fi[ifld]->name);
} }
else strcpy(fi[ifld]->dot, fi[ifld]->name);
strcpy(fi[ifld]->dot, fi[ifld]->name);
strcpy(fi[ifld]->name, token); strcpy(fi[ifld]->name, token);
if (delim == ',') if (delim == ',')
...@@ -820,17 +818,49 @@ parse_statement(StatementClass *stmt) ...@@ -820,17 +818,49 @@ parse_statement(StatementClass *stmt)
fi[i]->length = fi[i]->column_size; fi[i]->length = fi[i]->column_size;
continue; continue;
} }
/* field name contains the schema name */
else if (fi[i]->schema)
{
int matchidx = -1;
for (k = 0; k < stmt->ntab; k++)
{
if (!stricmp(ti[k]->name, fi[i]->dot))
{
if (!stricmp(ti[k]->schema, fi[i]->schema))
{
fi[i]->ti = ti[k];
break;
}
else if (!ti[k]->schema[0])
{
if (matchidx < 0)
matchidx = k;
else
{
stmt->parse_status = STMT_PARSE_FATAL;
stmt->errornumber = STMT_EXEC_ERROR;
stmt->errormsg = "duplicated Table name";
stmt->updatable = FALSE;
return FALSE;
}
}
}
}
if (matchidx >= 0)
fi[i]->ti = ti[matchidx];
}
/* it's a dot, resolve to table or alias */ /* it's a dot, resolve to table or alias */
else if (fi[i]->dot[0]) else if (fi[i]->dot[0])
{ {
for (k = 0; k < stmt->ntab; k++) for (k = 0; k < stmt->ntab; k++)
{ {
if (!stricmp(ti[k]->name, fi[i]->dot)) if (!stricmp(ti[k]->alias, fi[i]->dot))
{ {
fi[i]->ti = ti[k]; fi[i]->ti = ti[k];
break; break;
} }
else if (!stricmp(ti[k]->alias, fi[i]->dot)) else if (!stricmp(ti[k]->name, fi[i]->dot))
{ {
fi[i]->ti = ti[k]; fi[i]->ti = ti[k];
break; break;
...@@ -869,13 +899,84 @@ parse_statement(StatementClass *stmt) ...@@ -869,13 +899,84 @@ parse_statement(StatementClass *stmt)
/* See if already got it */ /* See if already got it */
char found = FALSE; char found = FALSE;
for (k = 0; k < conn->ntables; k++) if (conn->schema_support)
{ {
if (!stricmp(conn->col_info[k]->name, ti[i]->name)) if (!ti[i]->schema[0])
{ {
mylog("FOUND col_info table='%s'\n", ti[i]->name); const char *curschema = CC_get_current_schema(conn);
found = TRUE; /*
break; * Though current_schema() doesn't have
* much sense in PostgreSQL, we first
* check the current_schema() when no
* explicit schema name was specified.
*/
for (k = 0; k < conn->ntables; k++)
{
if (!stricmp(conn->col_info[k]->name, ti[i]->name) &&
!stricmp(conn->col_info[k]->schema, curschema))
{
mylog("FOUND col_info table='%s' current schema='%s'\n", ti[i]->name, curschema);
found = TRUE;
strcpy(ti[i]->schema, curschema);
break;
}
}
if (!found)
{
QResultClass *res;
BOOL tblFound = FALSE;
/*
* We also have to check as follows.
*/
sprintf(token, "select nspname from pg_namespace n, pg_class c"
" where c.relnamespace=n.oid and c.oid='%s'::regclass", ti[i]->name);
res = CC_send_query(conn, token, NULL, CLEAR_RESULT_ON_ABORT);
if (res)
{
if (QR_get_num_total_tuples(res) == 1)
{
tblFound = TRUE;
strcpy(ti[i]->schema, QR_get_value_backend_row(res, 0, 0));
}
QR_Destructor(res);
}
else
CC_abort(conn);
if (!tblFound)
{
stmt->parse_status = STMT_PARSE_FATAL;
stmt->errornumber = STMT_EXEC_ERROR;
stmt->errormsg = "Table not found";
stmt->updatable = FALSE;
return FALSE;
}
}
}
if (!found && ti[i]->schema[0])
{
for (k = 0; k < conn->ntables; k++)
{
if (!stricmp(conn->col_info[k]->name, ti[i]->name) &&
!stricmp(conn->col_info[k]->schema, ti[i]->schema))
{
mylog("FOUND col_info table='%s' schema='%s'\n", ti[i]->name, ti[i]->schema);
found = TRUE;
break;
}
}
}
}
else
{
for (k = 0; k < conn->ntables; k++)
{
if (!stricmp(conn->col_info[k]->name, ti[i]->name))
{
mylog("FOUND col_info table='%s'\n", ti[i]->name);
found = TRUE;
break;
}
} }
} }
...@@ -895,37 +996,6 @@ parse_statement(StatementClass *stmt) ...@@ -895,37 +996,6 @@ parse_statement(StatementClass *stmt)
col_stmt = (StatementClass *) hcol_stmt; col_stmt = (StatementClass *) hcol_stmt;
col_stmt->internal = TRUE; col_stmt->internal = TRUE;
if (!ti[i]->schema[0] && conn->schema_support)
{
QResultClass *res;
BOOL tblFound = FALSE;
/* Unfortunately CURRENT_SCHEMA doesn't exist
* in PostgreSQL and we have to check as follows.
*/
sprintf(token, "select nspname from pg_namespace n, pg_class c"
" where c.relnamespace=n.oid and c.oid='%s'::regclass", ti[i]->name);
res = CC_send_query(conn, token, NULL, CLEAR_RESULT_ON_ABORT);
if (res)
{
if (QR_get_num_total_tuples(res) == 1)
{
tblFound = TRUE;
strcpy(ti[i]->schema, QR_get_value_backend_row(res, 0, 0));
}
QR_Destructor(res);
}
else
CC_abort(conn);
if (!tblFound)
{
stmt->parse_status = STMT_PARSE_FATAL;
stmt->errornumber = STMT_EXEC_ERROR;
stmt->errormsg = "Table not found";
stmt->updatable = FALSE;
return FALSE;
}
}
result = PGAPI_Columns(hcol_stmt, "", 0, ti[i]->schema, result = PGAPI_Columns(hcol_stmt, "", 0, ti[i]->schema,
SQL_NTS, ti[i]->name, SQL_NTS, "", 0, PODBC_NOT_SEARCH_PATTERN); SQL_NTS, ti[i]->name, SQL_NTS, "", 0, PODBC_NOT_SEARCH_PATTERN);
...@@ -957,6 +1027,10 @@ parse_statement(StatementClass *stmt) ...@@ -957,6 +1027,10 @@ parse_statement(StatementClass *stmt)
* Store the table name and the SQLColumns result * Store the table name and the SQLColumns result
* structure * structure
*/ */
if (ti[i]->schema[0])
conn->col_info[conn->ntables]->schema = strdup(ti[i]->schema);
else
conn->col_info[conn->ntables]->schema = NULL;
strcpy(conn->col_info[conn->ntables]->name, ti[i]->name); strcpy(conn->col_info[conn->ntables]->name, ti[i]->name);
conn->col_info[conn->ntables]->result = SC_get_Curres(col_stmt); conn->col_info[conn->ntables]->result = SC_get_Curres(col_stmt);
......
...@@ -287,6 +287,8 @@ pgtype_to_concise_type(StatementClass *stmt, Int4 type) ...@@ -287,6 +287,8 @@ pgtype_to_concise_type(StatementClass *stmt, Int4 type)
/* Change this to SQL_BIGINT for ODBC v3 bjm 2001-01-23 */ /* Change this to SQL_BIGINT for ODBC v3 bjm 2001-01-23 */
case PG_TYPE_INT8: case PG_TYPE_INT8:
if (ci->int8_as != 0)
return ci->int8_as;
if (conn->ms_jet) if (conn->ms_jet)
return SQL_NUMERIC; /* maybe a little better than SQL_VARCHAR */ return SQL_NUMERIC; /* maybe a little better than SQL_VARCHAR */
#if (ODBCVER >= 0x0300) #if (ODBCVER >= 0x0300)
...@@ -625,7 +627,8 @@ getCharColumnSize(StatementClass *stmt, Int4 type, int col, int handle_unknown_s ...@@ -625,7 +627,8 @@ getCharColumnSize(StatementClass *stmt, Int4 type, int col, int handle_unknown_s
maxsize; maxsize;
QResultClass *result; QResultClass *result;
ColumnInfoClass *flds; ColumnInfoClass *flds;
ConnInfo *ci = &(SC_get_conn(stmt)->connInfo); ConnectionClass *conn = SC_get_conn(stmt);
ConnInfo *ci = &(conn->connInfo);
mylog("getCharColumnSize: type=%d, col=%d, unknown = %d\n", type, col, handle_unknown_size_as); mylog("getCharColumnSize: type=%d, col=%d, unknown = %d\n", type, col, handle_unknown_size_as);
...@@ -684,8 +687,24 @@ getCharColumnSize(StatementClass *stmt, Int4 type, int col, int handle_unknown_s ...@@ -684,8 +687,24 @@ getCharColumnSize(StatementClass *stmt, Int4 type, int col, int handle_unknown_s
p = QR_get_display_size(result, col); /* longest */ p = QR_get_display_size(result, col); /* longest */
attlen = QR_get_atttypmod(result, col); attlen = QR_get_atttypmod(result, col);
/* Size is unknown -- handle according to parameter */ /* Size is unknown -- handle according to parameter */
if (attlen >= p && attlen > 0) /* maybe the length is known */ if (attlen > 0) /* maybe the length is known */
return attlen; {
if (attlen >= p)
return attlen;
switch (type)
{
case PG_TYPE_VARCHAR:
case PG_TYPE_BPCHAR:
if (conn->unicode || conn->ms_jet)
return attlen;
#if (ODBCVER >= 0x0300)
#ifdef MULTIBYTE
return attlen;
#endif /* MULTIBYTE */
#endif /* ODBCVER */
return p;
}
}
/* The type is really unknown */ /* The type is really unknown */
if (type == PG_TYPE_BPCHAR || handle_unknown_size_as == UNKNOWNS_AS_LONGEST) if (type == PG_TYPE_BPCHAR || handle_unknown_size_as == UNKNOWNS_AS_LONGEST)
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Comments: See "notice.txt" for copyright and license information. * Comments: See "notice.txt" for copyright and license information.
* *
* $Id: psqlodbc.h,v 1.66 2002/05/22 05:51:03 inoue Exp $ * $Id: psqlodbc.h,v 1.67 2002/06/06 04:50:47 inoue Exp $
* *
*/ */
......
...@@ -78,8 +78,8 @@ BEGIN ...@@ -78,8 +78,8 @@ BEGIN
PUSHBUTTON "Cancel",IDCANCEL,81,88,40,14 PUSHBUTTON "Cancel",IDCANCEL,81,88,40,14
GROUPBOX "Options (Advanced):",IDC_OPTIONS,141,72,140,35, GROUPBOX "Options (Advanced):",IDC_OPTIONS,141,72,140,35,
BS_CENTER BS_CENTER
PUSHBUTTON "Driver",IDC_DRIVER,149,89,50,14 PUSHBUTTON "DataSource",IDC_DATASOURCE,149,89,50,14
PUSHBUTTON "DataSource",IDC_DATASOURCE,221,88,50,14 PUSHBUTTON "Default",IDC_DRIVER,221,88,50,14
CTEXT "Please supply any missing information needed to connect.", CTEXT "Please supply any missing information needed to connect.",
DRV_MSG_LABEL,25,4,238,10 DRV_MSG_LABEL,25,4,238,10
END END
...@@ -89,92 +89,111 @@ STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU ...@@ -89,92 +89,111 @@ STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Advanced Options (Driver)" CAPTION "Advanced Options (Driver)"
FONT 10, "Terminal" FONT 10, "Terminal"
BEGIN BEGIN
PUSHBUTTON "Page 1",IDPREVPAGE,10,1,40,15
PUSHBUTTON "Page 2",IDNEXTPAGE,50,1,40,15
CTEXT "Set your site's defaults (for new DSNs).",
DRV_MSG_LABEL2,15,1,270,10, SS_CENTER | WS_GROUP, WS_EX_STATICEDGE
CONTROL "Disable Genetic &Optimizer",DRV_OPTIMIZER,"Button", CONTROL "Disable Genetic &Optimizer",DRV_OPTIMIZER,"Button",
BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,13,11,116,10 BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,13,18,116,10
CONTROL "Comm&Log (C:\\psqlodbc.log)",DRV_COMMLOG,"Button", CONTROL "Comm&Log (C:\\psqlodbc.log)",DRV_COMMLOG,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,164,11,120,10 BS_AUTOCHECKBOX | WS_TABSTOP,164,18,120,10
CONTROL "&KSQO (Keyset Query Optimization)",DRV_KSQO,"Button", CONTROL "&KSQO (Keyset Query Optimization)",DRV_KSQO,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,23,144,10 BS_AUTOCHECKBOX | WS_TABSTOP,13,30,144,10
CONTROL "&ReadOnly (Default)",DRV_READONLY,"Button", CONTROL "&ReadOnly (Default)",DRV_READONLY,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,164,24,88,10 BS_AUTOCHECKBOX | WS_TABSTOP,164,31,88,10
CONTROL "Recognize Unique &Indexes",DRV_UNIQUEINDEX,"Button", CONTROL "Recognize Unique &Indexes",DRV_UNIQUEINDEX,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,35,112,10 BS_AUTOCHECKBOX | WS_TABSTOP,13,42,112,10
CONTROL "P&arse Statements",DRV_PARSE,"Button",BS_AUTOCHECKBOX | CONTROL "P&arse Statements",DRV_PARSE,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,164,37,80,10 WS_TABSTOP,164,44,80,10
CONTROL "&Use Declare/Fetch",DRV_USEDECLAREFETCH,"Button", CONTROL "&Use Declare/Fetch",DRV_USEDECLAREFETCH,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,47,84,10 BS_AUTOCHECKBOX | WS_TABSTOP,13,54,84,10
CONTROL "Cancel as FreeStmt (Exp)",DRV_CANCELASFREESTMT,"Button", CONTROL "Cancel as FreeStmt (Exp)",DRV_CANCELASFREESTMT,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,164,50,112,10 BS_AUTOCHECKBOX | WS_TABSTOP,164,57,112,10
CONTROL "Mylog(Debug ouput)",DRV_DEBUG,"Button", CONTROL "Mylog(Debug ouput)",DRV_DEBUG,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,164,63,112,10 BS_AUTOCHECKBOX | WS_TABSTOP,164,70,112,10
GROUPBOX "Unknown Sizes",IDC_STATIC,13,76,175,24 GROUPBOX "Unknown Sizes",IDC_STATIC,13,81,175,24
CONTROL "Maximum",DRV_UNKNOWN_MAX,"Button",BS_AUTORADIOBUTTON | CONTROL "Maximum",DRV_UNKNOWN_MAX,"Button",BS_AUTORADIOBUTTON |
WS_GROUP | WS_TABSTOP,21,84,44,10 WS_GROUP | WS_TABSTOP,21,89,44,10
CONTROL "Don't Know",DRV_UNKNOWN_DONTKNOW,"Button", CONTROL "Don't Know",DRV_UNKNOWN_DONTKNOW,"Button",
BS_AUTORADIOBUTTON | WS_TABSTOP,72,84,56,10 BS_AUTORADIOBUTTON | WS_TABSTOP,72,89,56,10
CONTROL "Longest",DRV_UNKNOWN_LONGEST,"Button", CONTROL "Longest",DRV_UNKNOWN_LONGEST,"Button",
BS_AUTORADIOBUTTON | WS_TABSTOP,135,84,44,10 BS_AUTORADIOBUTTON | WS_TABSTOP,135,89,44,10
GROUPBOX "Data Type Options",IDC_STATIC,13,104,282,23 GROUPBOX "Data Type Options",IDC_STATIC,13,109,282,23
CONTROL "Text as LongVarChar",DRV_TEXT_LONGVARCHAR,"Button", CONTROL "Text as LongVarChar",DRV_TEXT_LONGVARCHAR,"Button",
BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,15,115,92,10 BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,15,120,92,10
CONTROL "Unknowns as LongVarChar",DRV_UNKNOWNS_LONGVARCHAR, CONTROL "Unknowns as LongVarChar",DRV_UNKNOWNS_LONGVARCHAR,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,115,108,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,120,108,10
CONTROL "Bools as Char",DRV_BOOLS_CHAR,"Button",BS_AUTOCHECKBOX | CONTROL "Bools as Char",DRV_BOOLS_CHAR,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,225,115,68,10 WS_TABSTOP,225,120,68,10
LTEXT "&Cache Size:",IDC_STATIC,15,133,45,8 LTEXT "&Cache Size:",IDC_STATIC,15,138,45,8
EDITTEXT DRV_CACHE_SIZE,61,129,35,12,ES_AUTOHSCROLL EDITTEXT DRV_CACHE_SIZE,61,134,35,12,ES_AUTOHSCROLL
LTEXT "Max &Varchar:",IDC_STATIC,99,133,49,8 LTEXT "Max &Varchar:",IDC_STATIC,99,138,49,8
EDITTEXT DRV_VARCHAR_SIZE,149,129,35,12,ES_AUTOHSCROLL EDITTEXT DRV_VARCHAR_SIZE,149,134,35,12,ES_AUTOHSCROLL
LTEXT "Max Lon&gVarChar:",IDC_STATIC,192,133,65,8 LTEXT "Max Lon&gVarChar:",IDC_STATIC,192,138,65,8
EDITTEXT DRV_LONGVARCHAR_SIZE,259,129,35,12,ES_AUTOHSCROLL EDITTEXT DRV_LONGVARCHAR_SIZE,259,134,35,12,ES_AUTOHSCROLL
LTEXT "SysTable &Prefixes:",IDC_STATIC,23,144,36,20 LTEXT "SysTable &Prefixes:",IDC_STATIC,23,149,36,20
EDITTEXT DRV_EXTRASYSTABLEPREFIXES,61,153,75,12,ES_AUTOHSCROLL EDITTEXT DRV_EXTRASYSTABLEPREFIXES,61,158,75,12,ES_AUTOHSCROLL
LTEXT "Connect &Settings:",IDC_STATIC,22,165,35,20 LTEXT "Connect &Settings:",IDC_STATIC,22,170,35,20
EDITTEXT DRV_CONNSETTINGS,61,165,225,25,ES_MULTILINE | EDITTEXT DRV_CONNSETTINGS,61,170,225,25,ES_MULTILINE |
ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
DEFPUSHBUTTON "OK",IDOK,59,201,50,14,WS_GROUP DEFPUSHBUTTON "Close",IDOK,39,201,50,14,WS_GROUP
PUSHBUTTON "Cancel",IDCANCEL,124,201,50,14 PUSHBUTTON "Cancel",IDCANCEL,104,201,50,15
PUSHBUTTON "Defaults",IDDEFAULTS,189,201,50,15 PUSHBUTTON "Apply",IDAPPLY,169,201,50,14
CONTROL "Default",DRV_OR_DSN,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | PUSHBUTTON "Defaults",IDDEFAULTS,234,201,50,15
BS_NOTIFY | WS_TABSTOP,247,205,40,10
END END
DLG_OPTIONS_DS DIALOG DISCARDABLE 0, 0, 267, 196 DLG_OPTIONS_DS DIALOG DISCARDABLE 0, 0, 267, 226
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Advanced Options (DataSource)" CAPTION "Advanced Options (DataSource)"
FONT 10, "Terminal" FONT 10, "Terminal"
BEGIN BEGIN
PUSHBUTTON "Page 2",IDNEXTPAGE,50,1,40,15
PUSHBUTTON "Page 1",IDPREVPAGE,10,1,40,15
CONTROL "&ReadOnly",DS_READONLY,"Button",BS_AUTOCHECKBOX | CONTROL "&ReadOnly",DS_READONLY,"Button",BS_AUTOCHECKBOX |
WS_GROUP | WS_TABSTOP,45,13,48,10 WS_GROUP | WS_TABSTOP,25,18,48,10
CONTROL "Row &Versioning",DS_ROWVERSIONING,"Button", CONTROL "Row &Versioning",DS_ROWVERSIONING,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,149,13,72,10 BS_AUTOCHECKBOX | WS_TABSTOP,129,18,72,10
CONTROL "Show System &Tables",DS_SHOWSYSTEMTABLES,"Button", CONTROL "Show System &Tables",DS_SHOWSYSTEMTABLES,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,45,28,88,10 BS_AUTOCHECKBOX | WS_TABSTOP,25,33,88,10
CONTROL "Disallow &Premature",DS_DISALLOWPREMATURE,"Button", CONTROL "Disallow &Premature",DS_DISALLOWPREMATURE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,149,28,86,10 BS_AUTOCHECKBOX | WS_TABSTOP,129,33,86,10
CONTROL "LF <-> CR/LF convert",DS_LFCONVERSION,"Button", CONTROL "LF <-> CR/LF convert",DS_LFCONVERSION,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,45,43,92,10 BS_AUTOCHECKBOX | WS_TABSTOP,25,48,92,10
CONTROL "True is -1",DS_TRUEISMINUS1,"Button", CONTROL "True is -1",DS_TRUEISMINUS1,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,149,43,86,10 BS_AUTOCHECKBOX | WS_TABSTOP,129,48,86,10
CONTROL "(Trial) Updatable cursors",DS_UPDATABLECURSORS,"Button", CONTROL "(Trial) Updatable cursors",DS_UPDATABLECURSORS,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,45,58,112,10 BS_AUTOCHECKBOX | WS_TABSTOP,25,63,112,10
GROUPBOX "Protocol",IDC_STATIC,43,74,180,25 GROUPBOX "Int8 As",IDC_STATIC,23,79,235,25
CONTROL "default",DS_INT8_AS_DEFAULT,"Button",BS_AUTORADIOBUTTON |
WS_GROUP,30,89,47,10
CONTROL "bigint",DS_INT8_AS_BIGINT,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
70,89,35,10
CONTROL "numeric",DS_INT8_AS_NUMERIC,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
107,89,40,10
CONTROL "varchar",DS_INT8_AS_VARCHAR,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
149,89,40,10
CONTROL "double",DS_INT8_AS_DOUBLE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
190,89,40,10
CONTROL "int4",DS_INT8_AS_INT4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
227,89,28,10
GROUPBOX "Protocol",IDC_STATIC,23,109,180,25
CONTROL "7.X,6.4+",DS_PG64,"Button",BS_AUTORADIOBUTTON | CONTROL "7.X,6.4+",DS_PG64,"Button",BS_AUTORADIOBUTTON |
WS_GROUP,53,84,47,10 WS_GROUP,33,119,47,10
CONTROL "6.3",DS_PG63,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP, CONTROL "6.3",DS_PG63,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
131,84,26,10 83,119,26,10
CONTROL "6.2",DS_PG62,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP, CONTROL "6.2",DS_PG62,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
187,84,26,10 133,119,26,10
GROUPBOX "OID Options",IDC_STATIC,43,104,180,25 GROUPBOX "OID Options",IDC_STATIC,23,129,180,25
CONTROL "Show &Column",DS_SHOWOIDCOLUMN,"Button",BS_AUTOCHECKBOX | CONTROL "Show &Column",DS_SHOWOIDCOLUMN,"Button",BS_AUTOCHECKBOX |
WS_GROUP | WS_TABSTOP,53,115,59,10 WS_GROUP | WS_TABSTOP,33,140,59,10
CONTROL "Fake &Index",DS_FAKEOIDINDEX,"Button",BS_AUTOCHECKBOX | CONTROL "Fake &Index",DS_FAKEOIDINDEX,"Button",BS_AUTOCHECKBOX |
WS_GROUP | WS_TABSTOP,161,115,55,10 WS_GROUP | WS_TABSTOP,141,140,55,10
LTEXT "Connect &Settings:",IDC_STATIC,10,135,35,25 LTEXT "Connect &Settings:",IDC_STATIC,10,170,35,25
EDITTEXT DS_CONNSETTINGS,50,135,200,20,ES_MULTILINE | EDITTEXT DS_CONNSETTINGS,50,170,200,20,ES_MULTILINE |
ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
DEFPUSHBUTTON "OK",IDOK,71,165,50,14,WS_GROUP DEFPUSHBUTTON "Close",IDOK,51,195,50,14,WS_GROUP
PUSHBUTTON "Cancel",IDCANCEL,146,165,50,14 PUSHBUTTON "Cancel",IDCANCEL,126,195,50,14
PUSHBUTTON "Apply",IDAPPLY,201,195,50,14
END END
#else #else
DLG_CONFIG DIALOG DISCARDABLE 65, 43, 292, 116 DLG_CONFIG DIALOG DISCARDABLE 65, 43, 292, 116
...@@ -201,103 +220,122 @@ BEGIN ...@@ -201,103 +220,122 @@ BEGIN
PUSHBUTTON "Cancel",IDCANCEL,80,90,40,14 PUSHBUTTON "Cancel",IDCANCEL,80,90,40,14
GROUPBOX "Options (Advanced):",IDC_OPTIONS,140,74,140,35, GROUPBOX "Options (Advanced):",IDC_OPTIONS,140,74,140,35,
BS_CENTER BS_CENTER
PUSHBUTTON "Driver",IDC_DRIVER,160,90,50,14 PUSHBUTTON "DataSource",IDC_DATASOURCE,160,90,50,14
PUSHBUTTON "DataSource",IDC_DATASOURCE,220,90,50,14 PUSHBUTTON "Default",IDC_DRIVER,220,90,50,14
CTEXT "Please supply any missing information needed to connect.", CTEXT "Please supply any missing information needed to connect.",
DRV_MSG_LABEL,36,5,220,15 DRV_MSG_LABEL,36,5,220,15
END END
DLG_OPTIONS_DRV DIALOG DISCARDABLE 0, 0, 287, 241 DLG_OPTIONS_DRV DIALOG DISCARDABLE 0, 0, 287, 250
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Advanced Options (Driver)" CAPTION "Advanced Options (Driver)"
FONT 8, "MS Sans Serif" FONT 8, "MS Sans Serif"
BEGIN BEGIN
PUSHBUTTON "Page 1",IDPREVPAGE,10,1,40,15
PUSHBUTTON "Page 2",IDNEXTPAGE,50,1,40,15
CTEXT "Set your site's defaults (for new DSNs).",
DRV_MSG_LABEL2,15,1,270,10, SS_CENTER | WS_GROUP, WS_EX_STATICEDGE
CONTROL "Disable Genetic &Optimizer",DRV_OPTIMIZER,"Button", CONTROL "Disable Genetic &Optimizer",DRV_OPTIMIZER,"Button",
BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,15,5,97,10 BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,15,18,97,10
CONTROL "Comm&Log (C:\\psqlodbc.log)",DRV_COMMLOG,"Button", CONTROL "Comm&Log (C:\\psqlodbc.log)",DRV_COMMLOG,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,140,5,113,10 BS_AUTOCHECKBOX | WS_TABSTOP,140,18,113,10
CONTROL "&KSQO (Keyset Query Optimization)",DRV_KSQO,"Button", CONTROL "&KSQO (Keyset Query Optimization)",DRV_KSQO,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,15,20,124,10 BS_AUTOCHECKBOX | WS_TABSTOP,15,33,124,10
CONTROL "&ReadOnly (Default)",DRV_READONLY,"Button", CONTROL "&ReadOnly (Default)",DRV_READONLY,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,140,20,80,10 BS_AUTOCHECKBOX | WS_TABSTOP,140,33,80,10
CONTROL "Recognize Unique &Indexes",DRV_UNIQUEINDEX,"Button", CONTROL "Recognize Unique &Indexes",DRV_UNIQUEINDEX,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,15,35,101,10 BS_AUTOCHECKBOX | WS_TABSTOP,15,48,101,10
CONTROL "P&arse Statements",DRV_PARSE,"Button",BS_AUTOCHECKBOX | CONTROL "P&arse Statements",DRV_PARSE,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,140,35,80,10 WS_TABSTOP,140,48,80,10
CONTROL "&Use Declare/Fetch",DRV_USEDECLAREFETCH,"Button", CONTROL "&Use Declare/Fetch",DRV_USEDECLAREFETCH,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,15,50,80,10 BS_AUTOCHECKBOX | WS_TABSTOP,15,63,80,10
CONTROL "Cancel as FreeStmt (Exp)",DRV_CANCELASFREESTMT,"Button", CONTROL "Cancel as FreeStmt (Exp)",DRV_CANCELASFREESTMT,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,140,50,105,10 BS_AUTOCHECKBOX | WS_TABSTOP,140,63,105,10
CONTROL "Mylog(Debug ouput)",DRV_DEBUG,"Button", CONTROL "Mylog(Debug ouput)",DRV_DEBUG,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,140,65,112,10 BS_AUTOCHECKBOX | WS_TABSTOP,140,78,112,10
GROUPBOX "Unknown Sizes",IDC_STATIC,10,80,175,25 GROUPBOX "Unknown Sizes",IDC_STATIC,10,93,175,25
CONTROL "Maximum",DRV_UNKNOWN_MAX,"Button",BS_AUTORADIOBUTTON | CONTROL "Maximum",DRV_UNKNOWN_MAX,"Button",BS_AUTORADIOBUTTON |
WS_GROUP | WS_TABSTOP,15,91,45,10 WS_GROUP | WS_TABSTOP,15,104,45,10
CONTROL "Don't Know",DRV_UNKNOWN_DONTKNOW,"Button", CONTROL "Don't Know",DRV_UNKNOWN_DONTKNOW,"Button",
BS_AUTORADIOBUTTON | WS_TABSTOP,70,91,53,10 BS_AUTORADIOBUTTON | WS_TABSTOP,70,104,53,10
CONTROL "Longest",DRV_UNKNOWN_LONGEST,"Button", CONTROL "Longest",DRV_UNKNOWN_LONGEST,"Button",
BS_AUTORADIOBUTTON | WS_TABSTOP,130,91,50,10 BS_AUTORADIOBUTTON | WS_TABSTOP,130,104,50,10
GROUPBOX "Data Type Options",IDC_STATIC,10,110,270,25 GROUPBOX "Data Type Options",IDC_STATIC,10,123,270,25
CONTROL "Text as LongVarChar",DRV_TEXT_LONGVARCHAR,"Button", CONTROL "Text as LongVarChar",DRV_TEXT_LONGVARCHAR,"Button",
BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,15,120,80,10 BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,15,133,80,10
CONTROL "Unknowns as LongVarChar",DRV_UNKNOWNS_LONGVARCHAR, CONTROL "Unknowns as LongVarChar",DRV_UNKNOWNS_LONGVARCHAR,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,105,120,100,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,105,133,100,10
CONTROL "Bools as Char",DRV_BOOLS_CHAR,"Button",BS_AUTOCHECKBOX | CONTROL "Bools as Char",DRV_BOOLS_CHAR,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,215,120,60,10 WS_TABSTOP,215,133,60,10
LTEXT "&Cache Size:",IDC_STATIC,10,145,40,10 LTEXT "&Cache Size:",IDC_STATIC,10,148,40,10
EDITTEXT DRV_CACHE_SIZE,50,145,35,12,ES_AUTOHSCROLL EDITTEXT DRV_CACHE_SIZE,50,153,35,12,ES_AUTOHSCROLL
LTEXT "Max &Varchar:",IDC_STATIC,90,145,45,10 LTEXT "Max &Varchar:",IDC_STATIC,90,140,45,10
EDITTEXT DRV_VARCHAR_SIZE,135,145,35,12,ES_AUTOHSCROLL EDITTEXT DRV_VARCHAR_SIZE,135,153,35,12,ES_AUTOHSCROLL
LTEXT "Max Lon&gVarChar:",IDC_STATIC,180,145,60,10 LTEXT "Max Lon&gVarChar:",IDC_STATIC,180,140,60,10
EDITTEXT DRV_LONGVARCHAR_SIZE,240,145,35,12,ES_AUTOHSCROLL EDITTEXT DRV_LONGVARCHAR_SIZE,240,153,35,12,ES_AUTOHSCROLL
LTEXT "SysTable &Prefixes:",IDC_STATIC,15,160,35,20 LTEXT "SysTable &Prefixes:",IDC_STATIC,15,155,35,20
EDITTEXT DRV_EXTRASYSTABLEPREFIXES,50,166,75,12,ES_AUTOHSCROLL EDITTEXT DRV_EXTRASYSTABLEPREFIXES,50,174,75,12,ES_AUTOHSCROLL
RTEXT "Connect &Settings:",IDC_STATIC,10,185,35,20 RTEXT "Connect &Settings:",IDC_STATIC,10,180,35,20
EDITTEXT DRV_CONNSETTINGS,50,185,225,25,ES_MULTILINE | EDITTEXT DRV_CONNSETTINGS,50,193,225,25,ES_MULTILINE |
ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
DEFPUSHBUTTON "OK",IDOK,45,220,50,14,WS_GROUP DEFPUSHBUTTON "Close",IDOK,25,228,50,14,WS_GROUP
PUSHBUTTON "Cancel",IDCANCEL,110,220,50,14 PUSHBUTTON "Cancel",IDCANCEL,90,228,50,15
PUSHBUTTON "Defaults",IDDEFAULTS,175,220,50,15 PUSHBUTTON "Apply",IDAPPLY,155,228,50,14
CONTROL "Default",DRV_OR_DSN,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | PUSHBUTTON "Defaults",IDDEFAULTS,220,228,50,15
BS_NOTIFY | WS_TABSTOP,233,224,40,10
END END
DLG_OPTIONS_DS DIALOG DISCARDABLE 0, 0, 267, 186 DLG_OPTIONS_DS DIALOG DISCARDABLE 0, 0, 267, 216
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Advanced Options (DataSource)" CAPTION "Advanced Options (DataSource)"
FONT 8, "MS Sans Serif" FONT 8, "MS Sans Serif"
BEGIN BEGIN
PUSHBUTTON "Page 2",IDNEXTPAGE,50,1,40,15
PUSHBUTTON "Page 1",IDPREVPAGE,10,1,40,15
CONTROL "&ReadOnly",DS_READONLY,"Button",BS_AUTOCHECKBOX | CONTROL "&ReadOnly",DS_READONLY,"Button",BS_AUTOCHECKBOX |
WS_GROUP | WS_TABSTOP,25,10,53,10 WS_GROUP | WS_TABSTOP,25,18,53,10
CONTROL "Row &Versioning",DS_ROWVERSIONING,"Button", CONTROL "Row &Versioning",DS_ROWVERSIONING,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,130,10,85,10 BS_AUTOCHECKBOX | WS_TABSTOP,130,18,85,10
CONTROL "Show System &Tables",DS_SHOWSYSTEMTABLES,"Button", CONTROL "Show System &Tables",DS_SHOWSYSTEMTABLES,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,25,25,85,10 BS_AUTOCHECKBOX | WS_TABSTOP,25,33,85,10
CONTROL "Disallow &Premature",DS_DISALLOWPREMATURE,"Button", CONTROL "Disallow &Premature",DS_DISALLOWPREMATURE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,130,25,85,10 BS_AUTOCHECKBOX | WS_TABSTOP,130,33,85,10
CONTROL "LF <-> CR/LF convert",DS_LFCONVERSION,"Button", CONTROL "LF <-> CR/LF convert",DS_LFCONVERSION,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,25,40,92,10 BS_AUTOCHECKBOX | WS_TABSTOP,25,48,92,10
CONTROL "True is -1",DS_TRUEISMINUS1,"Button", CONTROL "True is -1",DS_TRUEISMINUS1,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,130,40,86,10 BS_AUTOCHECKBOX | WS_TABSTOP,130,48,86,10
CONTROL "(Trial) Updatable Cursors",DS_UPDATABLECURSORS,"Button", CONTROL "(Trial) Updatable Cursors",DS_UPDATABLECURSORS,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,25,55,102,10 BS_AUTOCHECKBOX | WS_TABSTOP,25,63,102,10
GROUPBOX "Protocol",IDC_STATIC,15,70,180,25 GROUPBOX "Int8 As",IDC_STATIC,15,78,248,25
CONTROL "default",DS_INT8_AS_DEFAULT,"Button",BS_AUTORADIOBUTTON | WS_GROUP,20,
88,35,10
CONTROL "bigint",DS_INT8_AS_BIGINT,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
63,88,35,10
CONTROL "numeric",DS_INT8_AS_NUMERIC,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
106,88,40,10
CONTROL "varchar",DS_INT8_AS_VARCHAR,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
149,88,40,10
CONTROL "double",DS_INT8_AS_DOUBLE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
192,88,40,10
CONTROL "int4",DS_INT8_AS_INT4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
235,88,25,10
GROUPBOX "Protocol",IDC_STATIC,15,109,180,25
CONTROL "7.X,6.4+",DS_PG64,"Button",BS_AUTORADIOBUTTON | WS_GROUP,25, CONTROL "7.X,6.4+",DS_PG64,"Button",BS_AUTORADIOBUTTON | WS_GROUP,25,
80,35,10 118,35,10
CONTROL "6.3",DS_PG63,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP, CONTROL "6.3",DS_PG63,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
75,80,26,10 75,118,26,10
CONTROL "6.2",DS_PG62,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP, CONTROL "6.2",DS_PG62,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
130,80,26,10 130,118,26,10
GROUPBOX "OID Options",IDC_STATIC,15,101,180,25 GROUPBOX "OID Options",IDC_STATIC,15,140,180,25
CONTROL "Show &Column",DS_SHOWOIDCOLUMN,"Button",BS_AUTOCHECKBOX | CONTROL "Show &Column",DS_SHOWOIDCOLUMN,"Button",BS_AUTOCHECKBOX |
WS_GROUP | WS_TABSTOP,25,111,59,10 WS_GROUP | WS_TABSTOP,25,150,59,10
CONTROL "Fake &Index",DS_FAKEOIDINDEX,"Button",BS_AUTOCHECKBOX | CONTROL "Fake &Index",DS_FAKEOIDINDEX,"Button",BS_AUTOCHECKBOX |
WS_GROUP | WS_TABSTOP,115,111,51,10 WS_GROUP | WS_TABSTOP,115,150,51,10
RTEXT "Connect &Settings:",IDC_STATIC,10,135,35,25 RTEXT "Connect &Settings:",IDC_STATIC,10,174,35,25
EDITTEXT DS_CONNSETTINGS,50,135,200,20,ES_MULTILINE | EDITTEXT DS_CONNSETTINGS,50,174,200,20,ES_MULTILINE |
ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
DEFPUSHBUTTON "OK",IDOK,71,165,50,14,WS_GROUP DEFPUSHBUTTON "Close",IDOK,51,196,50,14,WS_GROUP
PUSHBUTTON "Cancel",IDCANCEL,146,165,50,14 PUSHBUTTON "Cancel",IDCANCEL,126,196,50,14
PUSHBUTTON "Apply",IDAPPLY,201,196,50,14
END END
#endif #endif
......
...@@ -55,6 +55,16 @@ ...@@ -55,6 +55,16 @@
#define DS_LFCONVERSION 1062 #define DS_LFCONVERSION 1062
#define DS_TRUEISMINUS1 1063 #define DS_TRUEISMINUS1 1063
#define DS_UPDATABLECURSORS 1064 #define DS_UPDATABLECURSORS 1064
#define IDNEXTPAGE 1065
#define IDPREVPAGE 1066
#define DS_INT8_AS_DEFAULT 1067
#define DS_INT8_AS_BIGINT 1068
#define DS_INT8_AS_NUMERIC 1069
#define DS_INT8_AS_VARCHAR 1070
#define DS_INT8_AS_DOUBLE 1071
#define DS_INT8_AS_INT4 1072
#define DRV_MSG_LABEL2 1073
#define IDAPPLY 1074
/* Next default values for new objects */ /* Next default values for new objects */
/* */ /* */
...@@ -62,7 +72,7 @@ ...@@ -62,7 +72,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 105 #define _APS_NEXT_RESOURCE_VALUE 105
#define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1065 #define _APS_NEXT_CONTROL_VALUE 1075
#define _APS_NEXT_SYMED_VALUE 101 #define _APS_NEXT_SYMED_VALUE 101
#endif /* */ #endif /* */
......
...@@ -850,7 +850,7 @@ PGAPI_GetData( ...@@ -850,7 +850,7 @@ PGAPI_GetData(
break; break;
default: default:
stmt->errormsg = "Column 0 is not of type SQL_C_BOOKMARK"; stmt->errormsg = "Column 0 is not of type SQL_C_BOOKMARK";
inolog("Column 0 is type %d not of type SQL_C_BOOKMARK", fCType); inolog("Column 0 is type %d not of type SQL_C_BOOKMARK", fCType);
stmt->errornumber = STMT_PROGRAM_TYPE_OUT_OF_RANGE; stmt->errornumber = STMT_PROGRAM_TYPE_OUT_OF_RANGE;
SC_log_error(func, "", stmt); SC_log_error(func, "", stmt);
return SQL_ERROR; return SQL_ERROR;
...@@ -1720,6 +1720,8 @@ static void UndoRollback(StatementClass *stmt, QResultClass *res) ...@@ -1720,6 +1720,8 @@ static void UndoRollback(StatementClass *stmt, QResultClass *res)
{ {
if (0 != (status & CURS_SELF_DELETING)) if (0 != (status & CURS_SELF_DELETING))
DiscardDeleted(res, index); DiscardDeleted(res, index);
keyset[index].blocknum = rollback[i].blocknum;
keyset[index].offset = rollback[i].offset;
if (0 != (keyset[index].status & CURS_SELF_UPDATING)) if (0 != (keyset[index].status & CURS_SELF_UPDATING))
keyset[index].status |= CURS_NEEDS_REREAD; keyset[index].status |= CURS_NEEDS_REREAD;
keyset[index].status &= ~(CURS_SELF_DELETING | CURS_SELF_UPDATING | CURS_SELF_ADDING | KEYSET_INFO_PUBLIC); keyset[index].status &= ~(CURS_SELF_DELETING | CURS_SELF_UPDATING | CURS_SELF_ADDING | KEYSET_INFO_PUBLIC);
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <stdlib.h> #include <stdlib.h>
#include "resource.h" #include "resource.h"
#include "dlg_specific.h" #include "dlg_specific.h"
#include "win_setup.h"
#define INTFUNC __stdcall #define INTFUNC __stdcall
...@@ -39,28 +40,6 @@ extern HINSTANCE NEAR s_hModule; /* Saved module handle. */ ...@@ -39,28 +40,6 @@ extern HINSTANCE NEAR s_hModule; /* Saved module handle. */
#define MAXDSNAME (32+1) /* Max data source name length */ #define MAXDSNAME (32+1) /* Max data source name length */
/* Globals */
/* NOTE: All these are used by the dialog procedures */
typedef struct tagSETUPDLG
{
HWND hwndParent; /* Parent window handle */
LPCSTR lpszDrvr; /* Driver description */
ConnInfo ci;
char szDSN[MAXDSNAME]; /* Original data source name */
BOOL fNewDSN; /* New data source flag */
BOOL fDefault; /* Default data source flag */
} SETUPDLG, FAR * LPSETUPDLG;
/* Prototypes */
void INTFUNC CenterDialog(HWND hdlg);
int CALLBACK ConfigDlgProc(HWND hdlg, UINT wMsg, WPARAM wParam, LPARAM lParam);
void INTFUNC ParseAttributes(LPCSTR lpszAttributes, LPSETUPDLG lpsetupdlg);
BOOL INTFUNC SetDSNAttributes(HWND hwnd, LPSETUPDLG lpsetupdlg);
/*-------- /*--------
* ConfigDSN * ConfigDSN
* *
...@@ -217,6 +196,7 @@ ConfigDlgProc(HWND hdlg, ...@@ -217,6 +196,7 @@ ConfigDlgProc(HWND hdlg,
{ {
LPSETUPDLG lpsetupdlg; LPSETUPDLG lpsetupdlg;
ConnInfo *ci; ConnInfo *ci;
DWORD cmd;
switch (wMsg) switch (wMsg)
{ {
...@@ -227,6 +207,7 @@ ConfigDlgProc(HWND hdlg, ...@@ -227,6 +207,7 @@ ConfigDlgProc(HWND hdlg,
/* Hide the driver connect message */ /* Hide the driver connect message */
ShowWindow(GetDlgItem(hdlg, DRV_MSG_LABEL), SW_HIDE); ShowWindow(GetDlgItem(hdlg, DRV_MSG_LABEL), SW_HIDE);
SetWindowText(GetDlgItem(hdlg, IDOK), "Save");
SetWindowLong(hdlg, DWL_USER, lParam); SetWindowLong(hdlg, DWL_USER, lParam);
CenterDialog(hdlg); /* Center dialog */ CenterDialog(hdlg); /* Center dialog */
...@@ -260,7 +241,7 @@ ConfigDlgProc(HWND hdlg, ...@@ -260,7 +241,7 @@ ConfigDlgProc(HWND hdlg,
/* Process buttons */ /* Process buttons */
case WM_COMMAND: case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam)) switch (cmd = GET_WM_COMMAND_ID(wParam, lParam))
{ {
/* /*
* Ensure the OK button is enabled only when a data * Ensure the OK button is enabled only when a data
...@@ -282,6 +263,7 @@ ConfigDlgProc(HWND hdlg, ...@@ -282,6 +263,7 @@ ConfigDlgProc(HWND hdlg,
/* Accept results */ /* Accept results */
case IDOK: case IDOK:
case IDAPPLY:
lpsetupdlg = (LPSETUPDLG) GetWindowLong(hdlg, DWL_USER); lpsetupdlg = (LPSETUPDLG) GetWindowLong(hdlg, DWL_USER);
/* Retrieve dialog values */ /* Retrieve dialog values */
if (!lpsetupdlg->fDefault) if (!lpsetupdlg->fDefault)
...@@ -293,23 +275,24 @@ ConfigDlgProc(HWND hdlg, ...@@ -293,23 +275,24 @@ ConfigDlgProc(HWND hdlg,
/* Update ODBC.INI */ /* Update ODBC.INI */
SetDSNAttributes(hdlg, lpsetupdlg); SetDSNAttributes(hdlg, lpsetupdlg);
if (IDAPPLY == cmd)
break;
/* Return to caller */ /* Return to caller */
case IDCANCEL: case IDCANCEL:
EndDialog(hdlg, wParam); EndDialog(hdlg, wParam);
return TRUE; return TRUE;
case IDC_DRIVER: case IDC_DATASOURCE:
lpsetupdlg = (LPSETUPDLG) GetWindowLong(hdlg, DWL_USER); lpsetupdlg = (LPSETUPDLG) GetWindowLong(hdlg, DWL_USER);
DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DRV), DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DRV),
hdlg, driver_optionsProc, (LPARAM) &lpsetupdlg->ci); hdlg, ds_options1Proc, (LPARAM) &lpsetupdlg->ci);
return TRUE; return TRUE;
case IDC_DATASOURCE: case IDC_DRIVER:
lpsetupdlg = (LPSETUPDLG) GetWindowLong(hdlg, DWL_USER); lpsetupdlg = (LPSETUPDLG) GetWindowLong(hdlg, DWL_USER);
DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DS), DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DRV),
hdlg, ds_optionsProc, (LPARAM) &lpsetupdlg->ci); hdlg, driver_optionsProc, (LPARAM) &lpsetupdlg->ci);
return TRUE; return TRUE;
} }
...@@ -415,6 +398,7 @@ SetDSNAttributes(HWND hwndParent, LPSETUPDLG lpsetupdlg) ...@@ -415,6 +398,7 @@ SetDSNAttributes(HWND hwndParent, LPSETUPDLG lpsetupdlg)
} }
/* Update ODBC.INI */ /* Update ODBC.INI */
writeDriverCommoninfo(&lpsetupdlg->ci);
writeDSNinfo(&lpsetupdlg->ci); writeDSNinfo(&lpsetupdlg->ci);
/* If the data source name has changed, remove the old name */ /* If the data source name has changed, remove the old name */
......
...@@ -337,8 +337,14 @@ void IRDFields_free(IRDFields * self) ...@@ -337,8 +337,14 @@ void IRDFields_free(IRDFields * self)
int i; int i;
for (i = 0; i < (int) self->nfields; i++) for (i = 0; i < (int) self->nfields; i++)
{
if (self->fi[i]) if (self->fi[i])
{
if (self->fi[i]->schema)
free(self->fi[i]->schema);
free(self->fi[i]); free(self->fi[i]);
}
}
free(self->fi); free(self->fi);
self->fi = NULL; self->fi = NULL;
} }
......
...@@ -63,6 +63,7 @@ CLEAN : ...@@ -63,6 +63,7 @@ CLEAN :
-@erase "$(INTDIR)\connection.obj" -@erase "$(INTDIR)\connection.obj"
-@erase "$(INTDIR)\convert.obj" -@erase "$(INTDIR)\convert.obj"
-@erase "$(INTDIR)\dlg_specific.obj" -@erase "$(INTDIR)\dlg_specific.obj"
-@erase "$(INTDIR)\dlg_wingui.obj"
-@erase "$(INTDIR)\drvconn.obj" -@erase "$(INTDIR)\drvconn.obj"
-@erase "$(INTDIR)\environ.obj" -@erase "$(INTDIR)\environ.obj"
-@erase "$(INTDIR)\execute.obj" -@erase "$(INTDIR)\execute.obj"
...@@ -90,6 +91,7 @@ CLEAN : ...@@ -90,6 +91,7 @@ CLEAN :
-@erase "$(OUTDIR)\psqlodbc.dll" -@erase "$(OUTDIR)\psqlodbc.dll"
-@erase "$(OUTDIR)\psqlodbc.exp" -@erase "$(OUTDIR)\psqlodbc.exp"
-@erase "$(OUTDIR)\psqlodbc.lib" -@erase "$(OUTDIR)\psqlodbc.lib"
-@erase "$(OUTDIR)\psqlodbc.pch"
"$(OUTDIR)" : "$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
...@@ -148,6 +150,7 @@ LINK32_OBJS= \ ...@@ -148,6 +150,7 @@ LINK32_OBJS= \
"$(INTDIR)\connection.obj" \ "$(INTDIR)\connection.obj" \
"$(INTDIR)\convert.obj" \ "$(INTDIR)\convert.obj" \
"$(INTDIR)\dlg_specific.obj" \ "$(INTDIR)\dlg_specific.obj" \
"$(INTDIR)\dlg_wingui.obj" \
"$(INTDIR)\drvconn.obj" \ "$(INTDIR)\drvconn.obj" \
"$(INTDIR)\environ.obj" \ "$(INTDIR)\environ.obj" \
"$(INTDIR)\execute.obj" \ "$(INTDIR)\execute.obj" \
...@@ -196,6 +199,7 @@ CLEAN : ...@@ -196,6 +199,7 @@ CLEAN :
-@erase "$(INTDIR)\connection.obj" -@erase "$(INTDIR)\connection.obj"
-@erase "$(INTDIR)\convert.obj" -@erase "$(INTDIR)\convert.obj"
-@erase "$(INTDIR)\dlg_specific.obj" -@erase "$(INTDIR)\dlg_specific.obj"
-@erase "$(INTDIR)\dlg_wingui.obj"
-@erase "$(INTDIR)\drvconn.obj" -@erase "$(INTDIR)\drvconn.obj"
-@erase "$(INTDIR)\environ.obj" -@erase "$(INTDIR)\environ.obj"
-@erase "$(INTDIR)\execute.obj" -@erase "$(INTDIR)\execute.obj"
...@@ -226,6 +230,7 @@ CLEAN : ...@@ -226,6 +230,7 @@ CLEAN :
-@erase "$(OUTDIR)\psqlodbc.ilk" -@erase "$(OUTDIR)\psqlodbc.ilk"
-@erase "$(OUTDIR)\psqlodbc.lib" -@erase "$(OUTDIR)\psqlodbc.lib"
-@erase "$(OUTDIR)\psqlodbc.pdb" -@erase "$(OUTDIR)\psqlodbc.pdb"
-@erase "$(OUTDIR)\psqlodbc.pch"
"$(OUTDIR)" : "$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
...@@ -284,6 +289,7 @@ LINK32_OBJS= \ ...@@ -284,6 +289,7 @@ LINK32_OBJS= \
"$(INTDIR)\connection.obj" \ "$(INTDIR)\connection.obj" \
"$(INTDIR)\convert.obj" \ "$(INTDIR)\convert.obj" \
"$(INTDIR)\dlg_specific.obj" \ "$(INTDIR)\dlg_specific.obj" \
"$(INTDIR)\dlg_wingui.obj" \
"$(INTDIR)\drvconn.obj" \ "$(INTDIR)\drvconn.obj" \
"$(INTDIR)\environ.obj" \ "$(INTDIR)\environ.obj" \
"$(INTDIR)\execute.obj" \ "$(INTDIR)\execute.obj" \
...@@ -347,6 +353,12 @@ SOURCE=dlg_specific.c ...@@ -347,6 +353,12 @@ SOURCE=dlg_specific.c
$(CPP) $(CPP_PROJ) $(SOURCE) $(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=dlg_wingui.c
"$(INTDIR)\dlg_wingui.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=drvconn.c SOURCE=drvconn.c
"$(INTDIR)\drvconn.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\drvconn.obj" : $(SOURCE) "$(INTDIR)"
......
# #
# File: win32_30.mak # File: win32_30.mak
# #
...@@ -63,6 +62,7 @@ CLEAN : ...@@ -63,6 +62,7 @@ CLEAN :
-@erase "$(INTDIR)\connection.obj" -@erase "$(INTDIR)\connection.obj"
-@erase "$(INTDIR)\convert.obj" -@erase "$(INTDIR)\convert.obj"
-@erase "$(INTDIR)\dlg_specific.obj" -@erase "$(INTDIR)\dlg_specific.obj"
-@erase "$(INTDIR)\dlg_wingui.obj"
-@erase "$(INTDIR)\drvconn.obj" -@erase "$(INTDIR)\drvconn.obj"
-@erase "$(INTDIR)\environ.obj" -@erase "$(INTDIR)\environ.obj"
-@erase "$(INTDIR)\execute.obj" -@erase "$(INTDIR)\execute.obj"
...@@ -93,6 +93,7 @@ CLEAN : ...@@ -93,6 +93,7 @@ CLEAN :
-@erase "$(OUTDIR)\psqlodbc30.dll" -@erase "$(OUTDIR)\psqlodbc30.dll"
-@erase "$(OUTDIR)\psqlodbc.exp" -@erase "$(OUTDIR)\psqlodbc.exp"
-@erase "$(OUTDIR)\psqlodbc.lib" -@erase "$(OUTDIR)\psqlodbc.lib"
-@erase "$(OUTDIR)\psqlodbc.pch"
"$(OUTDIR)" : "$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
...@@ -151,6 +152,7 @@ LINK32_OBJS= \ ...@@ -151,6 +152,7 @@ LINK32_OBJS= \
"$(INTDIR)\connection.obj" \ "$(INTDIR)\connection.obj" \
"$(INTDIR)\convert.obj" \ "$(INTDIR)\convert.obj" \
"$(INTDIR)\dlg_specific.obj" \ "$(INTDIR)\dlg_specific.obj" \
"$(INTDIR)\dlg_wingui.obj" \
"$(INTDIR)\drvconn.obj" \ "$(INTDIR)\drvconn.obj" \
"$(INTDIR)\environ.obj" \ "$(INTDIR)\environ.obj" \
"$(INTDIR)\execute.obj" \ "$(INTDIR)\execute.obj" \
...@@ -202,6 +204,7 @@ CLEAN : ...@@ -202,6 +204,7 @@ CLEAN :
-@erase "$(INTDIR)\connection.obj" -@erase "$(INTDIR)\connection.obj"
-@erase "$(INTDIR)\convert.obj" -@erase "$(INTDIR)\convert.obj"
-@erase "$(INTDIR)\dlg_specific.obj" -@erase "$(INTDIR)\dlg_specific.obj"
-@erase "$(INTDIR)\dlg_wingui.obj"
-@erase "$(INTDIR)\drvconn.obj" -@erase "$(INTDIR)\drvconn.obj"
-@erase "$(INTDIR)\environ.obj" -@erase "$(INTDIR)\environ.obj"
-@erase "$(INTDIR)\execute.obj" -@erase "$(INTDIR)\execute.obj"
...@@ -235,6 +238,7 @@ CLEAN : ...@@ -235,6 +238,7 @@ CLEAN :
-@erase "$(OUTDIR)\psqlodbc.ilk" -@erase "$(OUTDIR)\psqlodbc.ilk"
-@erase "$(OUTDIR)\psqlodbc.lib" -@erase "$(OUTDIR)\psqlodbc.lib"
-@erase "$(OUTDIR)\psqlodbc.pdb" -@erase "$(OUTDIR)\psqlodbc.pdb"
-@erase "$(OUTDIR)\psqlodbc.pch"
"$(OUTDIR)" : "$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
...@@ -293,6 +297,7 @@ LINK32_OBJS= \ ...@@ -293,6 +297,7 @@ LINK32_OBJS= \
"$(INTDIR)\connection.obj" \ "$(INTDIR)\connection.obj" \
"$(INTDIR)\convert.obj" \ "$(INTDIR)\convert.obj" \
"$(INTDIR)\dlg_specific.obj" \ "$(INTDIR)\dlg_specific.obj" \
"$(INTDIR)\dlg_wingui.obj" \
"$(INTDIR)\drvconn.obj" \ "$(INTDIR)\drvconn.obj" \
"$(INTDIR)\environ.obj" \ "$(INTDIR)\environ.obj" \
"$(INTDIR)\execute.obj" \ "$(INTDIR)\execute.obj" \
...@@ -359,6 +364,12 @@ SOURCE=dlg_specific.c ...@@ -359,6 +364,12 @@ SOURCE=dlg_specific.c
$(CPP) $(CPP_PROJ) $(SOURCE) $(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=dlg_wingui.c
"$(INTDIR)\dlg_wingui.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=drvconn.c SOURCE=drvconn.c
"$(INTDIR)\drvconn.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\drvconn.obj" : $(SOURCE) "$(INTDIR)"
......
...@@ -54,6 +54,7 @@ CLEAN : ...@@ -54,6 +54,7 @@ CLEAN :
-@erase "$(INTDIR)\connection.obj" -@erase "$(INTDIR)\connection.obj"
-@erase "$(INTDIR)\convert.obj" -@erase "$(INTDIR)\convert.obj"
-@erase "$(INTDIR)\dlg_specific.obj" -@erase "$(INTDIR)\dlg_specific.obj"
-@erase "$(INTDIR)\dlg_wingui.obj"
-@erase "$(INTDIR)\drvconn.obj" -@erase "$(INTDIR)\drvconn.obj"
-@erase "$(INTDIR)\environ.obj" -@erase "$(INTDIR)\environ.obj"
-@erase "$(INTDIR)\execute.obj" -@erase "$(INTDIR)\execute.obj"
...@@ -85,6 +86,7 @@ CLEAN : ...@@ -85,6 +86,7 @@ CLEAN :
-@erase "$(OUTDIR)\psqlodbc30w.dll" -@erase "$(OUTDIR)\psqlodbc30w.dll"
-@erase "$(OUTDIR)\psqlodbc.exp" -@erase "$(OUTDIR)\psqlodbc.exp"
-@erase "$(OUTDIR)\psqlodbc.lib" -@erase "$(OUTDIR)\psqlodbc.lib"
-@erase "$(OUTDIR)\psqlodbc.pch"
"$(OUTDIR)" : "$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
...@@ -139,6 +141,7 @@ LINK32_OBJS= \ ...@@ -139,6 +141,7 @@ LINK32_OBJS= \
"$(INTDIR)\connection.obj" \ "$(INTDIR)\connection.obj" \
"$(INTDIR)\convert.obj" \ "$(INTDIR)\convert.obj" \
"$(INTDIR)\dlg_specific.obj" \ "$(INTDIR)\dlg_specific.obj" \
"$(INTDIR)\dlg_wingui.obj" \
"$(INTDIR)\drvconn.obj" \ "$(INTDIR)\drvconn.obj" \
"$(INTDIR)\environ.obj" \ "$(INTDIR)\environ.obj" \
"$(INTDIR)\execute.obj" \ "$(INTDIR)\execute.obj" \
...@@ -183,6 +186,7 @@ CLEAN : ...@@ -183,6 +186,7 @@ CLEAN :
-@erase "$(INTDIR)\connection.obj" -@erase "$(INTDIR)\connection.obj"
-@erase "$(INTDIR)\convert.obj" -@erase "$(INTDIR)\convert.obj"
-@erase "$(INTDIR)\dlg_specific.obj" -@erase "$(INTDIR)\dlg_specific.obj"
-@erase "$(INTDIR)\dlg_wingui.obj"
-@erase "$(INTDIR)\drvconn.obj" -@erase "$(INTDIR)\drvconn.obj"
-@erase "$(INTDIR)\environ.obj" -@erase "$(INTDIR)\environ.obj"
-@erase "$(INTDIR)\execute.obj" -@erase "$(INTDIR)\execute.obj"
...@@ -217,6 +221,7 @@ CLEAN : ...@@ -217,6 +221,7 @@ CLEAN :
-@erase "$(OUTDIR)\psqlodbc.ilk" -@erase "$(OUTDIR)\psqlodbc.ilk"
-@erase "$(OUTDIR)\psqlodbc.lib" -@erase "$(OUTDIR)\psqlodbc.lib"
-@erase "$(OUTDIR)\psqlodbc.pdb" -@erase "$(OUTDIR)\psqlodbc.pdb"
-@erase "$(OUTDIR)\psqlodbc.pch"
"$(OUTDIR)" : "$(OUTDIR)" :
if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
...@@ -271,6 +276,7 @@ LINK32_OBJS= \ ...@@ -271,6 +276,7 @@ LINK32_OBJS= \
"$(INTDIR)\connection.obj" \ "$(INTDIR)\connection.obj" \
"$(INTDIR)\convert.obj" \ "$(INTDIR)\convert.obj" \
"$(INTDIR)\dlg_specific.obj" \ "$(INTDIR)\dlg_specific.obj" \
"$(INTDIR)\dlg_wingui.obj" \
"$(INTDIR)\drvconn.obj" \ "$(INTDIR)\drvconn.obj" \
"$(INTDIR)\environ.obj" \ "$(INTDIR)\environ.obj" \
"$(INTDIR)\execute.obj" \ "$(INTDIR)\execute.obj" \
...@@ -338,6 +344,12 @@ SOURCE=dlg_specific.c ...@@ -338,6 +344,12 @@ SOURCE=dlg_specific.c
$(CPP) $(CPP_PROJ) $(SOURCE) $(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=dlg_wingui.c
"$(INTDIR)\dlg_wingui.obj" : $(SOURCE) "$(INTDIR)"
$(CPP) $(CPP_PROJ) $(SOURCE)
SOURCE=drvconn.c SOURCE=drvconn.c
"$(INTDIR)\drvconn.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\drvconn.obj" : $(SOURCE) "$(INTDIR)"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment