diff -urp interbase/interbase.c interbase-/interbase.c --- interbase/interbase.c Tue Oct 5 23:08:34 2004 +++ interbase-/interbase.c Tue Oct 5 22:29:06 2004 @@ -159,6 +159,17 @@ ib_error_check() } } +static void +ib_error_check_warn() +{ + short code = isc_sqlcode(isc_status); + if (code != 0) { + char buf[1024]; + isc_sql_interprete(code, buf, 1024); + rb_warning("%s(%d)", buf, code); + } +} + static XSQLDA* sqlda_alloc(cols) long cols; @@ -218,15 +229,9 @@ conn_drop_cursors(conn) } static void -conn_disconnect(conn) +conn_remove(conn) struct IBconn *conn; { - if (transact) { - isc_commit_transaction(isc_status, &transact); - ib_error_check(); - } - isc_detach_database(isc_status, &conn->db); - ib_error_check(); conn->db = 0; db_num--; if (ibconn_list == 0 || ibconn_list == conn) @@ -245,6 +250,32 @@ conn_disconnect(conn) } static void +conn_disconnect(conn) + struct IBconn *conn; +{ + if (transact) { + isc_commit_transaction(isc_status, &transact); + ib_error_check(); + } + isc_detach_database(isc_status, &conn->db); + ib_error_check(); + conn_remove(conn); +} + +static void +conn_disconnect_warn(conn) + struct IBconn *conn; +{ + if (transact) { + isc_commit_transaction(isc_status, &transact); + ib_error_check_warn(); + } + isc_detach_database(isc_status, &conn->db); + ib_error_check_warn(); + conn_remove(conn); +} + +static void conn_mark(conn) struct IBconn *conn; { @@ -256,7 +287,7 @@ conn_free(conn) struct IBconn *conn; { if (conn->db) { - conn_disconnect(conn); + conn_disconnect_warn(conn); } free(conn); } @@ -832,6 +863,19 @@ curs_drop(curs) } static void +curs_drop_warn(curs) + struct IBcurs *curs; +{ + if (curs->open) { + isc_dsql_free_statement(isc_status, &curs->stmt, DSQL_close); + ib_error_check_warn(); + } + isc_dsql_free_statement(isc_status, &curs->stmt, DSQL_drop); + ib_error_check_warn(); + curs->stmt = 0; +} + +static void curs_mark(curs) struct IBcurs *curs; { @@ -844,7 +888,7 @@ curs_free(curs) struct IBcurs *curs; { if (curs->stmt) - curs_drop(curs); + curs_drop_warn(curs); free(curs); } @@ -1645,6 +1689,8 @@ ibcurs_drop(self) RARRAY(conn->curs)->ptr[i] = Qnil; } } + + return Qnil; } static VALUE