Re: [HACKERS] 6.2 protocol - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: [HACKERS] 6.2 protocol
Date
Msg-id 200102100632.BAA17355@candle.pha.pa.us
Whole thread Raw
List pgsql-patches
OK, I have applied the following patch to remove ODBC protocol-version
handling.  I have kept the protocol-version fields and assignments, in
case it is useful in the future.  Comments?


> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > ODBC still has code to handle 6.2 backends:
> > Do we still want to carry that code around in ODBC?
>
> I'd suggest retiring the 6.2 *and* 6.3 code from ODBC, so that it only
> needs to support one protocol version, and then we can also retire its
> "6.2/6.3/6.4" protocol option switch.  AFAICS that option switch serves
> only to confuse newbies --- I recall a fair number of questions along
> the line of "I'm running PG 6.5 (or 7.0), where do I get an ODBC that
> will talk to it?" since after all it does not say ">= 6.4".
>
> Besides, anyone still running 6.3 or before needs to be prodded,
> none too gently, to upgrade ...
>
>             regards, tom lane
>


--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
Index: src/interfaces/odbc/connection.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/odbc/connection.c,v
retrieving revision 1.17
diff -c -r1.17 connection.c
*** src/interfaces/odbc/connection.c    2001/02/10 05:50:27    1.17
--- src/interfaces/odbc/connection.c    2001/02/10 06:25:31
***************
*** 461,467 ****
  CC_connect(ConnectionClass *self, char do_password)
  {
  StartupPacket sp;
- StartupPacket6_2 sp62;
  QResultClass *res;
  SocketClass *sock;
  ConnInfo *ci = &(self->connInfo);
--- 461,466 ----
***************
*** 538,573 ****
          }
          mylog("connection to the server socket succeeded.\n");

!         if ( PROTOCOL_62(ci)) {
!             sock->reverse = TRUE;        /* make put_int and get_int work for 6.2 */

!             memset(&sp62, 0, sizeof(StartupPacket6_2));
!             SOCK_put_int(sock, htonl(4+sizeof(StartupPacket6_2)), 4);
!             sp62.authtype = htonl(NO_AUTHENTICATION);
!             strncpy(sp62.database, ci->database, PATH_SIZE);
!             strncpy(sp62.user, ci->username, NAMEDATALEN);
!             SOCK_put_n_char(sock, (char *) &sp62, sizeof(StartupPacket6_2));
!             SOCK_flush_output(sock);
!         }
!         else {
!             memset(&sp, 0, sizeof(StartupPacket));

!             mylog("sizeof startup packet = %d\n", sizeof(StartupPacket));

!             /* Send length of Authentication Block */
!             SOCK_put_int(sock, 4+sizeof(StartupPacket), 4);

!             if ( PROTOCOL_63(ci))
!                 sp.protoVersion = (ProtocolVersion) htonl(PG_PROTOCOL_63);
!             else
!                 sp.protoVersion = (ProtocolVersion) htonl(PG_PROTOCOL_LATEST);
!
!             strncpy(sp.database, ci->database, SM_DATABASE);
!             strncpy(sp.user, ci->username, SM_USER);

!             SOCK_put_n_char(sock, (char *) &sp, sizeof(StartupPacket));
!             SOCK_flush_output(sock);
!         }

          mylog("sent the authentication block.\n");

--- 537,556 ----
          }
          mylog("connection to the server socket succeeded.\n");

!         memset(&sp, 0, sizeof(StartupPacket));

!         mylog("sizeof startup packet = %d\n", sizeof(StartupPacket));

!         /* Send length of Authentication Block */
!         SOCK_put_int(sock, 4+sizeof(StartupPacket), 4);

!         sp.protoVersion = (ProtocolVersion) htonl(PG_PROTOCOL_LATEST);

!         strncpy(sp.database, ci->database, SM_DATABASE);
!         strncpy(sp.user, ci->username, SM_USER);

!         SOCK_put_n_char(sock, (char *) &sp, sizeof(StartupPacket));
!         SOCK_flush_output(sock);

          mylog("sent the authentication block.\n");

***************
*** 588,594 ****
      /*    Now get the authentication request from backend */
      /* *************************************************** */

!     if ( ! PROTOCOL_62(ci))    do {

          if (do_password)
              beresp = 'R';
--- 571,577 ----
      /*    Now get the authentication request from backend */
      /* *************************************************** */

!     do {

          if (do_password)
              beresp = 'R';
***************
*** 1378,1396 ****
  CC_initialize_pg_version(ConnectionClass *self)
  {
      strcpy(self->pg_version, self->connInfo.protocol);
!     if (PROTOCOL_62(&self->connInfo)) {
!         self->pg_version_number = (float) 6.2;
!         self->pg_version_major = 6;
!         self->pg_version_minor = 2;
!     } else if (PROTOCOL_63(&self->connInfo)) {
!         self->pg_version_number = (float) 6.3;
!         self->pg_version_major = 6;
!         self->pg_version_minor = 3;
!     } else {
!         self->pg_version_number = (float) 6.4;
!         self->pg_version_major = 6;
!         self->pg_version_minor = 4;
!     }
  }
  /*    This function gets the version of PostgreSQL that we're connected to.
      This is used to return the correct info in SQLGetInfo
--- 1361,1369 ----
  CC_initialize_pg_version(ConnectionClass *self)
  {
      strcpy(self->pg_version, self->connInfo.protocol);
!     self->pg_version_number = (float) 6.4;
!     self->pg_version_major = 6;
!     self->pg_version_minor = 4;
  }
  /*    This function gets the version of PostgreSQL that we're connected to.
      This is used to return the correct info in SQLGetInfo
Index: src/interfaces/odbc/connection.h
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/odbc/connection.h,v
retrieving revision 1.13
diff -c -r1.13 connection.h
*** src/interfaces/odbc/connection.h    2001/02/06 02:21:12    1.13
--- src/interfaces/odbc/connection.h    2001/02/10 06:25:31
***************
*** 106,115 ****

  #define PG_PROTOCOL(major, minor)    (((major) << 16) | (minor))
  #define PG_PROTOCOL_LATEST        PG_PROTOCOL(2, 0)
- #define PG_PROTOCOL_63            PG_PROTOCOL(1, 0)
- #define PG_PROTOCOL_62            PG_PROTOCOL(0, 0)

! /*    This startup packet is to support latest Postgres protocol (6.4, 6.3) */
  typedef struct _StartupPacket
  {
      ProtocolVersion    protoVersion;
--- 106,113 ----

  #define PG_PROTOCOL(major, minor)    (((major) << 16) | (minor))
  #define PG_PROTOCOL_LATEST        PG_PROTOCOL(2, 0)

! /*    This startup packet is to support latest Postgres protocol */
  typedef struct _StartupPacket
  {
      ProtocolVersion    protoVersion;
***************
*** 121,138 ****
  } StartupPacket;


- /*    This startup packet is to support pre-Postgres 6.3 protocol */
- typedef struct _StartupPacket6_2
- {
-     unsigned int    authtype;
-     char            database[PATH_SIZE];
-     char            user[NAMEDATALEN];
-     char            options[ARGV_SIZE];
-     char            execfile[ARGV_SIZE];
-     char            tty[PATH_SIZE];
- } StartupPacket6_2;
-
-
  /*    Structure to hold all the connection attributes for a specific
      connection (used for both registry and file, DSN and DRIVER)
  */
--- 119,124 ----
***************
*** 156,167 ****
      char    translation_option[SMALL_REGISTRY_LEN];
      char    focus_password;
  } ConnInfo;
-
- /*    Macro to determine is the connection using 6.2 protocol? */
- #define PROTOCOL_62(conninfo_)        (strncmp((conninfo_)->protocol, PG62, strlen(PG62)) == 0)
-
- /*    Macro to determine is the connection using 6.3 protocol? */
- #define PROTOCOL_63(conninfo_)        (strncmp((conninfo_)->protocol, PG63, strlen(PG63)) == 0)

  /*
   *    Macros to compare the server's version with a specified version
--- 142,147 ----
Index: src/interfaces/odbc/dlg_specific.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/odbc/dlg_specific.c,v
retrieving revision 1.18
diff -c -r1.18 dlg_specific.c
*** src/interfaces/odbc/dlg_specific.c    2001/02/10 05:50:28    1.18
--- src/interfaces/odbc/dlg_specific.c    2001/02/10 06:25:31
***************
*** 243,254 ****
          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);



--- 243,249 ----
          CheckDlgButton(hdlg, DS_READONLY, atoi(ci->onlyread));

          /*    Protocol */
!         CheckDlgButton(hdlg, DS_PG64, 1);



***************
*** 281,292 ****
              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));

--- 276,282 ----
              sprintf(ci->onlyread, "%d", IsDlgButtonChecked(hdlg, DS_READONLY));

              /*    Protocol */
!             strcpy(ci->protocol, PG64);

              sprintf(ci->show_system_tables, "%d", IsDlgButtonChecked(hdlg, DS_SHOWSYSTEMTABLES));

Index: src/interfaces/odbc/psqlodbc.h
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/odbc/psqlodbc.h,v
retrieving revision 1.30
diff -c -r1.30 psqlodbc.h
*** src/interfaces/odbc/psqlodbc.h    2001/02/06 02:21:12    1.30
--- src/interfaces/odbc/psqlodbc.h    2001/02/10 06:25:32
***************
*** 91,98 ****
  /* Now that's 0, lets use this instead. DJP 24-1-2001 */
  #define STD_STATEMENT_LEN    MAX_MESSAGE_LEN

- #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;
--- 91,96 ----
***************
*** 132,139 ****
      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;
--- 130,139 ----
      char                cancel_as_freestmt;
      char                extra_systable_prefixes[MEDIUM_REGISTRY_LEN];
      char                conn_settings[LARGE_REGISTRY_LEN];
+                         /* Protocol is not used anymore, but kept in case
+                          * it is useful in the future.  bjm 2001-02-10
+                          */
      char                protocol[SMALL_REGISTRY_LEN];
      FILE*                mylogFP;
      FILE*                qlogFP;
  } GLOBAL_VALUES;
Index: src/interfaces/odbc/resource.h
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/odbc/resource.h,v
retrieving revision 1.11
diff -c -r1.11 resource.h
*** src/interfaces/odbc/resource.h    2001/01/26 22:41:59    1.11
--- src/interfaces/odbc/resource.h    2001/02/10 06:25:32
***************
*** 19,25 ****
  #define DS_SHOWOIDCOLUMN                1012
  #define DS_FAKEOIDINDEX                 1013
  #define DRV_COMMLOG                     1014
- #define DS_PG62                         1016
  #define IDC_DATASOURCE                  1018
  #define DRV_OPTIMIZER                   1019
  #define DS_CONNSETTINGS                 1020
--- 19,24 ----
***************
*** 48,54 ****
  #define IDC_OPTIONS                     1054
  #define DRV_KSQO                        1055
  #define DS_PG64                         1057
- #define DS_PG63                         1058

  /* Next default values for new objects */

--- 47,52 ----

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Fix for ODBC close
Next
From: Peter Eisentraut
Date:
Subject: Re: Fix for ODBC close