diff --git a/src/modules/Odbc/odbc.c b/src/modules/Odbc/odbc.c index 23775a2adbbb95ccf1e8e9b481390b687f44fe3e..c9dc22fce405aca77917fc055682c2f9eb9ee7eb 100644 --- a/src/modules/Odbc/odbc.c +++ b/src/modules/Odbc/odbc.c @@ -1,5 +1,5 @@ /* - * $Id: odbc.c,v 1.3 1997/06/10 03:21:41 grubba Exp $ + * $Id: odbc.c,v 1.4 1997/08/15 20:20:10 grubba Exp $ * * Pike interface to ODBC compliant databases. * @@ -15,7 +15,7 @@ #endif /* HAVE_CONFIG_H */ #include "global.h" -RCSID("$Id: odbc.c,v 1.3 1997/06/10 03:21:41 grubba Exp $"); +RCSID("$Id: odbc.c,v 1.4 1997/08/15 20:20:10 grubba Exp $"); #include "interpret.h" #include "object.h" @@ -87,8 +87,18 @@ volatile void odbc_error(const char *fun, const char *msg, case SQL_SUCCESS_WITH_INFO: error("%s():%s: %d:%s:%s\n", fun, msg, code, errcode, errmsg); break; + case SQL_ERROR: + error("%s():%s: SQLError failed (%d:SQL_ERROR)\n", fun, msg, code); + break; + case SQL_NO_DATA_FOUND: + error("%s():%s: SQLError failed (%d:SQL_NO_DATA_FOUND)\n", fun, msg, code); + break; + case SQL_INVALID_HANDLE: + error("%s():%s: SQLError failed (%d:SQL_INVALID_HANDLE)\n", fun, msg, code); + break; default: error("%s():%s: SQLError failed (%d:%d)\n", fun, msg, code, _code); + break; } } @@ -231,6 +241,7 @@ static void f_big_query(INT32 args) odbc_check_error("odbc->big_query", "Statement allocation failed", SQLAllocStmt(PIKE_ODBC->hdbc, &hstmt), NULL); + PIKE_ODBC->hstmt = hstmt; odbc_check_error("odbc->big_query", "Query failed", SQLExecDirect(hstmt, q->str, q->len), NULL); pop_n_elems(args); @@ -241,10 +252,8 @@ static void f_big_query(INT32 args) odbc_check_error("odbc->big_query", "Couldn't get the number of rows", SQLRowCount(hstmt, &(PIKE_ODBC->affected_rows)), NULL); - pop_n_elems(args); - if (PIKE_ODBC->num_fields) { - PIKE_ODBC->hstmt=hstmt; + /* PIKE_ODBC->hstmt=hstmt; */ push_object(fp->current_object); fp->current_object->refs++; diff --git a/src/modules/Odbc/odbc_result.c b/src/modules/Odbc/odbc_result.c index 08b05e02b2045591bd1c81a965a542c1ac5e4fb7..4a89c3f51c9e099c47d8e5b7ee3c4604c807edf5 100644 --- a/src/modules/Odbc/odbc_result.c +++ b/src/modules/Odbc/odbc_result.c @@ -1,5 +1,5 @@ /* - * $Id: odbc_result.c,v 1.3 1997/06/10 03:21:42 grubba Exp $ + * $Id: odbc_result.c,v 1.4 1997/08/15 20:20:11 grubba Exp $ * * Pike interface to ODBC compliant databases * @@ -17,7 +17,7 @@ #ifdef HAVE_ODBC #include "global.h" -RCSID("$Id: odbc_result.c,v 1.3 1997/06/10 03:21:42 grubba Exp $"); +RCSID("$Id: odbc_result.c,v 1.4 1997/08/15 20:20:11 grubba Exp $"); #include "interpret.h" #include "object.h" @@ -155,7 +155,7 @@ static void odbc_fix_fields(void) break; case SQL_DATE: push_text("date"); - odbc_fields[i].size = 7; + odbc_fields[i].size = 7; break; case SQL_DECIMAL: push_text("decimal"); @@ -163,13 +163,13 @@ static void odbc_fix_fields(void) break; case SQL_DOUBLE: push_text("double"); - odbc_fields[i].size = 8; - odbc_fields[i].type = T_FLOAT; + /* odbc_fields[i].size = 8; */ + /* odbc_fields[i].type = T_FLOAT; */ break; case SQL_INTEGER: push_text("integer"); - odbc_fields[i].size = 4; - odbc_fields[i].type = T_INT; + /* odbc_fields[i].size = 4; */ + /* odbc_fields[i].type = T_INT; */ break; case SQL_LONGVARBINARY: push_text("long blob"); @@ -179,13 +179,13 @@ static void odbc_fix_fields(void) break; case SQL_REAL: push_text("float"); - odbc_fields[i].size = 4; - odbc_fields[i].type = T_FLOAT; + /* odbc_fields[i].size = 4; */ + /* odbc_fields[i].type = T_FLOAT; */ break; case SQL_SMALLINT: push_text("short"); - odbc_fields[i].size = 4; - odbc_fields[i].type = T_INT; + /* odbc_fields[i].size = 4; */ + /* odbc_fields[i].type = T_INT; */ break; case SQL_TIMESTAMP: push_text("time"); @@ -215,9 +215,9 @@ static void odbc_fix_fields(void) f_aggregate_mapping(5*2); - /* Align to long-word size */ - odbc_fields[i].size += 3; - odbc_fields[i].size &= ~3; + /* Align to longlong-word size */ + odbc_fields[i].size += 7; + odbc_fields[i].size &= ~7; membuf_size += odbc_fields[i].size; } @@ -280,13 +280,14 @@ static void f_create(INT32 args) error("Too few arguments to odbc_result()\n"); } if ((sp[-args].type != T_OBJECT) || - (sp[-args].u.object->prog != odbc_program)) { + (!(PIKE_ODBC_RES->odbc = + (struct precompiled_odbc *)get_storage(sp[-args].u.object, + odbc_program)))) { error("Bad argument 1 to odbc_result()\n"); } PIKE_ODBC_RES->obj = sp[-args].u.object; PIKE_ODBC_RES->obj->refs++; - PIKE_ODBC_RES->odbc = ((struct precompiled_odbc *)sp[-args].u.object->storage); PIKE_ODBC_RES->hstmt = PIKE_ODBC_RES->odbc->hstmt; PIKE_ODBC_RES->odbc->hstmt = SQL_NULL_HSTMT;