commiting gmdb

doc updates
odbc fixes
This commit is contained in:
brianb
2002-04-09 01:19:26 +00:00
parent f20560d1f1
commit 53bfc9027b
44 changed files with 6033 additions and 157 deletions

View File

@@ -62,6 +62,7 @@ host_triplet = i686-pc-linux-gnu
AS = @AS@
CC = gcc
DLLTOOL = @DLLTOOL@
HAVE_GNOME =
LD = /usr/bin/ld
LEX = flex
LIBTOOL = $(SHELL) $(top_builddir)/libtool
@@ -116,7 +117,7 @@ unittest_OBJECTS = unittest.o
unittest_DEPENDENCIES = libmdbodbc.la ../libmdb/libmdb.la \
../sql/libmdbsql.la
unittest_LDFLAGS =
CFLAGS = -g -O2 -DUNIXODBC -DSQL
CFLAGS = -g -O2 -DUNIXODBC -DSQL -DHAVE_GNOME
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

@@ -62,6 +62,7 @@ host_triplet = @host@
AS = @AS@
CC = @CC@
DLLTOOL = @DLLTOOL@
HAVE_GNOME = @HAVE_GNOME@
LD = @LD@
LEX = @LEX@
LIBTOOL = @LIBTOOL@

View File

@@ -396,7 +396,7 @@ static int GetNextItem (FILE* stream, char** name, char** value)
s = fgets (line, max_line, stream);
if (s == NULL)
{
perror ("fgets");
//perror ("fgets");
return 0;
}
/*

View File

@@ -32,7 +32,7 @@
#include "connectparams.h"
static char software_version[] = "$Id: odbc.c,v 1.5 2002/04/03 23:02:54 brianb Exp $";
static char software_version[] = "$Id: odbc.c,v 1.6 2002/04/09 01:19:26 brianb Exp $";
static void *no_unused_var_warn[] = {software_version,
no_unused_var_warn};
@@ -51,6 +51,9 @@ static SQLRETURN SQL_API _SQLFreeStmt(SQLHSTMT hstmt, SQLUSMALLINT fOption);
#define _MAX_ERROR_LEN 255
static char lastError[_MAX_ERROR_LEN+1];
//#define TRACE(x) fprintf(stderr,"Function %s\n", x);
#define TRACE(x)
/* The SQL engine is presently non-reenterrant and non-thread safe.
See _SQLExecute for details.
*/
@@ -104,6 +107,8 @@ SQLRETURN SQL_API SQLDriverConnect(
ConnectParams* params;
SQLRETURN ret;
TRACE("DriverConnect");
strcpy (lastError, "");
params = ((ODBCConnection*) hdbc)->params;
@@ -140,6 +145,7 @@ SQLRETURN SQL_API SQLBrowseConnect(
SQLSMALLINT cbConnStrOutMax,
SQLSMALLINT FAR *pcbConnStrOut)
{
TRACE("BrowseConnect");
return SQL_SUCCESS;
}
@@ -154,6 +160,7 @@ SQLRETURN SQL_API SQLColumnPrivileges(
SQLCHAR FAR *szColumnName,
SQLSMALLINT cbColumnName)
{
TRACE("SQLColumnPrivileges");
return SQL_SUCCESS;
}
@@ -165,6 +172,7 @@ SQLRETURN SQL_API SQLDescribeParam(
SQLSMALLINT FAR *pibScale,
SQLSMALLINT FAR *pfNullable)
{
TRACE("SQLDescribeParam");
return SQL_SUCCESS;
}
@@ -175,6 +183,7 @@ SQLRETURN SQL_API SQLExtendedFetch(
SQLUINTEGER FAR *pcrow,
SQLUSMALLINT FAR *rgfRowStatus)
{
TRACE("SQLExtendedFetch");
return SQL_SUCCESS;
}
@@ -193,12 +202,14 @@ SQLRETURN SQL_API SQLForeignKeys(
SQLCHAR FAR *szFkTableName,
SQLSMALLINT cbFkTableName)
{
TRACE("SQLForeignKeys");
return SQL_SUCCESS;
}
SQLRETURN SQL_API SQLMoreResults(
SQLHSTMT hstmt)
{
TRACE("SQLMoreResults");
return SQL_SUCCESS;
}
@@ -210,6 +221,7 @@ SQLRETURN SQL_API SQLNativeSql(
SQLINTEGER cbSqlStrMax,
SQLINTEGER FAR *pcbSqlStr)
{
TRACE("SQLNativeSql");
return SQL_SUCCESS;
}
@@ -217,6 +229,7 @@ SQLRETURN SQL_API SQLNumParams(
SQLHSTMT hstmt,
SQLSMALLINT FAR *pcpar)
{
TRACE("SQLNumParams");
return SQL_SUCCESS;
}
@@ -225,6 +238,7 @@ SQLRETURN SQL_API SQLParamOptions(
SQLUINTEGER crow,
SQLUINTEGER FAR *pirow)
{
TRACE("SQLParamOptions");
return SQL_SUCCESS;
}
@@ -237,6 +251,7 @@ SQLRETURN SQL_API SQLPrimaryKeys(
SQLCHAR FAR *szTableName,
SQLSMALLINT cbTableName)
{
TRACE("SQLPrimaryKeys");
return SQL_SUCCESS;
}
@@ -251,6 +266,7 @@ SQLRETURN SQL_API SQLProcedureColumns(
SQLCHAR FAR *szColumnName,
SQLSMALLINT cbColumnName)
{
TRACE("SQLProcedureColumns");
return SQL_SUCCESS;
}
@@ -263,6 +279,7 @@ SQLRETURN SQL_API SQLProcedures(
SQLCHAR FAR *szProcName,
SQLSMALLINT cbProcName)
{
TRACE("SQLProcedures");
return SQL_SUCCESS;
}
@@ -272,6 +289,7 @@ SQLRETURN SQL_API SQLSetPos(
SQLUSMALLINT fOption,
SQLUSMALLINT fLock)
{
TRACE("SQLSetPos");
return SQL_SUCCESS;
}
@@ -284,6 +302,7 @@ SQLRETURN SQL_API SQLTablePrivileges(
SQLCHAR FAR *szTableName,
SQLSMALLINT cbTableName)
{
TRACE("SQLTablePrivileges");
return SQL_SUCCESS;
}
@@ -297,6 +316,7 @@ SQLRETURN SQL_API SQLDrivers(
SQLSMALLINT cbDrvrAttrMax,
SQLSMALLINT FAR *pcbDrvrAttr)
{
TRACE("SQLDrivers");
return SQL_SUCCESS;
}
SQLRETURN SQL_API SQLSetEnvAttr (
@@ -305,6 +325,7 @@ SQLRETURN SQL_API SQLSetEnvAttr (
SQLPOINTER Value,
SQLINTEGER StringLength)
{
TRACE("SQLSetEnvAttr");
return SQL_SUCCESS;
}
@@ -323,6 +344,7 @@ SQLRETURN SQL_API SQLBindParameter(
{
struct _hstmt *stmt;
TRACE("SQLBindParameter");
stmt = (struct _hstmt *) hstmt;
return SQL_SUCCESS;
}
@@ -332,6 +354,7 @@ SQLRETURN SQL_API SQLAllocHandle(
SQLHANDLE InputHandle,
SQLHANDLE * OutputHandle)
{
TRACE("SQLAllocHandle");
switch(HandleType) {
case SQL_HANDLE_STMT:
return _SQLAllocStmt(InputHandle,OutputHandle);
@@ -351,6 +374,7 @@ static SQLRETURN SQL_API _SQLAllocConnect(
struct _henv *env;
ODBCConnection* dbc;
TRACE("_SQLAllocConnect");
env = (struct _henv *) henv;
dbc = (SQLHDBC) malloc (sizeof (ODBCConnection));
memset(dbc,'\0',sizeof (ODBCConnection));
@@ -365,6 +389,7 @@ SQLRETURN SQL_API SQLAllocConnect(
SQLHENV henv,
SQLHDBC FAR *phdbc)
{
TRACE("SQLAllocConnect");
return _SQLAllocConnect(henv, phdbc);
}
@@ -373,6 +398,7 @@ static SQLRETURN SQL_API _SQLAllocEnv(
{
struct _henv *env;
TRACE("_SQLAllocEnv");
env = (SQLHENV) malloc(sizeof(struct _henv));
memset(env,'\0',sizeof(struct _henv));
*phenv=env;
@@ -382,6 +408,7 @@ struct _henv *env;
SQLRETURN SQL_API SQLAllocEnv(
SQLHENV FAR *phenv)
{
TRACE("SQLAllocEnv");
return _SQLAllocEnv(phenv);
}
@@ -392,6 +419,7 @@ static SQLRETURN SQL_API _SQLAllocStmt(
struct _hdbc *dbc;
struct _hstmt *stmt;
TRACE("_SQLAllocStmt");
dbc = (struct _hdbc *) hdbc;
stmt = (SQLHSTMT) malloc(sizeof(struct _hstmt));
@@ -405,6 +433,7 @@ SQLRETURN SQL_API SQLAllocStmt(
SQLHDBC hdbc,
SQLHSTMT FAR *phstmt)
{
TRACE("SQLAllocStmt");
return _SQLAllocStmt(hdbc,phstmt);
}
@@ -419,8 +448,43 @@ SQLRETURN SQL_API SQLBindCol(
struct _hstmt *stmt = (struct _hstmt *) hstmt;
struct _hdbc *dbc = (struct _hdbc *) stmt->hdbc;
struct _henv *env = (struct _henv *) dbc->henv;
struct _sql_bind_info *cur, *prev, *newitem;
mdbsql_bind_column(env->sql, icol, rgbValue);
TRACE("SQLBindCol");
/* find available item in list */
cur = stmt->bind_head;
while (cur) {
if (cur->column_number==icol)
break;
cur = cur->next;
}
/* if this is a repeat */
if (cur) {
cur->column_bindtype = fCType;
cur->column_bindlen = cbValueMax;
cur->varaddr = (char *) rgbValue;
} else {
/* didn't find it create a new one */
newitem = (struct _sql_bind_info *) malloc(sizeof(struct _sql_bind_info));
memset(newitem, 0, sizeof(struct _sql_bind_info));
newitem->column_number = icol;
newitem->column_bindtype = fCType;
newitem->column_bindlen = cbValueMax;
newitem->column_lenbind = pcbValue;
newitem->varaddr = (char *) rgbValue;
/* if there's no head yet */
if (! stmt->bind_head) {
stmt->bind_head = newitem;
} else {
/* find the tail of the list */
cur = stmt->bind_head;
while (cur) {
prev = cur;
cur = cur->next;
}
prev->next = newitem;
}
}
return SQL_SUCCESS;
}
@@ -428,6 +492,7 @@ struct _henv *env = (struct _henv *) dbc->henv;
SQLRETURN SQL_API SQLCancel(
SQLHSTMT hstmt)
{
TRACE("SQLCancel");
return SQL_SUCCESS;
}
@@ -444,6 +509,7 @@ SQLRETURN SQL_API SQLConnect(
ConnectParams* params;
SQLRETURN ret;
TRACE("SQLConnect");
strcpy (lastError, "");
params = ((ODBCConnection*) hdbc)->params;
@@ -483,6 +549,7 @@ MdbSQLColumn *sqlcol;
MdbColumn *col;
MdbTableDef *table;
TRACE("SQLDescribeCol");
if (icol<1 || icol>sql->num_columns) {
return SQL_ERROR;
}
@@ -536,6 +603,7 @@ MdbSQLColumn *sqlcol;
MdbColumn *col;
MdbTableDef *table;
TRACE("SQLColAttributes");
stmt = (struct _hstmt *) hstmt;
dbc = (struct _hdbc *) stmt->hdbc;
env = (struct _henv *) dbc->henv;
@@ -562,6 +630,7 @@ MdbTableDef *table;
}
}
// fprintf(stderr,"fDescType = %d\n", fDescType);
switch(fDescType) {
case SQL_COLUMN_NAME:
case SQL_COLUMN_LABEL:
@@ -570,7 +639,7 @@ MdbTableDef *table;
*((char *)&rgbDesc[namelen])='\0';
break;
case SQL_COLUMN_TYPE:
*pcbDesc = SQL_CHAR;
*pfDesc = SQL_CHAR;
break;
case SQL_COLUMN_LENGTH:
break;
@@ -603,6 +672,7 @@ MdbTableDef *table;
SQLRETURN SQL_API SQLDisconnect(
SQLHDBC hdbc)
{
TRACE("SQLDisconnect");
return SQL_SUCCESS;
}
@@ -618,6 +688,7 @@ SQLRETURN SQL_API SQLError(
{
SQLRETURN result = SQL_NO_DATA_FOUND;
TRACE("SQLError");
if (strlen (lastError) > 0)
{
strcpy (szSqlState, "08001");
@@ -640,8 +711,9 @@ struct _hstmt *stmt = (struct _hstmt *) hstmt;
struct _hdbc *dbc = (struct _hdbc *) stmt->hdbc;
struct _henv *env = (struct _henv *) dbc->henv;
int ret;
TRACE("_SQLExecute");
fprintf(stderr,"query = %s\n",stmt->query);
/* fprintf(stderr,"query = %s\n",stmt->query); */
_odbc_fix_literals(stmt);
mdb_sql_reset(env->sql);
@@ -669,6 +741,7 @@ SQLRETURN SQL_API SQLExecDirect(
struct _hstmt *stmt = (struct _hstmt *) hstmt;
int ret;
TRACE("SQLExecDirect");
strcpy(stmt->query, szSqlStr);
return _SQLExecute(hstmt);
@@ -677,6 +750,7 @@ int ret;
SQLRETURN SQL_API SQLExecute(
SQLHSTMT hstmt)
{
TRACE("SQLExecute");
return _SQLExecute(hstmt);
}
@@ -686,9 +760,37 @@ SQLRETURN SQL_API SQLFetch(
struct _hstmt *stmt = (struct _hstmt *) hstmt;
struct _hdbc *dbc = (struct _hdbc *) stmt->hdbc;
struct _henv *env = (struct _henv *) dbc->henv;
struct _sql_bind_info *cur;
TRACE("SQLFetch");
/* if we bound columns, transfer them to res_info now that we have one */
if (stmt->rows_affected==0) {
cur = stmt->bind_head;
while (cur) {
if (cur->column_number>0 &&
cur->column_number <= env->sql->num_columns) {
mdbsql_bind_column(env->sql,
cur->column_number, cur->varaddr);
if (cur->column_lenbind)
mdbsql_bind_len(env->sql,
cur->column_number, cur->column_lenbind);
} else {
/* log error ? */
}
cur = cur->next;
}
}
//cur = stmt->bind_head;
//while (cur) {
//if (cur->column_number>0 &&
//cur->column_number <= env->sql->num_columns) {
// if (cur->column_lenbind) *(cur->column_lenbind) = 4;
//}
//cur = cur->next;
//}
if (mdb_fetch_row(env->sql->cur_table)) {
stmt->row_affected++;
stmt->rows_affected++;
return SQL_SUCCESS;
} else {
return SQL_NO_DATA_FOUND;
@@ -699,6 +801,7 @@ SQLRETURN SQL_API SQLFreeHandle(
SQLSMALLINT HandleType,
SQLHANDLE Handle)
{
TRACE("SQLFreeHandle");
switch(HandleType) {
case SQL_HANDLE_STMT:
_SQLFreeStmt(Handle,SQL_DROP);
@@ -718,6 +821,7 @@ static SQLRETURN SQL_API _SQLFreeConnect(
{
ODBCConnection* dbc = (ODBCConnection*) hdbc;
TRACE("_SQLFreeConnect");
FreeConnectParams (dbc->params);
free (dbc);
@@ -727,17 +831,20 @@ static SQLRETURN SQL_API _SQLFreeConnect(
SQLRETURN SQL_API SQLFreeConnect(
SQLHDBC hdbc)
{
TRACE("SQLFreeConnect");
return _SQLFreeConnect(hdbc);
}
static SQLRETURN SQL_API _SQLFreeEnv(
SQLHENV henv)
{
TRACE("_SQLFreeEnv");
return SQL_SUCCESS;
}
SQLRETURN SQL_API SQLFreeEnv(
SQLHENV henv)
{
TRACE("SQLFreeEnv");
return _SQLFreeEnv(henv);
}
@@ -747,6 +854,7 @@ static SQLRETURN SQL_API _SQLFreeStmt(
{
struct _hstmt *stmt=(struct _hstmt *)hstmt;
TRACE("_SQLFreeStmt");
if (fOption==SQL_DROP) {
free (hstmt);
} else if (fOption==SQL_CLOSE) {
@@ -758,6 +866,7 @@ SQLRETURN SQL_API SQLFreeStmt(
SQLHSTMT hstmt,
SQLUSMALLINT fOption)
{
TRACE("SQLFreeStmt");
return _SQLFreeStmt(hstmt, fOption);
}
@@ -768,6 +877,7 @@ SQLRETURN SQL_API SQLGetStmtAttr (
SQLINTEGER BufferLength,
SQLINTEGER * StringLength)
{
TRACE("SQLGetStmtAttr");
return SQL_SUCCESS;
}
@@ -777,6 +887,7 @@ SQLRETURN SQL_API SQLGetCursorName(
SQLSMALLINT cbCursorMax,
SQLSMALLINT FAR *pcbCursor)
{
TRACE("SQLGetCursorName");
return SQL_SUCCESS;
}
@@ -788,6 +899,7 @@ struct _hstmt *stmt = (struct _hstmt *) hstmt;
struct _hdbc *dbc = (struct _hdbc *) stmt->hdbc;
struct _henv *env = (struct _henv *) dbc->henv;
TRACE("SQLNumResultCols");
*pccol = env->sql->num_columns;
return SQL_SUCCESS;
}
@@ -799,6 +911,7 @@ SQLRETURN SQL_API SQLPrepare(
{
struct _hstmt *stmt=(struct _hstmt *)hstmt;
TRACE("SQLPrepare");
if (cbSqlStr!=SQL_NTS) {
strncpy(stmt->query, szSqlStr, cbSqlStr);
stmt->query[cbSqlStr]='\0';
@@ -815,7 +928,8 @@ SQLRETURN SQL_API SQLRowCount(
{
struct _hstmt *stmt=(struct _hstmt *)hstmt;
*pcrow = stmt->row_affected;
TRACE("SQLRowCount");
*pcrow = stmt->rows_affected;
return SQL_SUCCESS;
}
@@ -824,6 +938,7 @@ SQLRETURN SQL_API SQLSetCursorName(
SQLCHAR FAR *szCursor,
SQLSMALLINT cbCursor)
{
TRACE("SQLSetCursorName");
return SQL_SUCCESS;
}
@@ -832,6 +947,7 @@ SQLRETURN SQL_API SQLTransact(
SQLHDBC hdbc,
SQLUSMALLINT fType)
{
TRACE("SQLTransact");
return SQL_SUCCESS;
}
@@ -846,6 +962,7 @@ SQLRETURN SQL_API SQLSetParam( /* Use SQLBindParameter */
SQLPOINTER rgbValue,
SQLINTEGER FAR *pcbValue)
{
TRACE("SQLSetParam");
return SQL_SUCCESS;
}
@@ -860,6 +977,7 @@ SQLRETURN SQL_API SQLColumns(
SQLCHAR FAR *szColumnName,
SQLSMALLINT cbColumnName)
{
TRACE("SQLColumns");
return SQL_SUCCESS;
}
@@ -868,6 +986,7 @@ SQLRETURN SQL_API SQLGetConnectOption(
SQLUSMALLINT fOption,
SQLPOINTER pvParam)
{
TRACE("SQLGetConnectOption");
return SQL_SUCCESS;
}
@@ -891,6 +1010,7 @@ MdbColumn *col;
MdbTableDef *table;
int i;
TRACE("SQLGetData");
stmt = (struct _hstmt *) hstmt;
dbc = (struct _hdbc *) stmt->hdbc;
env = (struct _henv *) dbc->henv;
@@ -923,6 +1043,7 @@ SQLRETURN SQL_API SQLGetFunctions(
SQLUSMALLINT fFunction,
SQLUSMALLINT FAR *pfExists)
{
TRACE("SQLGetFunctions");
return SQL_SUCCESS;
}
@@ -933,6 +1054,7 @@ SQLRETURN SQL_API SQLGetInfo(
SQLSMALLINT cbInfoValueMax,
SQLSMALLINT FAR *pcbInfoValue)
{
TRACE("SQLGetInfo");
return SQL_SUCCESS;
}
@@ -941,6 +1063,7 @@ SQLRETURN SQL_API SQLGetStmtOption(
SQLUSMALLINT fOption,
SQLPOINTER pvParam)
{
TRACE("SQLGetStmtOption");
return SQL_SUCCESS;
}
@@ -950,136 +1073,145 @@ SQLRETURN SQL_API SQLGetTypeInfo(
{
struct _hstmt *stmt;
TRACE("SQLGetStmtOption");
stmt = (struct _hstmt *) hstmt;
if (!fSqlType) {
strcpy(stmt->query, "SELECT * FROM tds_typeinfo");
strcpy(stmt->query, "SELECT * FROM typeinfo");
} else {
sprintf(stmt->query, "SELECT * FROM tds_typeinfo WHERE SQL_DATA_TYPE = %d", fSqlType);
}
return _SQLExecute(hstmt);
sprintf(stmt->query, "SELECT * FROM typeinfo WHERE SQL_DATA_TYPE = %d", fSqlType);
}
/* return _SQLExecute(hstmt); */
return SQL_SUCCESS;
}
SQLRETURN SQL_API SQLParamData(
SQLHSTMT hstmt,
SQLPOINTER FAR *prgbValue)
{
return SQL_SUCCESS;
SQLRETURN SQL_API SQLParamData(
SQLHSTMT hstmt,
SQLPOINTER FAR *prgbValue)
{
TRACE("SQLParamData");
return SQL_SUCCESS;
}
SQLRETURN SQL_API SQLPutData(
SQLHSTMT hstmt,
SQLPOINTER rgbValue,
SQLINTEGER cbValue)
{
TRACE("SQLPutData");
return SQL_SUCCESS;
}
SQLRETURN SQL_API SQLSetConnectOption(
SQLHDBC hdbc,
SQLUSMALLINT fOption,
SQLUINTEGER vParam)
{
TRACE("SQLSetConnectOption");
return SQL_SUCCESS;
}
SQLRETURN SQL_API SQLSetStmtOption(
SQLHSTMT hstmt,
SQLUSMALLINT fOption,
SQLUINTEGER vParam)
{
TRACE("SQLSetStmtOption");
return SQL_SUCCESS;
}
SQLRETURN SQL_API SQLSpecialColumns(
SQLHSTMT hstmt,
SQLUSMALLINT fColType,
SQLCHAR FAR *szCatalogName,
SQLSMALLINT cbCatalogName,
SQLCHAR FAR *szSchemaName,
SQLSMALLINT cbSchemaName,
SQLCHAR FAR *szTableName,
SQLSMALLINT cbTableName,
SQLUSMALLINT fScope,
SQLUSMALLINT fNullable)
{
TRACE("SQLSpecialColumns");
return SQL_SUCCESS;
}
SQLRETURN SQL_API SQLStatistics(
SQLHSTMT hstmt,
SQLCHAR FAR *szCatalogName,
SQLSMALLINT cbCatalogName,
SQLCHAR FAR *szSchemaName,
SQLSMALLINT cbSchemaName,
SQLCHAR FAR *szTableName,
SQLSMALLINT cbTableName,
SQLUSMALLINT fUnique,
SQLUSMALLINT fAccuracy)
{
TRACE("SQLStatistics");
return SQL_SUCCESS;
}
SQLRETURN SQL_API SQLTables(
SQLHSTMT hstmt,
SQLCHAR FAR *szCatalogName,
SQLSMALLINT cbCatalogName,
SQLCHAR FAR *szSchemaName,
SQLSMALLINT cbSchemaName,
SQLCHAR FAR *szTableName,
SQLSMALLINT cbTableName,
SQLCHAR FAR *szTableType,
SQLSMALLINT cbTableType)
{
char *query, *p;
char *sptables = "exec sp_tables ";
int querylen, clen, slen, tlen, ttlen;
int first = 1;
struct _hstmt *stmt;
TRACE("SQLTables");
stmt = (struct _hstmt *) hstmt;
clen = _odbc_get_string_size(cbCatalogName, szCatalogName);
slen = _odbc_get_string_size(cbSchemaName, szSchemaName);
tlen = _odbc_get_string_size(cbTableName, szTableName);
ttlen = _odbc_get_string_size(cbTableType, szTableType);
querylen = strlen(sptables) + clen + slen + tlen + ttlen + 40; /* a little padding for quotes and commas */
query = (char *) malloc(querylen);
p = query;
strcpy(p, sptables);
p += strlen(sptables);
if (tlen) {
*p++ = '"';
strncpy(p, szTableName, tlen); *p+=tlen;
*p++ = '"';
first = 0;
}
SQLRETURN SQL_API SQLPutData(
SQLHSTMT hstmt,
SQLPOINTER rgbValue,
SQLINTEGER cbValue)
{
return SQL_SUCCESS;
if (slen) {
if (!first) *p++ = ',';
*p++ = '"';
strncpy(p, szSchemaName, slen); *p+=slen;
*p++ = '"';
first = 0;
}
SQLRETURN SQL_API SQLSetConnectOption(
SQLHDBC hdbc,
SQLUSMALLINT fOption,
SQLUINTEGER vParam)
{
return SQL_SUCCESS;
if (clen) {
if (!first) *p++ = ',';
*p++ = '"';
strncpy(p, szCatalogName, clen); *p+=clen;
*p++ = '"';
first = 0;
}
SQLRETURN SQL_API SQLSetStmtOption(
SQLHSTMT hstmt,
SQLUSMALLINT fOption,
SQLUINTEGER vParam)
{
return SQL_SUCCESS;
if (ttlen) {
if (!first) *p++ = ',';
*p++ = '"';
strncpy(p, szTableType, ttlen); *p+=ttlen;
*p++ = '"';
first = 0;
}
SQLRETURN SQL_API SQLSpecialColumns(
SQLHSTMT hstmt,
SQLUSMALLINT fColType,
SQLCHAR FAR *szCatalogName,
SQLSMALLINT cbCatalogName,
SQLCHAR FAR *szSchemaName,
SQLSMALLINT cbSchemaName,
SQLCHAR FAR *szTableName,
SQLSMALLINT cbTableName,
SQLUSMALLINT fScope,
SQLUSMALLINT fNullable)
{
return SQL_SUCCESS;
}
SQLRETURN SQL_API SQLStatistics(
SQLHSTMT hstmt,
SQLCHAR FAR *szCatalogName,
SQLSMALLINT cbCatalogName,
SQLCHAR FAR *szSchemaName,
SQLSMALLINT cbSchemaName,
SQLCHAR FAR *szTableName,
SQLSMALLINT cbTableName,
SQLUSMALLINT fUnique,
SQLUSMALLINT fAccuracy)
{
return SQL_SUCCESS;
}
SQLRETURN SQL_API SQLTables(
SQLHSTMT hstmt,
SQLCHAR FAR *szCatalogName,
SQLSMALLINT cbCatalogName,
SQLCHAR FAR *szSchemaName,
SQLSMALLINT cbSchemaName,
SQLCHAR FAR *szTableName,
SQLSMALLINT cbTableName,
SQLCHAR FAR *szTableType,
SQLSMALLINT cbTableType)
{
char *query, *p;
char *sptables = "exec sp_tables ";
int querylen, clen, slen, tlen, ttlen;
int first = 1;
struct _hstmt *stmt;
stmt = (struct _hstmt *) hstmt;
clen = _odbc_get_string_size(cbCatalogName, szCatalogName);
slen = _odbc_get_string_size(cbSchemaName, szSchemaName);
tlen = _odbc_get_string_size(cbTableName, szTableName);
ttlen = _odbc_get_string_size(cbTableType, szTableType);
querylen = strlen(sptables) + clen + slen + tlen + ttlen + 40; /* a little padding for quotes and commas */
query = (char *) malloc(querylen);
p = query;
strcpy(p, sptables);
p += strlen(sptables);
if (tlen) {
*p++ = '"';
strncpy(p, szTableName, tlen); *p+=tlen;
*p++ = '"';
first = 0;
}
if (slen) {
if (!first) *p++ = ',';
*p++ = '"';
strncpy(p, szSchemaName, slen); *p+=slen;
*p++ = '"';
first = 0;
}
if (clen) {
if (!first) *p++ = ',';
*p++ = '"';
strncpy(p, szCatalogName, clen); *p+=clen;
*p++ = '"';
first = 0;
}
if (ttlen) {
if (!first) *p++ = ',';
*p++ = '"';
strncpy(p, szTableType, ttlen); *p+=ttlen;
*p++ = '"';
first = 0;
}
*p++ = '\0';
// fprintf(stderr,"\nquery = %s\n",query);
*p++ = '\0';
// fprintf(stderr,"\nquery = %s\n",query);
strcpy(stmt->query, query);
return _SQLExecute(hstmt);
@@ -1096,6 +1228,7 @@ SQLRETURN SQL_API SQLDataSources(
SQLSMALLINT cbDescriptionMax,
SQLSMALLINT FAR *pcbDescription)
{
TRACE("SQLDataSources");
return SQL_SUCCESS;
}

View File

@@ -23,7 +23,7 @@
#include <stdio.h>
static char software_version[] = "$Id: unittest.c,v 1.5 2002/01/24 12:34:13 brianb Exp $";
static char software_version[] = "$Id: unittest.c,v 1.6 2002/04/09 01:19:26 brianb Exp $";
static void *no_unused_var_warn[] = {software_version,
no_unused_var_warn};
@@ -168,6 +168,7 @@ int i;
long sAge = 1023;
long cbAge = sizeof(long);
UCHAR szCol1[60];
SQLINTEGER length;
printf("excecuting first statement\n");
retcode = SQLExecute(hstmt);
@@ -185,7 +186,7 @@ int i;
szSqlState, szErrorMsg);
exit(1);
}
SQLBindCol(hstmt, 3, SQL_CHAR, szCol1, 60, NULL);
SQLBindCol(hstmt, 3, SQL_CHAR, szCol1, 60, &length);
//SQLBindCol(hstmt, 1, SQL_CHAR, szCol1, 60, NULL);
/* Execute statement with first row. */
@@ -194,7 +195,7 @@ int i;
while ((retcode = SQLFetch(hstmt)) == SQL_SUCCESS)
{
i++;
printf("%d: szCol1 = %s\n",i,szCol1);
printf("%d: szCol1 = %s (%d)\n",i,szCol1, length);
}
if (retcode != SQL_NO_DATA_FOUND)
{