Skip to Content.
Sympa Menu

freetds - Re: rc1 this weekend

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: Brian Bruns <camber AT ais.org>
  • To: TDS Development Group <freetds AT franklin.metalab.unc.edu>
  • Subject: Re: rc1 this weekend
  • Date: Fri, 6 Sep 2002 08:30:04 -0400 (EDT)


They came from OpenLink via private email to jim and myself. The first
set is applied to CVS already. I'll attach the second set here. Have a
look, they looked ok to me on first read.

On 6 Sep 2002, Frediano Ziglio wrote:

> Il ven, 2002-09-06 alle 07:50, James K.Lowden ha scritto:
> > All,
> >
> > There are a few outstanding patches and fixes I'm hoping to apply or see
> > applied RSN:
> >
> > 1. Second set of Open Link patches. Do you want to review them, Brian?
> >
>
> Where does this patch came ?
>
> freddy77
>
* Unknown byte in tds_process_result can actually be followed
by another field


Index: src/tds/token.c
===================================================================
RCS file: /cvsroot/freetds/freetds/src/tds/token.c,v
retrieving revision 1.46
diff -u -r1.46 token.c
--- src/tds/token.c 5 Sep 2002 12:22:08 -0000 1.46
+++ src/tds/token.c 5 Sep 2002 19:35:14 -0000
@@ -762,6 +762,7 @@
TDSCOLINFO *curcol;
TDSRESULTINFO *info;
int remainder;
+int discardBytes;

tds_free_all_results(tds);

@@ -829,7 +832,10 @@
remainder = info->row_size % 4;
if (remainder) info->row_size += (4 - remainder);

- tds_get_byte(tds); /* ? */
+ /* discard unknown */
+ discardBytes = tds_get_byte(tds);
+ if (discardBytes > 0)
+ tds_get_n (tds, NULL, discardBytes);
}
info->current_row = tds_alloc_row(info);

* Extended capability string to provide room for more bits


Index: include/tds.h.in
===================================================================
RCS file: /cvsroot/freetds/freetds/include/tds.h.in,v
retrieving revision 1.39
diff -u -r1.39 tds.h.in
--- include/tds.h.in 30 Aug 2002 20:23:00 -0000 1.39
+++ include/tds.h.in 5 Sep 2002 19:53:35 -0000
@@ -315,7 +318,7 @@
#define is_unicode(x) (x==XSYBNVARCHAR || x==XSYBNCHAR || x==SYBNTEXT)
#define is_collate_type(x) (x==XSYBVARCHAR || x==XSYBCHAR || x==SYBTEXT || x
== XSYBNVARCHAR || x==SYBNTEXT)

-#define TDS_MAX_CAPABILITY 18
+#define TDS_MAX_CAPABILITY 22
#define MAXPRECISION 50
#define TDS_MAX_CONN 4096
#define TDS_MAX_DYNID_LEN 30
Index: src/tds/login.c
===================================================================
RCS file: /cvsroot/freetds/freetds/src/tds/login.c,v
retrieving revision 1.39
diff -u -r1.39 login.c
--- src/tds/login.c 5 Sep 2002 12:22:08 -0000 1.39
+++ src/tds/login.c 5 Sep 2002 19:53:41 -0000
@@ -445,7 +445,7 @@
} else if (IS_TDS50(tds)) {
rc|=tds_put_n(tds,magic50,4);
rc|=tds_put_byte(tds, TDS_CAP_TOKEN);
- rc|=tds_put_smallint(tds, 18);
+ rc|=tds_put_smallint(tds, TDS_MAX_CAPABILITY);
rc|=tds_put_n(tds,tds->capabilities,TDS_MAX_CAPABILITY);
}

Index: src/tds/mem.c
===================================================================
RCS file: /cvsroot/freetds/freetds/src/tds/mem.c,v
retrieving revision 1.19
diff -u -r1.19 mem.c
--- src/tds/mem.c 5 Sep 2002 12:22:08 -0000 1.19
+++ src/tds/mem.c 5 Sep 2002 19:53:41 -0000
@@ -327,7 +327,7 @@
TDSLOGIN *tds_alloc_login()
{
TDSLOGIN *tds_login;
-static const unsigned char defaultcaps[] =
{0x01,0x07,0x03,109,127,0xFF,0xFF,0xFF,0xFE,0x02,0x07,0x00,0x00,0x0A,104,0x00,0x00,0x00};
+static const unsigned char defaultcaps[] =
{0x01,0x09,0x00,0x00,0x03,0x6D,0x7F,0xFF,0xFF,0xFF,0xFE,0x02,0x09,0x00,0x00,0x00,0x00,0x0A,0x68,0x00,0x00,0x00};
char *tdsver;

tds_login = (TDSLOGIN *) malloc(sizeof(TDSLOGIN));
* The fields column_usertype and column_flags should be capable
of holding a 32bit quantity

Index: include/tds.h.in
===================================================================
RCS file: /cvsroot/freetds/freetds/include/tds.h.in,v
retrieving revision 1.39
diff -u -r1.39 tds.h.in
--- include/tds.h.in 30 Aug 2002 20:23:00 -0000 1.39
+++ include/tds.h.in 5 Sep 2002 19:35:09 -0000
@@ -444,8 +447,8 @@
typedef struct tds_column_info {
TDS_SMALLINT column_type;
TDS_SMALLINT column_type_save;
- TDS_SMALLINT column_usertype;
- TDS_SMALLINT column_flags;
+ TDS_INT column_usertype;
+ TDS_INT column_flags;
TDS_INT column_size;
TDS_INT column_offset;
TDS_TINYINT column_namelen;
Index: src/server/server.c
===================================================================
RCS file: /cvsroot/freetds/freetds/src/server/server.c,v
retrieving revision 1.3
diff -u -r1.3 server.c
--- src/server/server.c 31 Jan 2002 02:21:44 -0000 1.3
+++ src/server/server.c 5 Sep 2002 19:35:11 -0000
@@ -257,8 +257,7 @@
tds_put_byte(tds,strlen(curcol->column_name));

tds_put_n(tds,curcol->column_name,strlen(curcol->column_name));
tds_put_byte(tds,'0');
- tds_put_smallint(tds, curcol->column_usertype);
- tds_put_smallint(tds,0);
+ tds_put_int(tds, curcol->column_usertype);
tds_put_byte(tds, curcol->column_type);
if (!is_fixed_type(curcol->column_type)) {
tds_put_byte(tds, curcol->column_size);
Index: src/tds/token.c
===================================================================
RCS file: /cvsroot/freetds/freetds/src/tds/token.c,v
retrieving revision 1.46
diff -u -r1.46 token.c
--- src/tds/token.c 5 Sep 2002 12:22:08 -0000 1.46
+++ src/tds/token.c 5 Sep 2002 19:35:14 -0000
@@ -785,11 +786,13 @@
tds_get_n(tds,curcol->column_name, colnamelen);
curcol->column_name[colnamelen]='\0';

- curcol->column_flags = tds_get_byte(tds); /* Flags */
- curcol->column_nullable = (curcol->column_flags & 0x20) > 1;
+ curcol->column_flags = tds_get_byte(tds); /* Flags */
+ curcol->column_writeable = (curcol->column_flags & 0x10);
+ curcol->column_nullable = (curcol->column_flags & 0x20);
+ curcol->column_identity = (curcol->column_flags & 0x40);
+
+ curcol->column_usertype = tds_get_int(tds);

- curcol->column_usertype = tds_get_smallint(tds);
- tds_get_smallint(tds); /* another unknown */
curcol->column_type = tds_get_byte(tds);

curcol->column_varint_size =
tds_get_varint_size(curcol->column_type);



Archive powered by MHonArc 2.6.24.

Top of Page