mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-24 06:43:03 +01:00
Since Vlad and Alex did the hard work, I took the comment from Mike (approx 6 years ago) and did the small change function->method.
This commit is contained in:
parent
b27e6828c9
commit
443feabad9
@ -1344,7 +1344,7 @@ ISC_STATUS GDS_DSQL_EXECUTE2(ISC_STATUS* user_status,
|
||||
message->msg_address = in_msg;
|
||||
statement->rsr_flags &= ~Rsr::FETCHED;
|
||||
statement->rsr_format = statement->rsr_bind_format;
|
||||
stmt_clear_exception(statement);
|
||||
statement->clearException();
|
||||
|
||||
/* set up the packet for the other guy... */
|
||||
|
||||
@ -1572,7 +1572,7 @@ ISC_STATUS GDS_DSQL_EXECUTE_IMMED2(ISC_STATUS* user_status,
|
||||
|
||||
message->msg_address = in_msg;
|
||||
|
||||
stmt_clear_exception(statement);
|
||||
statement->clearException();
|
||||
|
||||
/* set up the packet for the other guy... */
|
||||
|
||||
@ -1681,11 +1681,11 @@ ISC_STATUS GDS_DSQL_FETCH(ISC_STATUS* user_status,
|
||||
|
||||
if (!(statement->rsr_flags & Rsr::FETCHED))
|
||||
{
|
||||
stmt_raise_exception(statement);
|
||||
statement->raiseException();
|
||||
|
||||
statement->rsr_flags &= ~(Rsr::EOF_SET | Rsr::STREAM_ERR | Rsr::PAST_EOF);
|
||||
statement->rsr_rows_pending = 0;
|
||||
stmt_clear_exception(statement);
|
||||
statement->clearException();
|
||||
|
||||
REM_MSG message = statement->rsr_message;
|
||||
if (message)
|
||||
@ -1779,7 +1779,7 @@ ISC_STATUS GDS_DSQL_FETCH(ISC_STATUS* user_status,
|
||||
/* We've reached eof or there was an error */
|
||||
!(statement->rsr_flags & (Rsr::EOF_SET | Rsr::STREAM_ERR)) &&
|
||||
/* No error pending */
|
||||
(!stmt_have_exception(statement) )))
|
||||
(!statement->haveException() )))
|
||||
{
|
||||
/* set up the packet for the other guy... */
|
||||
|
||||
@ -1835,10 +1835,10 @@ ISC_STATUS GDS_DSQL_FETCH(ISC_STATUS* user_status,
|
||||
/* We've either got data, or some is on the way, or we have an error, or we have EOF */
|
||||
|
||||
fb_assert(statement->rsr_msgs_waiting || (statement->rsr_rows_pending > 0)
|
||||
|| stmt_have_exception(statement)
|
||||
|| statement->haveException()
|
||||
|| statement->rsr_flags & (Rsr::EOF_SET));
|
||||
|
||||
while (!stmt_have_exception(statement) /* received a database error */
|
||||
while (!statement->haveException() /* received a database error */
|
||||
&&!(statement->rsr_flags & (Rsr::EOF_SET)) /* reached end of cursor */
|
||||
&&!(statement->rsr_msgs_waiting >= 2) /* Have looked ahead for end of batch */
|
||||
&&!(statement->rsr_rows_pending == 0))
|
||||
@ -2308,7 +2308,7 @@ ISC_STATUS GDS_DSQL_SET_CURSOR(ISC_STATUS* user_status,
|
||||
|
||||
try
|
||||
{
|
||||
stmt_raise_exception(statement);
|
||||
statement->raiseException();
|
||||
|
||||
/* make sure the protocol supports it */
|
||||
|
||||
@ -2361,7 +2361,7 @@ ISC_STATUS GDS_DSQL_SET_CURSOR(ISC_STATUS* user_status,
|
||||
if (!receive_response(rdb, packet)) {
|
||||
return user_status[1];
|
||||
}
|
||||
stmt_raise_exception(statement);
|
||||
statement->raiseException();
|
||||
}
|
||||
catch (const Firebird::Exception& ex)
|
||||
{
|
||||
@ -2402,7 +2402,7 @@ ISC_STATUS GDS_DSQL_SQL_INFO(ISC_STATUS* user_status,
|
||||
|
||||
try
|
||||
{
|
||||
stmt_raise_exception(statement);
|
||||
statement->raiseException();
|
||||
|
||||
/* make sure the protocol supports it */
|
||||
|
||||
@ -2413,7 +2413,7 @@ ISC_STATUS GDS_DSQL_SQL_INFO(ISC_STATUS* user_status,
|
||||
status = info(user_status, rdb, op_info_sql, statement->rsr_id, 0,
|
||||
item_length, items, 0, 0, buffer_length, buffer);
|
||||
|
||||
stmt_raise_exception(statement);
|
||||
statement->raiseException();
|
||||
}
|
||||
catch (const Firebird::Exception& ex)
|
||||
{
|
||||
@ -4791,13 +4791,13 @@ static bool clear_stmt_que(rem_port* port, ISC_STATUS* user_status, RSR statemen
|
||||
return false;
|
||||
|
||||
// We must receive isc_req_sync as we did fetch after EOF
|
||||
fb_assert(stmt_have_exception(statement) == isc_req_sync);
|
||||
fb_assert(statement->haveException() == isc_req_sync);
|
||||
}
|
||||
|
||||
// hvlad: clear isc_req_sync error as it is received because of our batch
|
||||
// fetching code, not because of wrong client application
|
||||
if (stmt_have_exception(statement) == isc_req_sync) {
|
||||
stmt_clear_exception(statement);
|
||||
if (statement->haveException() == isc_req_sync) {
|
||||
statement->clearException();
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -4913,7 +4913,7 @@ static bool batch_dsql_fetch(rem_port* port,
|
||||
|
||||
/* save the status vector in a safe place */
|
||||
|
||||
stmt_save_exception(statement, tmp_status, false);
|
||||
statement->saveException(tmp_status, false);
|
||||
|
||||
statement->rsr_rows_pending = 0;
|
||||
--statement->rsr_batch_count;
|
||||
@ -6096,8 +6096,7 @@ static bool receive_packet_noqueue(rem_port* port,
|
||||
if (!check_response(rdb, &p->packet))
|
||||
{
|
||||
// save error within the corresponding statement
|
||||
stmt_save_exception(statement,
|
||||
p->packet.p_resp.p_resp_status_vector, false);
|
||||
statement->saveException(p->packet.p_resp.p_resp_status_vector, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -6149,7 +6148,7 @@ static bool receive_queued_packet(rem_port* port,
|
||||
|
||||
/* Grab first queue entry */
|
||||
|
||||
RMTQUE que_inst = port->port_receive_rmtque;
|
||||
rmtque* que_inst = port->port_receive_rmtque;
|
||||
|
||||
/* Receive the data */
|
||||
|
||||
@ -6176,7 +6175,7 @@ static void enqueue_receive(rem_port* port,
|
||||
* Functional description
|
||||
*
|
||||
**************************************/
|
||||
RMTQUE que_inst = new rmtque;
|
||||
rmtque* const que_inst = new rmtque;
|
||||
|
||||
/* Prepare a queue entry */
|
||||
|
||||
@ -6187,7 +6186,7 @@ static void enqueue_receive(rem_port* port,
|
||||
que_inst->rmtque_rdb = rdb;
|
||||
|
||||
/* Walk to the end of the current queue */
|
||||
RMTQUE* queptr = &port->port_receive_rmtque;
|
||||
rmtque** queptr = &port->port_receive_rmtque;
|
||||
while (*queptr)
|
||||
queptr = &(*queptr)->rmtque_next;
|
||||
|
||||
@ -6211,7 +6210,7 @@ static void dequeue_receive( rem_port* port)
|
||||
|
||||
/* Grab first queue entry & de-queue it*/
|
||||
|
||||
RMTQUE que_inst = port->port_receive_rmtque;
|
||||
rmtque* que_inst = port->port_receive_rmtque;
|
||||
port->port_receive_rmtque = que_inst->rmtque_next;
|
||||
que_inst->rmtque_next = NULL;
|
||||
|
||||
@ -6376,7 +6375,7 @@ static void release_statement( RSR* statement)
|
||||
delete (*statement)->rsr_user_select_format;
|
||||
}
|
||||
delete (*statement)->rsr_select_format;
|
||||
stmt_release_exception(*statement);
|
||||
(*statement)->releaseException();
|
||||
|
||||
REMOTE_release_messages((*statement)->rsr_message);
|
||||
delete *statement;
|
||||
|
@ -67,7 +67,7 @@ REM_MSG PARSE_messages(const UCHAR* blr, USHORT blr_length)
|
||||
const USHORT msg_number = *blr++;
|
||||
USHORT count = *blr++;
|
||||
count += (*blr++) << 8;
|
||||
rem_fmt* format = new rem_fmt(count);
|
||||
rem_fmt* const format = new rem_fmt(count);
|
||||
#ifdef DEBUG_REMOTE_MEMORY
|
||||
printf("PARSE_messages allocate format %x\n", format);
|
||||
#endif
|
||||
|
@ -215,7 +215,7 @@ struct rem_fmt : public Firebird::GlobalStorage
|
||||
Firebird::Array<dsc> fmt_desc;
|
||||
|
||||
public:
|
||||
rem_fmt(size_t rpt) :
|
||||
explicit rem_fmt(size_t rpt) :
|
||||
fmt_length(0), fmt_net_length(0), fmt_count(0),
|
||||
fmt_version(0), fmt_desc(getPool(), rpt)
|
||||
{
|
||||
@ -238,7 +238,7 @@ typedef struct Message : public Firebird::GlobalStorage
|
||||
UCharArrayAutoPtr msg_buffer; /* Allocated message */
|
||||
|
||||
public:
|
||||
Message(size_t rpt) :
|
||||
explicit Message(size_t rpt) :
|
||||
msg_next(0),
|
||||
#ifdef SCROLLABLE_CURSORS
|
||||
msg_prior(0), msg_absolute(0),
|
||||
@ -310,7 +310,7 @@ public:
|
||||
#endif
|
||||
|
||||
public:
|
||||
Rrq(size_t rpt) :
|
||||
explicit Rrq(size_t rpt) :
|
||||
rrq_rdb(0), rrq_rtr(0), rrq_next(0), rrq_levels(0),
|
||||
rrq_handle(0), rrq_id(0), rrq_max_msg(0), rrq_level(0),
|
||||
rrq_rpt(getPool(), rpt)
|
||||
@ -374,6 +374,12 @@ public:
|
||||
rsr_rows_pending(0), rsr_msgs_waiting(0), rsr_reorder_level(0), rsr_batch_count(0)
|
||||
{ }
|
||||
|
||||
void saveException(const ISC_STATUS* status, bool overwrite);
|
||||
void clearException();
|
||||
ISC_STATUS haveException();
|
||||
void raiseException();
|
||||
void releaseException();
|
||||
|
||||
static ISC_STATUS badHandle() { return isc_bad_req_handle; }
|
||||
} *RSR;
|
||||
|
||||
@ -391,6 +397,8 @@ private:
|
||||
} ptr;
|
||||
|
||||
public:
|
||||
RemoteObject() { ptr.rdb = 0; }
|
||||
|
||||
template <typename R>
|
||||
R* get(R* r)
|
||||
{
|
||||
@ -401,62 +409,55 @@ public:
|
||||
return r;
|
||||
}
|
||||
|
||||
public:
|
||||
void operator=(Rdb* v) { ptr.rdb = v; }
|
||||
void operator=(Rtr* v) { ptr.rtr = v; }
|
||||
void operator=(Rbl* v) { ptr.rbl = v; }
|
||||
void operator=(Rrq* v) { ptr.rrq = v; }
|
||||
void operator=(Rsr* v) { ptr.rsr = v; }
|
||||
|
||||
public:
|
||||
operator Rdb*() { return get(ptr.rdb); }
|
||||
operator Rtr*() { return get(ptr.rtr); }
|
||||
operator Rbl*() { return get(ptr.rbl); }
|
||||
operator Rrq*() { return get(ptr.rrq); }
|
||||
operator Rsr*() { return get(ptr.rsr); }
|
||||
|
||||
bool isMissing() { return ptr.rdb == NULL; }
|
||||
bool isMissing() const { return ptr.rdb == NULL; }
|
||||
void release() { ptr.rdb = 0; }
|
||||
};
|
||||
|
||||
|
||||
|
||||
// will be methods of remote statement class
|
||||
inline void stmt_save_exception(RSR statement, const ISC_STATUS* status, bool overwrite)
|
||||
inline void Rsr::saveException(const ISC_STATUS* status, bool overwrite)
|
||||
{
|
||||
if (!statement->rsr_status) {
|
||||
statement->rsr_status = new Firebird::StatusHolder();
|
||||
if (!rsr_status) {
|
||||
rsr_status = new Firebird::StatusHolder();
|
||||
}
|
||||
if (overwrite || !statement->rsr_status->getError()) {
|
||||
statement->rsr_status->save(status);
|
||||
if (overwrite || !rsr_status->getError()) {
|
||||
rsr_status->save(status);
|
||||
}
|
||||
}
|
||||
|
||||
inline void stmt_clear_exception(RSR statement)
|
||||
inline void Rsr::clearException()
|
||||
{
|
||||
if (statement->rsr_status)
|
||||
statement->rsr_status->clear();
|
||||
if (rsr_status)
|
||||
rsr_status->clear();
|
||||
}
|
||||
|
||||
inline ISC_STATUS stmt_have_exception(RSR statement)
|
||||
inline ISC_STATUS Rsr::haveException()
|
||||
{
|
||||
return (statement->rsr_status ?
|
||||
statement->rsr_status->getError() : 0);
|
||||
return (rsr_status ? rsr_status->getError() : 0);
|
||||
}
|
||||
|
||||
inline void stmt_raise_exception(RSR statement)
|
||||
inline void Rsr::raiseException()
|
||||
{
|
||||
if (statement->rsr_status)
|
||||
statement->rsr_status->raise();
|
||||
if (rsr_status)
|
||||
rsr_status->raise();
|
||||
}
|
||||
|
||||
inline void stmt_release_exception(RSR statement)
|
||||
inline void Rsr::releaseException()
|
||||
{
|
||||
if (statement->rsr_status)
|
||||
{
|
||||
delete statement->rsr_status;
|
||||
statement->rsr_status = NULL;
|
||||
}
|
||||
delete rsr_status;
|
||||
rsr_status = NULL;
|
||||
}
|
||||
|
||||
#include "../remote/xdr.h"
|
||||
@ -503,7 +504,7 @@ public:
|
||||
|
||||
|
||||
// port_flags
|
||||
const USHORT PORT_symmetric = 0x0001; // Server/client archiectures are symmetic
|
||||
const USHORT PORT_symmetric = 0x0001; // Server/client architectures are symmetic
|
||||
const USHORT PORT_rpc = 0x0002; // Protocol is remote procedure call
|
||||
const USHORT PORT_async = 0x0004; // Port is asynchronous channel for events
|
||||
const USHORT PORT_no_oob = 0x0008; // Don't send out of band data
|
||||
@ -849,7 +850,7 @@ public:
|
||||
|
||||
typedef bool (*t_rmtque_fn)(rem_port*, rmtque*, ISC_STATUS*, USHORT);
|
||||
|
||||
typedef struct rmtque : public Firebird::GlobalStorage
|
||||
struct rmtque : public Firebird::GlobalStorage
|
||||
{
|
||||
rmtque* rmtque_next; // Next entry in queue
|
||||
void* rmtque_parm; // What request has response in queue
|
||||
@ -863,6 +864,6 @@ public:
|
||||
rmtque() :
|
||||
rmtque_next(0), rmtque_parm(0), rmtque_message(0), rmtque_rdb(0), rmtque_function(0)
|
||||
{ }
|
||||
} *RMTQUE;
|
||||
};
|
||||
|
||||
#endif // REMOTE_REMOTE_H
|
||||
|
@ -84,7 +84,7 @@ typedef struct srvr : public Firebird::GlobalStorage
|
||||
USHORT srvr_flags;
|
||||
|
||||
public:
|
||||
srvr(srvr *servers, rem_port* port, USHORT flags) :
|
||||
srvr(srvr* servers, rem_port* port, USHORT flags) :
|
||||
srvr_next(servers), srvr_parent_port(port),
|
||||
srvr_port_type(port->port_type), srvr_flags(flags)
|
||||
{ }
|
||||
@ -2165,7 +2165,7 @@ ISC_STATUS rem_port::fetch(P_SQLDATA * sqldata, PACKET* sendL)
|
||||
|
||||
if (!(statement->rsr_flags & Rsr::FETCHED)) {
|
||||
statement->rsr_flags &= ~(Rsr::EOF_SET | Rsr::STREAM_ERR);
|
||||
stmt_clear_exception(statement);
|
||||
statement->clearException();
|
||||
REM_MSG message = statement->rsr_message;
|
||||
if (message != NULL) {
|
||||
statement->rsr_buffer = message;
|
||||
@ -2323,7 +2323,7 @@ ISC_STATUS rem_port::fetch(P_SQLDATA * sqldata, PACKET* sendL)
|
||||
/* If already have an error queued, don't overwrite it */
|
||||
if (!(statement->rsr_flags & Rsr::STREAM_ERR)) {
|
||||
statement->rsr_flags |= Rsr::STREAM_ERR;
|
||||
stmt_save_exception(statement, status_vector, true);
|
||||
statement->saveException(status_vector, true);
|
||||
}
|
||||
}
|
||||
if (s == 100)
|
||||
@ -4010,7 +4010,7 @@ static void release_statement( RSR * statement)
|
||||
delete (*statement)->rsr_select_format;
|
||||
delete (*statement)->rsr_bind_format;
|
||||
|
||||
stmt_release_exception(*statement);
|
||||
(*statement)->releaseException();
|
||||
REMOTE_release_messages((*statement)->rsr_message);
|
||||
|
||||
delete *statement;
|
||||
|
Loading…
Reference in New Issue
Block a user