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 ----