*/
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;
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)
{
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;
};
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);
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 */
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 */
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 */
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 */
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 */
*
* 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__
#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"
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,
//
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
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
-//{{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
#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