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
This commit is contained in:
parent
7edafafd73
commit
5a832218fd
@ -699,6 +699,7 @@ static char *func="CC_connect";
|
||||
*/
|
||||
CC_send_settings(self);
|
||||
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 */
|
||||
self->status = CONN_CONNECTED;
|
||||
@ -1364,6 +1365,62 @@ static char *func = "CC_lookup_lo";
|
||||
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
|
||||
CC_log_error(char *func, char *desc, ConnectionClass *self)
|
||||
{
|
||||
|
@ -221,6 +221,8 @@ struct ConnectionClass_ {
|
||||
DriverToDataSourceProc DriverToDataSource;
|
||||
char transact_status; /* Is a transaction is currently in progress */
|
||||
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);
|
||||
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);
|
||||
void CC_lookup_lo(ConnectionClass *conn);
|
||||
void CC_lookup_pg_version(ConnectionClass *conn);
|
||||
void CC_log_error(char *func, char *desc, ConnectionClass *self);
|
||||
|
||||
|
||||
|
@ -191,7 +191,11 @@ RETCODE result;
|
||||
break;
|
||||
|
||||
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;
|
||||
|
||||
case SQL_DEFAULT_TXN_ISOLATION: /* ODBC 1.0 */
|
||||
@ -337,7 +341,11 @@ RETCODE result;
|
||||
|
||||
case SQL_MAX_ROW_SIZE: /* ODBC 2.0 */
|
||||
len = 4;
|
||||
value = MAX_ROW_SIZE;
|
||||
if (conn->pg_version_number >= (float) 7.1) { /* Large Rowa in 7.1+ */
|
||||
value = MAX_ROW_SIZE;
|
||||
} else { /* Without the Toaster we're limited to the blocksize */
|
||||
value = BLCKSZ;
|
||||
}
|
||||
break;
|
||||
|
||||
case SQL_MAX_ROW_SIZE_INCLUDES_LONG: /* ODBC 2.0 */
|
||||
@ -350,7 +358,11 @@ RETCODE result;
|
||||
case SQL_MAX_STATEMENT_LEN: /* ODBC 2.0 */
|
||||
/* maybe this should be 0? */
|
||||
len = 4;
|
||||
value = MAX_STATEMENT_LEN;
|
||||
if (conn->pg_version_number >= (float) 7.0) { /* Long Queries in 7.0+ */
|
||||
value = MAX_STATEMENT_LEN;
|
||||
} else { /* Prior to 7.0 we used 2*BLCKSZ */
|
||||
value = (2*BLCKSZ);
|
||||
}
|
||||
break;
|
||||
|
||||
case SQL_MAX_TABLE_NAME_LEN: /* ODBC 1.0 */
|
||||
@ -419,13 +431,17 @@ RETCODE result;
|
||||
|
||||
case SQL_OJ_CAPABILITIES: /* ODBC 2.01 */
|
||||
len = 4;
|
||||
value = (SQL_OJ_LEFT |
|
||||
SQL_OJ_RIGHT |
|
||||
SQL_OJ_FULL |
|
||||
SQL_OJ_NESTED |
|
||||
SQL_OJ_NOT_ORDERED |
|
||||
SQL_OJ_INNER |
|
||||
SQL_OJ_ALL_COMPARISON_OPS);
|
||||
if (conn->pg_version_number >= (float) 7.1) { /* OJs in 7.1+ */
|
||||
value = (SQL_OJ_LEFT |
|
||||
SQL_OJ_RIGHT |
|
||||
SQL_OJ_FULL |
|
||||
SQL_OJ_NESTED |
|
||||
SQL_OJ_NOT_ORDERED |
|
||||
SQL_OJ_INNER |
|
||||
SQL_OJ_ALL_COMPARISON_OPS);
|
||||
} else { /* OJs not in <7.1 */
|
||||
value = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case SQL_ORDER_BY_COLUMNS_IN_SELECT: /* ODBC 2.0 */
|
||||
@ -433,7 +449,11 @@ RETCODE result;
|
||||
break;
|
||||
|
||||
case SQL_OUTER_JOINS: /* ODBC 1.0 */
|
||||
p = "Y";
|
||||
if (conn->pg_version_number >= (float) 7.1) { /* OJs in 7.1+ */
|
||||
p = "Y";
|
||||
} else { /* OJs not in <7.1 */
|
||||
p = "N";
|
||||
}
|
||||
break;
|
||||
|
||||
case SQL_OWNER_TERM: /* ODBC 1.0 */
|
||||
|
@ -6,7 +6,7 @@
|
||||
*
|
||||
* 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__
|
||||
@ -41,8 +41,7 @@ typedef UInt4 Oid;
|
||||
#define DRIVERNAME "PostgreSQL ODBC"
|
||||
#define DBMS_NAME "PostgreSQL"
|
||||
|
||||
#define DBMS_VERSION "7.1.0000 PostgreSQL 7.1"
|
||||
#define POSTGRESDRIVERVERSION "7.1.0000"
|
||||
#define POSTGRESDRIVERVERSION "07.01.0001"
|
||||
|
||||
#ifdef WIN32
|
||||
#define DRIVER_FILE_NAME "PSQLODBC.DLL"
|
||||
|
@ -145,8 +145,8 @@ BEGIN
|
||||
CONTROL "Show System &Tables",DS_SHOWSYSTEMTABLES,"Button",
|
||||
BS_AUTOCHECKBOX | WS_TABSTOP,25,25,85,10
|
||||
GROUPBOX "Protocol",IDC_STATIC,15,40,180,25
|
||||
CONTROL "6.5/6.4",DS_PG64,"Button",BS_AUTORADIOBUTTON | WS_GROUP,
|
||||
25,50,35,10
|
||||
CONTROL "6.4+",DS_PG64,"Button",BS_AUTORADIOBUTTON | WS_GROUP,25,
|
||||
50,35,10
|
||||
CONTROL "6.3",DS_PG63,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
|
||||
75,50,26,10
|
||||
CONTROL "6.2",DS_PG62,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,
|
||||
@ -204,8 +204,8 @@ END
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 7,1,0,0
|
||||
PRODUCTVERSION 7,1,0,0
|
||||
FILEVERSION 7,1,0,1
|
||||
PRODUCTVERSION 7,1,0,1
|
||||
FILEFLAGSMASK 0x3L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
@ -223,14 +223,14 @@ BEGIN
|
||||
VALUE "Comments", "PostgreSQL ODBC driver\0"
|
||||
VALUE "CompanyName", "Insight Distribution Systems\0"
|
||||
VALUE "FileDescription", "PostgreSQL Driver\0"
|
||||
VALUE "FileVersion", " 7.1.0000\0"
|
||||
VALUE "FileVersion", " 07.01.0001\0"
|
||||
VALUE "InternalName", "psqlodbc\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 "OriginalFilename", "psqlodbc.dll\0"
|
||||
VALUE "PrivateBuild", "\0"
|
||||
VALUE "ProductName", "Microsoft Open Database Connectivity\0"
|
||||
VALUE "ProductVersion", " 7.1.0000\0"
|
||||
VALUE "ProductVersion", " 07.01.0001\0"
|
||||
VALUE "SpecialBuild", "\0"
|
||||
END
|
||||
END
|
||||
|
@ -1,7 +1,7 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Developer Studio generated include file.
|
||||
// Used by psqlodbc.rc
|
||||
//
|
||||
/* {{NO_DEPENDENCIES}} */
|
||||
/* Microsoft Developer Studio generated include file. */
|
||||
/* Used by psqlodbc.rc */
|
||||
|
||||
#define IDS_BADDSN 1
|
||||
#define IDS_MSGTITLE 2
|
||||
#define DLG_OPTIONS_DRV 102
|
||||
@ -50,8 +50,8 @@
|
||||
#define DS_PG64 1057
|
||||
#define DS_PG63 1058
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
/* Next default values for new objects */
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 104
|
||||
|
Loading…
x
Reference in New Issue
Block a user