Update 06-40-0003
authorByron Nikolaidis
Wed, 6 Jan 1999 20:44:08 +0000 (20:44 +0000)
committerByron Nikolaidis
Wed, 6 Jan 1999 20:44:08 +0000 (20:44 +0000)
src/interfaces/odbc/convert.c
src/interfaces/odbc/dlg_specific.c
src/interfaces/odbc/dlg_specific.h
src/interfaces/odbc/drvconn.c
src/interfaces/odbc/info.c
src/interfaces/odbc/pgtypes.c
src/interfaces/odbc/pgtypes.h
src/interfaces/odbc/psqlodbc.h
src/interfaces/odbc/psqlodbc.rc
src/interfaces/odbc/setup.rul

index 73e92e16c04e4f985e0b6431415d98db632f8d8b..7fd1940b00fb4acd0216c756076930cd1389d4bf 100644 (file)
@@ -579,7 +579,6 @@ int lobj_fd, retval;
        return SQL_ERROR;
    }
 
-
    memset(&st, 0, sizeof(SIMPLE_TIME));
 
    /*  Initialize current date */
@@ -1141,7 +1140,7 @@ char *p;
    for (i = 0; i < max; i++) {
        if (si[i] == '\r' && i+1 < strlen(si) && si[i+1] == '\n') 
            continue;
-       if (si[i] == '\'')
+       else if (si[i] == '\'' || si[i] == '\\')
            p[out++] = '\\';
 
        p[out++] = si[i];
index ac83a2345f77b514030f2f95ef8b45c72511eb85..6e23bef3dfab7d35a691077433e50b4448f2f8ce 100644 (file)
@@ -248,7 +248,7 @@ char buf[128];
            CheckDlgButton(hdlg, DS_PG62, 1);
        else if (strncmp(ci->protocol, PG63, strlen(PG63)) == 0)
            CheckDlgButton(hdlg, DS_PG63, 1);
-       else 
+       else /* latest */
            CheckDlgButton(hdlg, DS_PG64, 1);
 
 
@@ -286,8 +286,8 @@ char buf[128];
                strcpy(ci->protocol, PG62);
            else if ( IsDlgButtonChecked(hdlg, DS_PG63))
                strcpy(ci->protocol, PG63);
-           else
-               ci->protocol[0] = '\0';
+           else    /* latest */
+               strcpy(ci->protocol, PG64);
 
            sprintf(ci->show_system_tables, "%d", IsDlgButtonChecked(hdlg, DS_SHOWSYSTEMTABLES));
 
@@ -405,6 +405,9 @@ getDSNdefaults(ConnInfo *ci)
    if (ci->readonly[0] == '\0')
        sprintf(ci->readonly, "%d", globals.readonly);
 
+   if (ci->protocol[0] == '\0')
+       strcpy(ci->protocol, globals.protocol);
+
    if (ci->fake_oid_index[0] == '\0')
        sprintf(ci->fake_oid_index, "%d", DEFAULT_FAKEOIDINDEX);
 
@@ -695,13 +698,6 @@ char temp[256];
    else if ( ! override)
        globals.cancel_as_freestmt = DEFAULT_CANCELASFREESTMT;
 
-   //  Readonly is stored in the driver section AND per datasource
-   SQLGetPrivateProfileString(section, INI_READONLY, "", 
-               temp, sizeof(temp), filename);
-   if ( temp[0] ) 
-       globals.readonly = atoi(temp);
-   else if ( ! override)
-       globals.readonly = DEFAULT_READONLY;
 
 
    //  UseDeclareFetch is stored in the driver section only
@@ -772,6 +768,25 @@ char temp[256];
        SQLGetPrivateProfileString(section, INI_CONNSETTINGS, "", 
                    globals.conn_settings, sizeof(globals.conn_settings), filename);
 
+       //  Default state for future DSN's Readonly attribute
+       SQLGetPrivateProfileString(section, INI_READONLY, "", 
+                   temp, sizeof(temp), filename);
+       if ( temp[0] ) 
+           globals.readonly = atoi(temp);
+       else
+           globals.readonly = DEFAULT_READONLY;
+
+       /*  Default state for future DSN's protocol attribute
+           This isn't a real driver option YET.  This is more
+           intended for customization from the install.
+       */
+       SQLGetPrivateProfileString(section, INI_PROTOCOL, "@@@", 
+               temp, sizeof(temp), filename);
+       if ( strcmp(temp, "@@@" ))  
+           strcpy(globals.protocol, temp);
+       else 
+           strcpy(globals.protocol, DEFAULT_PROTOCOL);
+   
    }
 }
 
index 02a77889967afde0faf0ff04c36939b51cebf919..7fff962a9fdc475167966bbfe845eea6fd71f87e 100644 (file)
@@ -91,6 +91,7 @@
 /* Connection Defaults */
 #define DEFAULT_PORT                   "5432"
 #define DEFAULT_READONLY               1
+#define DEFAULT_PROTOCOL               "6.4"       // the latest protocol is the default
 #define DEFAULT_USEDECLAREFETCH            0
 #define DEFAULT_TEXTASLONGVARCHAR      1
 #define DEFAULT_UNKNOWNSASLONGVARCHAR  0
index cfb514c7fc5c2f49010c4830daf471ec0cb5aca8..c9a98cc037e2bacfc9667829793c916f16d18669 100644 (file)
@@ -79,8 +79,9 @@ static char *func = "SQLDriverConnect";
 ConnectionClass *conn = (ConnectionClass *) hdbc;
 ConnInfo *ci;
 #ifdef WIN32
-RETCODE dialog_result, result;
+RETCODE dialog_result;
 #endif
+RETCODE result;
 char connStrIn[MAX_CONNECT_STRING];
 char connStrOut[MAX_CONNECT_STRING];
 int retval;
index 888a46fbedada89911243d8ed5ea2154d328be08..9a001264e6252a53ad53ca6a309a660df2e2a5db 100644 (file)
@@ -710,40 +710,6 @@ Int2 sqlType;
        }
    }
 
-    // cycle through the types
-//    for(i=0, type = pgtypes_defined[0]; type; type = pgtypes_defined[++i]) {
-
-//     if(fSqlType == SQL_ALL_TYPES || fSqlType == pgtype_to_sqltype(stmt, type)) {
-
-//         row = (TupleNode *)malloc(sizeof(TupleNode) + (15 - 1)*sizeof(TupleField));
-
-           /*  These values can't be NULL */
-/*
-           set_tuplefield_string(&row->tuple[0], pgtype_to_name(stmt, type));
-           set_tuplefield_int2(&row->tuple[1], pgtype_to_sqltype(stmt, type));
-           set_tuplefield_int2(&row->tuple[6], pgtype_nullable(stmt, type));
-           set_tuplefield_int2(&row->tuple[7], pgtype_case_sensitive(stmt, type));
-           set_tuplefield_int2(&row->tuple[8], pgtype_searchable(stmt, type));
-           set_tuplefield_int2(&row->tuple[10], pgtype_money(stmt, type));
-*/
-           /*  Localized data-source dependent data type name (always NULL) */
-//         set_tuplefield_null(&row->tuple[12]);   
-
-           /*  These values can be NULL */
-/*
-           set_nullfield_int4(&row->tuple[2], pgtype_precision(stmt, type, PG_STATIC, PG_STATIC));
-           set_nullfield_string(&row->tuple[3], pgtype_literal_prefix(stmt, type));
-           set_nullfield_string(&row->tuple[4], pgtype_literal_suffix(stmt, type));
-           set_nullfield_string(&row->tuple[5], pgtype_create_params(stmt, type));
-           set_nullfield_int2(&row->tuple[9], pgtype_unsigned(stmt, type));
-           set_nullfield_int2(&row->tuple[11], pgtype_auto_increment(stmt, type));
-           set_nullfield_int2(&row->tuple[13], pgtype_scale(stmt, type));
-           set_nullfield_int2(&row->tuple[14], pgtype_scale(stmt, type));
-
-           QR_add_tuple(stmt->result, row);
-*/
-//     }
-//    }
 
     stmt->status = STMT_FINISHED;
     stmt->currTuple = -1;
index 169f9346ca8dd7817e226857b76c15582fa25c4c..b3a9d94b1a6bf3888745ec1342650a6a70f0f4c9 100644 (file)
@@ -44,10 +44,13 @@ Int4 getCharPrecision(StatementClass *stmt, Int4 type, int col, int handle_unkno
 
 /* these are the types we support.  all of the pgtype_ functions should */
 /* return values for each one of these.                                 */
+/* Even types not directly supported are handled as character types    
+   so all types should work (points, etc.) */
 
-/* NOTE: Even types not directly supported are handled as character types
-       so all types should work (points, etc.) */
-
+/* ALL THESE TYPES ARE NO LONGER REPORTED in SQLGetTypeInfo.  Instead, all
+   the SQL TYPES are reported and mapped to a corresponding Postgres Type 
+*/
+/*
 Int4 pgtypes_defined[]  = { 
                PG_TYPE_CHAR,
                PG_TYPE_CHAR2,
@@ -60,7 +63,7 @@ Int4 pgtypes_defined[]  = {
                PG_TYPE_DATE,
                PG_TYPE_TIME,
                PG_TYPE_DATETIME,
-               PG_TYPE_ABSTIME,    /* a timestamp, sort of */
+               PG_TYPE_ABSTIME,
                PG_TYPE_TIMESTAMP,
                PG_TYPE_TEXT,
                PG_TYPE_INT2,
@@ -73,11 +76,13 @@ Int4 pgtypes_defined[]  = {
                PG_TYPE_BYTEA,
                PG_TYPE_LO,
                0 };
+*/
+
 
-/* These are the SQL Types reported in SQLGetTypeInfo.  */
+/* These are NOW the SQL Types reported in SQLGetTypeInfo.  */
 Int2 sqlTypes [] = {
    SQL_BIGINT,
-   /* SQL_BINARY, */
+   /* SQL_BINARY, -- Commented out because VarBinary is more correct. */
    SQL_BIT,
    SQL_CHAR,
    SQL_DATE,
@@ -201,8 +206,11 @@ Int2 pgtype_to_sqltype(StatementClass *stmt, Int4 type)
    case PG_TYPE_LO:            return SQL_LONGVARBINARY;
 
    case PG_TYPE_INT2:          return SQL_SMALLINT;
+
    case PG_TYPE_OID:
+   case PG_TYPE_XID:
    case PG_TYPE_INT4:          return SQL_INTEGER;
+
    case PG_TYPE_FLOAT4:        return SQL_REAL;
    case PG_TYPE_FLOAT8:        return SQL_FLOAT;
    case PG_TYPE_DATE:          return SQL_DATE;
@@ -230,6 +238,7 @@ Int2 pgtype_to_ctype(StatementClass *stmt, Int4 type)
    switch(type) {
    case PG_TYPE_INT2:          return SQL_C_SSHORT;
    case PG_TYPE_OID:
+   case PG_TYPE_XID:
    case PG_TYPE_INT4:          return SQL_C_SLONG;
    case PG_TYPE_FLOAT4:        return SQL_C_FLOAT;
    case PG_TYPE_FLOAT8:        return SQL_C_DOUBLE;
@@ -375,6 +384,7 @@ Int4 pgtype_precision(StatementClass *stmt, Int4 type, int col, int handle_unkno
    case PG_TYPE_INT2:          return 5;
 
    case PG_TYPE_OID:
+   case PG_TYPE_XID:
    case PG_TYPE_INT4:          return 10;
 
    case PG_TYPE_FLOAT4:        
@@ -408,7 +418,8 @@ Int4 pgtype_display_size(StatementClass *stmt, Int4 type, int col, int handle_un
    switch(type) {
    case PG_TYPE_INT2:          return 6;
 
-   case PG_TYPE_OID:           return 10;
+   case PG_TYPE_OID:
+   case PG_TYPE_XID:           return 10;
 
    case PG_TYPE_INT4:          return 11;
 
@@ -434,6 +445,7 @@ Int4 pgtype_length(StatementClass *stmt, Int4 type, int col, int handle_unknown_
    case PG_TYPE_INT2:          return 2;
 
    case PG_TYPE_OID:
+   case PG_TYPE_XID:
    case PG_TYPE_INT4:          return 4;
 
    case PG_TYPE_FLOAT4:
@@ -461,6 +473,7 @@ Int2 pgtype_scale(StatementClass *stmt, Int4 type)
 
    case PG_TYPE_INT2:
    case PG_TYPE_OID:
+   case PG_TYPE_XID:
    case PG_TYPE_INT4:
    case PG_TYPE_FLOAT4:
    case PG_TYPE_FLOAT8:
@@ -502,6 +515,7 @@ Int2 pgtype_auto_increment(StatementClass *stmt, Int4 type)
 
    case PG_TYPE_INT2:         
    case PG_TYPE_OID:
+   case PG_TYPE_XID:
    case PG_TYPE_INT4:         
    case PG_TYPE_FLOAT4:       
    case PG_TYPE_MONEY:
@@ -566,7 +580,8 @@ Int2 pgtype_searchable(StatementClass *stmt, Int4 type)
 Int2 pgtype_unsigned(StatementClass *stmt, Int4 type)
 {
    switch(type) {
-   case PG_TYPE_OID:           return TRUE;
+   case PG_TYPE_OID:
+   case PG_TYPE_XID:           return TRUE;
 
    case PG_TYPE_INT2:
    case PG_TYPE_INT4:
@@ -584,6 +599,7 @@ char *pgtype_literal_prefix(StatementClass *stmt, Int4 type)
 
    case PG_TYPE_INT2:
    case PG_TYPE_OID:
+   case PG_TYPE_XID:
    case PG_TYPE_INT4:
    case PG_TYPE_FLOAT4:
    case PG_TYPE_FLOAT8:        
@@ -599,6 +615,7 @@ char *pgtype_literal_suffix(StatementClass *stmt, Int4 type)
 
    case PG_TYPE_INT2:
    case PG_TYPE_OID:
+   case PG_TYPE_XID:
    case PG_TYPE_INT4:
    case PG_TYPE_FLOAT4:
    case PG_TYPE_FLOAT8:        
index b1da5aa2538aec949306639cc56012d5376b445d..3d97dec8c4015b748a19bf51ea434fc22f1a2fc6 100644 (file)
@@ -60,7 +60,7 @@
 #define PG_TYPE_DATETIME   1184
 #define PG_TYPE_TIMESTAMP  1296
 
-extern Int4 pgtypes_defined[];
+/* extern Int4 pgtypes_defined[]; */
 extern Int2 sqlTypes[];
 
 /* Defines for pgtype_precision */
index 7ca86920d9ca7228c915af3009731ff7f06be51a..8fcae8020b72fef0e535efa738be13b82ff00e6e 100644 (file)
@@ -39,8 +39,8 @@ typedef UInt4 Oid;
 
 #define DRIVERNAME             "PostgreSQL ODBC"
 #define DBMS_NAME              "PostgreSQL"
-#define DBMS_VERSION           "06.40.0002 PostgreSQL 6.4"
-#define POSTGRESDRIVERVERSION  "06.40.0002"
+#define DBMS_VERSION           "06.40.0003 PostgreSQL 6.4"
+#define POSTGRESDRIVERVERSION  "06.40.0003"
 
 #ifdef WIN32
 #define DRIVER_FILE_NAME       "PSQLODBC.DLL"
@@ -83,6 +83,7 @@ typedef UInt4 Oid;
 
 #define PG62   "6.2"       /* "Protocol" key setting to force Postgres 6.2 */
 #define PG63   "6.3"       /* "Protocol" key setting to force postgres 6.3 */
+#define PG64   "6.4"
 
 typedef struct ConnectionClass_ ConnectionClass;
 typedef struct StatementClass_ StatementClass;
@@ -121,6 +122,8 @@ typedef struct GlobalValues_
    char                cancel_as_freestmt;
    char                extra_systable_prefixes[MEDIUM_REGISTRY_LEN];
    char                conn_settings[LARGE_REGISTRY_LEN];
+   char                protocol[SMALL_REGISTRY_LEN];
+
    FILE*               mylogFP;
    FILE*               qlogFP; 
 } GLOBAL_VALUES;
index b6874da6faaa431b534917c8fa296480d251af99..fc22f3f371e5aa496cf3862901d248f7add153f6 100644 (file)
@@ -204,8 +204,8 @@ END
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 6,40,0,2
- PRODUCTVERSION 6,40,0,2
+ FILEVERSION 6,40,0,3
+ PRODUCTVERSION 6,40,0,3
  FILEFLAGSMASK 0x3L
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -223,12 +223,12 @@ BEGIN
             VALUE "Comments", "PostgreSQL ODBC driver for Windows 95\0"
             VALUE "CompanyName", "Insight Distribution Systems\0"
             VALUE "FileDescription", "PostgreSQL Driver\0"
-            VALUE "FileVersion", " 6.40.0002\0"
+            VALUE "FileVersion", " 6.40.0003\0"
             VALUE "InternalName", "psqlodbc\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 "ProductName", "Microsoft Open Database Connectivity\0"
-            VALUE "ProductVersion", " 6.40.0002\0"
+            VALUE "ProductVersion", " 6.40.0003\0"
         END
     END
     BLOCK "VarFileInfo"
index fe1e5cd3c32c51c663bbfee9462bcd8ce4e1b2cb..a4f52a03f7e934b12b6a087f63a960f084e7cd84 100644 (file)
@@ -1,9 +1,8 @@
 /*
-#  Insight Distribution Systems - System V - Oct 1997
-#ident "@(#)setup.rul  1.3 :/sccs/sql/odbc/s.setup.rul 11/13/97 12:18:11"
+#  Insight Distribution Systems - System V - Apr 1998
+#ident "@(#)setup.rul  1.13 :/sccs/sql/odbc/s.setup.rul 1/6/99 14:47:48"
 */
 
-
 /*----------------------------------------------------------------------------*\
  *
  *   PostgreSQL ODBC Driver Installation Script for InstallShield
 
 #define APP_NAME                "PostgreSQL ODBC Driver"
 #define DRIVER_NAME             "PostgreSQL"
-#define DRIVER_FILE             "PODBC32.DLL"
+#define DRIVER_FILE             "PSQLODBC.DLL"
+#define OLD_DRIVER_FILE            "PODBC32.DLL"
+#define OLD_DRIVER_FILE_RENAMED    "podbc32_sav.dll"
 
 #define COMPANY_NAME            "Insight"
 #define PRODUCT_NAME            "PostgreSQL ODBC Driver"
-#define PRODUCT_VERSION         "6.2"
-#define PRODUCT_KEY             "PODBC32.DLL"
-#define UNINSTALL_KEY           "PODBC32v6.2"
+#define PRODUCT_VERSION         "6.3"
+#define PRODUCT_KEY             "PSQLODBC.DLL"
+#define UNINSTALL_KEY           "PSQLODBCv6.3"
 
 #define ODBC_DM_KEY      "\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\SharedDLLs"
 #define ODBC_COMP_KEY    "\\SOFTWARE\\ODBC\\ODBCINST.INI"
@@ -36,10 +37,10 @@ declare
         STRING svMainDirectory [_MAX_STRING], svGrp, svUninstLogFile, svPath;
         STRING svValue, szName, szKey, szMessage;
         STRING szMsg, szTmp, szTmp2, szFileSet, szProgram;
-        NUMBER nResult, nvType, nvSize, nStartup, ComponentUsageCount;
+        NUMBER nResult, pos, nvType, nvSize, nStartup, ComponentUsageCount;
 
         NUMBER nvDoNot, nvVersion, nvInstall, nCore, nDM;
-        STRING dm, core, szFileName;        
+        STRING dm, core, szFileName, svFileName;        
         NUMBER options, nvInfo, nvResult;
         LONG lResult;
         STRING svCompVersion, svFileVersion, svCompDate, svCompTime, svFileDate, svFileTime;
@@ -100,9 +101,10 @@ OptionsDlg:
 Version:
         CompressInfo("driver.z", DRIVER_FILE, COMP_INFO_VERSIONMS|COMP_INFO_VERSIONLS, nvInfo, svCompVersion);
 
-        szFileName = WINSYSDIR ^ "PODBC32.DLL";
+        szFileName = WINSYSDIR ^ DRIVER_FILE;
         nResult = VerGetFileVersion(szFileName, svFileVersion);
-        // MessageBox("System file PODBC32.dll version is " + svFileVersion, INFORMATION);
+
+        // MessageBox("System file PSQLODBC.dll version is " + svFileVersion, INFORMATION);
 
         lResult = VerCompare(svCompVersion, svFileVersion, VERSION);
 
@@ -186,7 +188,7 @@ FileSetup:
         //      Show the uninstall under Add/Remove Programs in Control Panel
         RegDBSetItem(REGDB_UNINSTALL_NAME, PRODUCT_NAME);
 
-        szFileSet = "podbc32";
+        szFileSet = "psqlodbc";
 
         TARGETDIR = svMainDirectory;    // winsys
 
@@ -375,6 +377,44 @@ UpdateRegistry:
                 exit;
         endif;
 
+        pos = StrFind(CMDLINE, "UseDeclareFetch=");
+        if (pos >= 0) then
+                StrSub(svValue, CMDLINE, pos + 16, 1);
+                nResult = RegDBSetKeyValueEx(szKey, "UseDeclareFetch", REGDB_STRING, svValue, -1);
+                if (nResult < 0) then
+                        MessageBeep(0);
+                        MessageBox("Unable to create 'UseDeclareFetch' key value.", SEVERE);
+                        exit;
+                endif;
+        endif;
+
+        pos = StrFind(CMDLINE, "Protocol=");
+        if (pos >= 0) then
+                StrSub(svValue, CMDLINE, pos + 9, 3);
+                nResult = RegDBSetKeyValueEx(szKey, "Protocol", REGDB_STRING, svValue, -1);
+                if (nResult < 0) then
+                        MessageBeep(0);
+                        MessageBox("Unable to create 'Protocol' key value.", SEVERE);
+                        exit;
+                endif;
+        endif;
+
+RenameOld:
+       if (FindFile(WINSYSDIR, OLD_DRIVER_FILE, svFileName) = 0) then
+           szMessage = "Renaming old driver to "  + OLD_DRIVER_FILE_RENAMED + " ...";
+           SetStatusWindow(98, szMessage);
+           Delay(1);
+
+           Disable(LOGGING);
+
+           SRCDIR= WINSYSDIR;
+           TARGETDIR = WINSYSDIR;
+
+           RenameFile(OLD_DRIVER_FILE, OLD_DRIVER_FILE_RENAMED);
+
+           Enable(LOGGING);
+       endif;
+
 Done:
         Delay(1);
         SetStatusWindow(100, "Installation complete");