odbc fixes, updates for v0.4

This commit is contained in:
brianb
2002-04-03 23:02:53 +00:00
parent 9b8285d937
commit e2c3a9d818
16 changed files with 177 additions and 45 deletions

View File

@@ -70,7 +70,7 @@ MAKEINFO = makeinfo
NM = /usr/bin/nm -B
OBJDUMP = @OBJDUMP@
ODBC =
ODBC_INC =
ODBC_INC = /usr/local/include
PACKAGE = mdbtools
RANLIB = ranlib
READLINE_LIBS = -lncurses -lreadline

View File

@@ -70,7 +70,7 @@ MAKEINFO = makeinfo
NM = /usr/bin/nm -B
OBJDUMP = @OBJDUMP@
ODBC =
ODBC_INC =
ODBC_INC = /usr/local/include
PACKAGE = mdbtools
RANLIB = ranlib
READLINE_LIBS = -lncurses -lreadline
@@ -95,7 +95,7 @@ mdb_dump_OBJECTS = mdb-dump.o mdbsupport.o
mdb_dump_LDADD = $(LDADD)
mdb_dump_DEPENDENCIES = ../libmdb/libmdb.la
mdb_dump_LDFLAGS =
CFLAGS = -g -O2 -DSQL
CFLAGS = -g -O2 -DUNIXODBC -DSQL
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)

View File

@@ -70,7 +70,7 @@ MAKEINFO = makeinfo
NM = /usr/bin/nm -B
OBJDUMP = @OBJDUMP@
ODBC =
ODBC_INC =
ODBC_INC = /usr/local/include
PACKAGE = mdbtools
RANLIB = ranlib
READLINE_LIBS = -lncurses -lreadline
@@ -94,7 +94,7 @@ libmdb_la_LDFLAGS =
libmdb_la_LIBADD =
libmdb_la_OBJECTS = catalog.lo mem.lo file.lo kkd.lo table.lo data.lo \
dump.lo backend.lo money.lo sargs.lo index.lo like.lo
CFLAGS = -g -O2 -DSQL
CFLAGS = -g -O2 -DUNIXODBC -DSQL
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)

View File

@@ -81,6 +81,7 @@ int bit_num = (col_num - 1) % 8;
** value*/
static int mdb_xfer_bound_bool(MdbHandle *mdb, MdbColumn *col, int value)
{
col->cur_value_len = value;
if (col->bind_ptr) {
strcpy(col->bind_ptr, value ? "0" : "1");
}
@@ -90,6 +91,13 @@ static int mdb_xfer_bound_data(MdbHandle *mdb, int start, MdbColumn *col, int le
//if (!strcmp("Name",col->name)) {
//printf("start %d %d\n",start, len);
//}
if (len) {
col->cur_value_start = start;
col->cur_value_len = len;
} else {
col->cur_value_start = 0;
col->cur_value_len = 0;
}
if (col->bind_ptr) {
if (len) {
strcpy(col->bind_ptr,
@@ -114,6 +122,7 @@ int num_of_jumps=0, jumps_used=0;
int eod; /* end of data */
int delflag, lookupflag;
int bitmask_sz;
int col_ptr, deleted_columns=0;
unsigned char null_mask[33]; /* 256 columns max / 8 bits per byte */
unsigned char isnull;
@@ -210,11 +219,17 @@ unsigned char isnull;
num_of_jumps++;
}
if (mdb->jet_version==MDB_VER_JET4) {
eod = mdb_get_int16(mdb, row_end - 2 - var_cols*2 -bitmask_sz - num_of_jumps - 1);
col_start = mdb_get_int16(mdb, row_end - bitmask_sz - 2 - num_of_jumps - 1);
col_ptr = row_end - 2 - bitmask_sz - num_of_jumps - 1;
eod = mdb_get_int16(mdb, col_ptr - var_cols*2);
col_start = mdb_get_int16(mdb, col_ptr);
} else {
eod = mdb->pg_buf[row_end-1-var_cols-bitmask_sz-num_of_jumps];
col_start = mdb->pg_buf[row_end-bitmask_sz-1-num_of_jumps];
col_ptr = row_end - bitmask_sz - num_of_jumps - 1;
if (mdb->pg_buf[col_ptr]==0xFF) {
col_ptr--;
deleted_columns++;
}
eod = mdb->pg_buf[col_ptr - var_cols];
col_start = mdb->pg_buf[col_ptr];
}
@@ -243,8 +258,7 @@ unsigned char isnull;
len=mdb->pg_buf[row_end - bitmask_sz - var_cols_found * 2
- 2 - 1 - num_of_jumps * 2] - col_start;
} else {
len=mdb->pg_buf[row_end - bitmask_sz - var_cols_found
- 1 - num_of_jumps ] - col_start;
len=mdb->pg_buf[col_ptr - var_cols_found ] - col_start;
}
if (len<0)
len+=256;

View File

@@ -70,7 +70,7 @@ MAKEINFO = makeinfo
NM = /usr/bin/nm -B
OBJDUMP = @OBJDUMP@
ODBC =
ODBC_INC =
ODBC_INC = /usr/local/include
PACKAGE = mdbtools
RANLIB = ranlib
READLINE_LIBS = -lncurses -lreadline
@@ -116,7 +116,7 @@ unittest_OBJECTS = unittest.o
unittest_DEPENDENCIES = libmdbodbc.la ../libmdb/libmdb.la \
../sql/libmdbsql.la
unittest_LDFLAGS =
CFLAGS = -g -O2 -DSQL
CFLAGS = -g -O2 -DUNIXODBC -DSQL
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)

View File

@@ -160,12 +160,12 @@ void SetConnectString (ConnectParams* params, const gchar* connectString)
* remove trailing spaces from name
*/
end = strlen (name) - 1;
while (end > 0 && name[end] == ' ')
while (end > 0 && isspace(name[end]))
name[end--] = '\0';
/*
* remove leading spaces from value
*/
while (*value == ' ')
while (isspace(*value))
value++;
if (g_hash_table_lookup_extended (params->table, name, &key, &oldvalue))
@@ -239,7 +239,7 @@ gchar* ExtractDSN (ConnectParams* params, const gchar* connectString)
* Skip over any leading spaces
*/
q++;
while (*q == ' ')
while (isspace(*q))
q++;
/*
* Copy the DSN value to a buffer
@@ -410,7 +410,7 @@ static int GetNextItem (FILE* stream, char** name, char** value)
if ((token = strtok (line, equals)) == NULL) return 0;
len = strlen (token);
while (len > 0 && token[len-1] == ' ')
while (len > 0 && isspace(token[len-1]))
{
len--;
token[len] = '\0';
@@ -421,7 +421,7 @@ static int GetNextItem (FILE* stream, char** name, char** value)
*/
token = strtok (NULL, equals);
if (token == NULL) return 0;
while (*token && token[0] == ' ')
while (*token && isspace(token[0]))
token++;
*value = token;

View File

@@ -32,7 +32,7 @@
#include "connectparams.h"
static char software_version[] = "$Id: odbc.c,v 1.4 2002/01/24 12:34:13 brianb Exp $";
static char software_version[] = "$Id: odbc.c,v 1.5 2002/04/03 23:02:54 brianb Exp $";
static void *no_unused_var_warn[] = {software_version,
no_unused_var_warn};
@@ -527,12 +527,19 @@ SQLRETURN SQL_API SQLColAttributes(
SQLINTEGER FAR *pfDesc)
{
int cplen, len = 0;
int namelen, i;
struct _hstmt *stmt;
struct _hdbc *dbc;
struct _henv *env;
MdbSQL *sql;
MdbSQLColumn *sqlcol;
MdbColumn *col;
MdbTableDef *table;
stmt = (struct _hstmt *) hstmt;
dbc = (struct _hdbc *) stmt->hdbc;
env = (struct _henv *) dbc->henv;
sql = env->sql;
/* dont check column index for these */
switch(fDescType) {
@@ -541,17 +548,38 @@ struct _hdbc *dbc;
break;
}
if (icol<1 || icol>sql->num_columns) {
return SQL_ERROR;
}
/* find the column */
sqlcol = g_ptr_array_index(sql->columns,icol - 1);
table = sql->cur_table;
for (i=0;i<table->num_cols;i++) {
col=g_ptr_array_index(table->columns,i);
if (!strcasecmp(sqlcol->name, col->name)) {
break;
}
}
switch(fDescType) {
case SQL_COLUMN_NAME:
case SQL_COLUMN_LABEL:
namelen = MIN(cbDescMax,strlen(sqlcol->name));
strncpy(rgbDesc, sqlcol->name, namelen);
*((char *)&rgbDesc[namelen])='\0';
break;
case SQL_COLUMN_TYPE:
*pcbDesc = SQL_CHAR;
break;
case SQL_COLUMN_LENGTH:
break;
case SQL_COLUMN_DISPLAY_SIZE:
switch(_odbc_get_client_type(1)) {
//case SQL_COLUMN_DISPLAY_SIZE:
case SQL_DESC_DISPLAY_SIZE:
switch(_odbc_get_client_type(col->col_type)) {
case SQL_CHAR:
case SQL_VARCHAR:
*pfDesc = col->col_size;
break;
case SQL_INTEGER:
*pfDesc = 8;
@@ -562,6 +590,9 @@ struct _hdbc *dbc;
case SQL_TINYINT:
*pfDesc = 4;
break;
default:
//fprintf(stderr,"\nUnknown type %d\n", _odbc_get_client_type(col->col_type));
break;
}
break;
}
@@ -657,6 +688,7 @@ struct _hdbc *dbc = (struct _hdbc *) stmt->hdbc;
struct _henv *env = (struct _henv *) dbc->henv;
if (mdb_fetch_row(env->sql->cur_table)) {
stmt->row_affected++;
return SQL_SUCCESS;
} else {
return SQL_NO_DATA_FOUND;
@@ -765,7 +797,7 @@ SQLRETURN SQL_API SQLPrepare(
SQLCHAR FAR *szSqlStr,
SQLINTEGER cbSqlStr)
{
struct _hstmt *stmt=(struct _hstmt *)hstmt;
struct _hstmt *stmt=(struct _hstmt *)hstmt;
if (cbSqlStr!=SQL_NTS) {
strncpy(stmt->query, szSqlStr, cbSqlStr);
@@ -781,6 +813,9 @@ SQLRETURN SQL_API SQLRowCount(
SQLHSTMT hstmt,
SQLINTEGER FAR *pcrow)
{
struct _hstmt *stmt=(struct _hstmt *)hstmt;
*pcrow = stmt->row_affected;
return SQL_SUCCESS;
}
@@ -845,10 +880,41 @@ SQLRETURN SQL_API SQLGetData(
SQLINTEGER FAR *pcbValue)
{
struct _hstmt *stmt;
struct _hdbc *dbc;
struct _henv *env;
unsigned char *src;
int srclen;
MdbSQL *sql;
MdbHandle *mdb;
MdbSQLColumn *sqlcol;
MdbColumn *col;
MdbTableDef *table;
int i;
stmt = (struct _hstmt *) hstmt;
dbc = (struct _hdbc *) stmt->hdbc;
env = (struct _henv *) dbc->henv;
sql = env->sql;
mdb = sql->mdb;
if (icol<1 || icol>sql->num_columns) {
return SQL_ERROR;
}
sqlcol = g_ptr_array_index(sql->columns,icol - 1);
table = sql->cur_table;
for (i=0;i<table->num_cols;i++) {
col=g_ptr_array_index(table->columns,i);
if (!strcasecmp(sqlcol->name, col->name)) {
break;
}
}
strcpy(rgbValue,
mdb_col_to_string(mdb, col->cur_value_start, col->col_type,
col->cur_value_len));
//*((char *)&rgbValue[col->cur_value_len])='\0';
*pcbValue = col->cur_value_len;
return 0;
}
@@ -1100,20 +1166,30 @@ static int _odbc_get_server_type(int clt_type)
static SQLSMALLINT _odbc_get_client_type(int srv_type)
{
switch (srv_type) {
MDB_BOOL:
case MDB_BOOL:
return SQL_BIT;
MDB_BYTE:
break;
case MDB_BYTE:
return SQL_TINYINT;
MDB_INT:
break;
case MDB_INT:
return SQL_SMALLINT;
MDB_LONGINT:
break;
case MDB_LONGINT:
return SQL_INTEGER;
MDB_FLOAT:
break;
case MDB_FLOAT:
return SQL_FLOAT;
MDB_DOUBLE:
break;
case MDB_DOUBLE:
return SQL_DOUBLE;
MDB_TEXT:
break;
case MDB_TEXT:
return SQL_VARCHAR;
break;
default:
// fprintf(stderr,"Unknown type %d\n",srv_type);
break;
}
}

View File

@@ -70,7 +70,7 @@ MAKEINFO = makeinfo
NM = /usr/bin/nm -B
OBJDUMP = @OBJDUMP@
ODBC =
ODBC_INC =
ODBC_INC = /usr/local/include
PACKAGE = mdbtools
RANLIB = ranlib
READLINE_LIBS = -lncurses -lreadline
@@ -96,7 +96,7 @@ libmdbsql_la_LIBADD =
libmdbsql_la_OBJECTS = mdbsql.lo parser.lo lexer.lo
LEX_OUTPUT_ROOT = lex.yy
LEXLIB = -lfl
CFLAGS = -g -O2 -DSQL
CFLAGS = -g -O2 -DUNIXODBC -DSQL
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)

View File

@@ -70,7 +70,7 @@ MAKEINFO = makeinfo
NM = /usr/bin/nm -B
OBJDUMP = @OBJDUMP@
ODBC =
ODBC_INC =
ODBC_INC = /usr/local/include
PACKAGE = mdbtools
RANLIB = ranlib
READLINE_LIBS = -lncurses -lreadline
@@ -156,7 +156,7 @@ prdump_OBJECTS = prdump.o
prdump_LDADD = $(LDADD)
prdump_DEPENDENCIES = ../libmdb/libmdb.la
prdump_LDFLAGS =
CFLAGS = -g -O2 -DSQL
CFLAGS = -g -O2 -DUNIXODBC -DSQL
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)