Commit 5a832218 authored by Bruce Momjian's avatar Bruce Momjian

odbc1.diff changes the text on the Protocol Radio buttons on the driver

dialogue from '6.4/6.5' to '6.5+' and removes some C++ comments from
resource.h (which VC++ insists on putting there).

odbc2.diff adds code to query the PostgreSQL version upon connection. This
is then used to determine what values to return for from SQLGetInfo for
SQL_DBMS_VER, SQL_MAX_ROW_SIZE, SQL_MAX_STATEMENT_LEN, SQL_OJ_CAPABILITIES
and SQL_OUTER_JOINS. The version string as returned by SELECT vERSION() (as
a char array) and the major.minor version number (as a flost) have been
added to the ConnectionClass structure.

Dave Page
parent 7edafafd
...@@ -699,6 +699,7 @@ static char *func="CC_connect"; ...@@ -699,6 +699,7 @@ static char *func="CC_connect";
*/ */
CC_send_settings(self); CC_send_settings(self);
CC_lookup_lo(self); /* a hack to get the oid of our large object oid type */ CC_lookup_lo(self); /* a hack to get the oid of our large object oid type */
CC_lookup_pg_version(self); /* Get PostgreSQL version for SQLGetInfo use */
CC_clear_error(self); /* clear any initial command errors */ CC_clear_error(self); /* clear any initial command errors */
self->status = CONN_CONNECTED; self->status = CONN_CONNECTED;
...@@ -1364,6 +1365,62 @@ static char *func = "CC_lookup_lo"; ...@@ -1364,6 +1365,62 @@ static char *func = "CC_lookup_lo";
result = SQLFreeStmt(hstmt, SQL_DROP); result = SQLFreeStmt(hstmt, SQL_DROP);
} }
/* This function gets the version of PostgreSQL that we're connected to.
This is used to return the correct info in SQLGetInfo
DJP - 25-1-2001
*/
void
CC_lookup_pg_version(ConnectionClass *self)
{
HSTMT hstmt;
StatementClass *stmt;
RETCODE result;
char *szVersion = "0.0";
static char *func = "CC_lookup_pg_version";
mylog( "%s: entering...\n", func);
/* This function must use the local odbc API functions since the odbc state
has not transitioned to "connected" yet.
*/
result = SQLAllocStmt( self, &hstmt);
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
return;
}
stmt = (StatementClass *) hstmt;
result = SQLExecDirect(hstmt, "select version()", SQL_NTS);
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
SQLFreeStmt(hstmt, SQL_DROP);
return;
}
result = SQLFetch(hstmt);
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
SQLFreeStmt(hstmt, SQL_DROP);
return;
}
result = SQLGetData(hstmt, 1, SQL_C_CHAR, self->pg_version, MAX_INFO_STRING, NULL);
if((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) {
SQLFreeStmt(hstmt, SQL_DROP);
return;
}
/* There's proably a nicer way of doing this... */
/* Extract the Major and Minor numbers from the string. */
/* This assumes the string starts 'Postgresql X.X' */
sprintf(szVersion, "%c.%c", self->pg_version[11], self->pg_version[13]);
self->pg_version_number = (float) atof(szVersion);
mylog("Got the PostgreSQL version string: '%s'\n", self->pg_version);
mylog("Extracted PostgreSQL version number: '%1.1f'\n", self->pg_version_number);
qlog(" [ PostgreSQL version string = '%s' ]\n", self->pg_version);
qlog(" [ PostgreSQL version number = '%1.1f' ]\n", self->pg_version_number);
result = SQLFreeStmt(hstmt, SQL_DROP);
}
void void
CC_log_error(char *func, char *desc, ConnectionClass *self) CC_log_error(char *func, char *desc, ConnectionClass *self)
{ {
......
...@@ -221,6 +221,8 @@ struct ConnectionClass_ { ...@@ -221,6 +221,8 @@ struct ConnectionClass_ {
DriverToDataSourceProc DriverToDataSource; DriverToDataSourceProc DriverToDataSource;
char transact_status; /* Is a transaction is currently in progress */ char transact_status; /* Is a transaction is currently in progress */
char errormsg_created; /* has an informative error msg been created? */ char errormsg_created; /* has an informative error msg been created? */
char pg_version[MAX_INFO_STRING]; /* Version of PostgreSQL we're connected to - DJP 25-1-2001 */
float pg_version_number;
}; };
...@@ -255,6 +257,7 @@ char *CC_create_errormsg(ConnectionClass *self); ...@@ -255,6 +257,7 @@ char *CC_create_errormsg(ConnectionClass *self);
int CC_send_function(ConnectionClass *conn, int fnid, void *result_buf, int *actual_result_len, int result_is_int, LO_ARG *argv, int nargs); int CC_send_function(ConnectionClass *conn, int fnid, void *result_buf, int *actual_result_len, int result_is_int, LO_ARG *argv, int nargs);
char CC_send_settings(ConnectionClass *self); char CC_send_settings(ConnectionClass *self);
void CC_lookup_lo(ConnectionClass *conn); void CC_lookup_lo(ConnectionClass *conn);
void CC_lookup_pg_version(ConnectionClass *conn);
void CC_log_error(char *func, char *desc, ConnectionClass *self); void CC_log_error(char *func, char *desc, ConnectionClass *self);
......
...@@ -191,7 +191,11 @@ RETCODE result; ...@@ -191,7 +191,11 @@ RETCODE result;
break; break;
case SQL_DBMS_VER: /* ODBC 1.0 */ case SQL_DBMS_VER: /* ODBC 1.0 */
p = DBMS_VERSION; /* The ODBC spec wants ##.##.#### ...whatever... so prepend the driver */
/* version number to the dbms version string */
p = POSTGRESDRIVERVERSION;
strcat(p, " ");
strcat(p, conn->pg_version);
break; break;
case SQL_DEFAULT_TXN_ISOLATION: /* ODBC 1.0 */ case SQL_DEFAULT_TXN_ISOLATION: /* ODBC 1.0 */
...@@ -337,7 +341,11 @@ RETCODE result; ...@@ -337,7 +341,11 @@ RETCODE result;
case SQL_MAX_ROW_SIZE: /* ODBC 2.0 */ case SQL_MAX_ROW_SIZE: /* ODBC 2.0 */
len = 4; len = 4;
if (conn->pg_version_number >= (float) 7.1) { /* Large Rowa in 7.1+ */
value = MAX_ROW_SIZE; value = MAX_ROW_SIZE;
} else { /* Without the Toaster we're limited to the blocksize */
value = BLCKSZ;
}
break; break;
case SQL_MAX_ROW_SIZE_INCLUDES_LONG: /* ODBC 2.0 */ case SQL_MAX_ROW_SIZE_INCLUDES_LONG: /* ODBC 2.0 */
...@@ -350,7 +358,11 @@ RETCODE result; ...@@ -350,7 +358,11 @@ RETCODE result;
case SQL_MAX_STATEMENT_LEN: /* ODBC 2.0 */ case SQL_MAX_STATEMENT_LEN: /* ODBC 2.0 */
/* maybe this should be 0? */ /* maybe this should be 0? */
len = 4; len = 4;
if (conn->pg_version_number >= (float) 7.0) { /* Long Queries in 7.0+ */
value = MAX_STATEMENT_LEN; value = MAX_STATEMENT_LEN;
} else { /* Prior to 7.0 we used 2*BLCKSZ */
value = (2*BLCKSZ);
}
break; break;
case SQL_MAX_TABLE_NAME_LEN: /* ODBC 1.0 */ case SQL_MAX_TABLE_NAME_LEN: /* ODBC 1.0 */
...@@ -419,6 +431,7 @@ RETCODE result; ...@@ -419,6 +431,7 @@ RETCODE result;
case SQL_OJ_CAPABILITIES: /* ODBC 2.01 */ case SQL_OJ_CAPABILITIES: /* ODBC 2.01 */
len = 4; len = 4;
if (conn->pg_version_number >= (float) 7.1) { /* OJs in 7.1+ */
value = (SQL_OJ_LEFT | value = (SQL_OJ_LEFT |
SQL_OJ_RIGHT | SQL_OJ_RIGHT |
SQL_OJ_FULL | SQL_OJ_FULL |
...@@ -426,6 +439,9 @@ RETCODE result; ...@@ -426,6 +439,9 @@ RETCODE result;
SQL_OJ_NOT_ORDERED | SQL_OJ_NOT_ORDERED |
SQL_OJ_INNER | SQL_OJ_INNER |
SQL_OJ_ALL_COMPARISON_OPS); SQL_OJ_ALL_COMPARISON_OPS);
} else { /* OJs not in <7.1 */
value = 0;
}
break; break;
case SQL_ORDER_BY_COLUMNS_IN_SELECT: /* ODBC 2.0 */ case SQL_ORDER_BY_COLUMNS_IN_SELECT: /* ODBC 2.0 */
...@@ -433,7 +449,11 @@ RETCODE result; ...@@ -433,7 +449,11 @@ RETCODE result;
break; break;
case SQL_OUTER_JOINS: /* ODBC 1.0 */ case SQL_OUTER_JOINS: /* ODBC 1.0 */
if (conn->pg_version_number >= (float) 7.1) { /* OJs in 7.1+ */
p = "Y"; p = "Y";
} else { /* OJs not in <7.1 */
p = "N";
}
break; break;
case SQL_OWNER_TERM: /* ODBC 1.0 */ case SQL_OWNER_TERM: /* ODBC 1.0 */
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Comments: See "notice.txt" for copyright and license information. * Comments: See "notice.txt" for copyright and license information.
* *
* $Id: psqlodbc.h,v 1.28 2001/01/26 22:25:36 tgl Exp $ * $Id: psqlodbc.h,v 1.29 2001/01/26 22:41:59 momjian Exp $
*/ */
#ifndef __PSQLODBC_H__ #ifndef __PSQLODBC_H__
...@@ -41,8 +41,7 @@ typedef UInt4 Oid; ...@@ -41,8 +41,7 @@ typedef UInt4 Oid;
#define DRIVERNAME "PostgreSQL ODBC" #define DRIVERNAME "PostgreSQL ODBC"
#define DBMS_NAME "PostgreSQL" #define DBMS_NAME "PostgreSQL"
#define DBMS_VERSION "7.1.0000 PostgreSQL 7.1" #define POSTGRESDRIVERVERSION "07.01.0001"
#define POSTGRESDRIVERVERSION "7.1.0000"
#ifdef WIN32 #ifdef WIN32
#define DRIVER_FILE_NAME "PSQLODBC.DLL" #define DRIVER_FILE_NAME "PSQLODBC.DLL"
......
...@@ -145,8 +145,8 @@ BEGIN ...@@ -145,8 +145,8 @@ BEGIN
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,25,85,10
GROUPBOX "Protocol",IDC_STATIC,15,40,180,25 GROUPBOX "Protocol",IDC_STATIC,15,40,180,25
CONTROL "6.5/6.4",DS_PG64,"Button",BS_AUTORADIOBUTTON | WS_GROUP, CONTROL "6.4+",DS_PG64,"Button",BS_AUTORADIOBUTTON | WS_GROUP,25,
25,50,35,10 50,35,10
CONTROL "6.3",DS_PG63,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP, CONTROL "6.3",DS_PG63,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
75,50,26,10 75,50,26,10
CONTROL "6.2",DS_PG62,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP, CONTROL "6.2",DS_PG62,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
...@@ -204,8 +204,8 @@ END ...@@ -204,8 +204,8 @@ END
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 7,1,0,0 FILEVERSION 7,1,0,1
PRODUCTVERSION 7,1,0,0 PRODUCTVERSION 7,1,0,1
FILEFLAGSMASK 0x3L FILEFLAGSMASK 0x3L
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
...@@ -223,14 +223,14 @@ BEGIN ...@@ -223,14 +223,14 @@ BEGIN
VALUE "Comments", "PostgreSQL ODBC driver\0" VALUE "Comments", "PostgreSQL ODBC driver\0"
VALUE "CompanyName", "Insight Distribution Systems\0" VALUE "CompanyName", "Insight Distribution Systems\0"
VALUE "FileDescription", "PostgreSQL Driver\0" VALUE "FileDescription", "PostgreSQL Driver\0"
VALUE "FileVersion", " 7.1.0000\0" VALUE "FileVersion", " 07.01.0001\0"
VALUE "InternalName", "psqlodbc\0" VALUE "InternalName", "psqlodbc\0"
VALUE "LegalCopyright", "\0" VALUE "LegalCopyright", "\0"
VALUE "LegalTrademarks", "ODBC(TM) is a trademark of Microsoft Corporation. Microsoft is a registered trademark of Microsoft Corporation. Windows(TM) is a trademark of Microsoft Corporation.\0" VALUE "LegalTrademarks", "ODBC(TM) is a trademark of Microsoft Corporation. Microsoft is a registered trademark of Microsoft Corporation. Windows(TM) is a trademark of Microsoft Corporation.\0"
VALUE "OriginalFilename", "psqlodbc.dll\0" VALUE "OriginalFilename", "psqlodbc.dll\0"
VALUE "PrivateBuild", "\0" VALUE "PrivateBuild", "\0"
VALUE "ProductName", "Microsoft Open Database Connectivity\0" VALUE "ProductName", "Microsoft Open Database Connectivity\0"
VALUE "ProductVersion", " 7.1.0000\0" VALUE "ProductVersion", " 07.01.0001\0"
VALUE "SpecialBuild", "\0" VALUE "SpecialBuild", "\0"
END END
END END
......
//{{NO_DEPENDENCIES}} /* {{NO_DEPENDENCIES}} */
// Microsoft Developer Studio generated include file. /* Microsoft Developer Studio generated include file. */
// Used by psqlodbc.rc /* Used by psqlodbc.rc */
//
#define IDS_BADDSN 1 #define IDS_BADDSN 1
#define IDS_MSGTITLE 2 #define IDS_MSGTITLE 2
#define DLG_OPTIONS_DRV 102 #define DLG_OPTIONS_DRV 102
...@@ -50,8 +50,8 @@ ...@@ -50,8 +50,8 @@
#define DS_PG64 1057 #define DS_PG64 1057
#define DS_PG63 1058 #define DS_PG63 1058
// Next default values for new objects /* Next default values for new objects */
//
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 104 #define _APS_NEXT_RESOURCE_VALUE 104
......
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