mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-24 01:23:03 +01:00
Misc
This commit is contained in:
parent
e4ced1424e
commit
50102f6f4c
@ -270,6 +270,7 @@ void TempFile::extend(size_t delta)
|
|||||||
const char* const buffer = zeros().getBuffer();
|
const char* const buffer = zeros().getBuffer();
|
||||||
const size_t bufferSize = zeros().getSize();
|
const size_t bufferSize = zeros().getSize();
|
||||||
const size_t newSize = size + delta;
|
const size_t newSize = size + delta;
|
||||||
|
|
||||||
for (size_t offset = size; offset < newSize; offset += bufferSize)
|
for (size_t offset = size; offset < newSize; offset += bufferSize)
|
||||||
{
|
{
|
||||||
const size_t length = MIN(newSize - offset, bufferSize);
|
const size_t length = MIN(newSize - offset, bufferSize);
|
||||||
|
@ -362,7 +362,7 @@ TempSpace::Block* TempSpace::findBlock(offset_t& offset) const
|
|||||||
|
|
||||||
TempFile* TempSpace::setupFile(size_t size)
|
TempFile* TempSpace::setupFile(size_t size)
|
||||||
{
|
{
|
||||||
ISC_STATUS_ARRAY status_vector;
|
ISC_STATUS_ARRAY status_vector = {0};
|
||||||
|
|
||||||
for (size_t i = 0; i < tempDirs->getCount(); i++)
|
for (size_t i = 0; i < tempDirs->getCount(); i++)
|
||||||
{
|
{
|
||||||
|
@ -300,10 +300,9 @@ public:
|
|||||||
SCHAR prf_unaligned_buffer[PREFETCH_MAX_TRANSFER + MIN_PAGE_SIZE];
|
SCHAR prf_unaligned_buffer[PREFETCH_MAX_TRANSFER + MIN_PAGE_SIZE];
|
||||||
};
|
};
|
||||||
|
|
||||||
const int PRF_active = 1; // prefetch block currently in use
|
const int PRF_active = 1; // prefetch block currently in use
|
||||||
#endif // SUPERSERVER_V2
|
#endif // SUPERSERVER_V2
|
||||||
|
|
||||||
} //namespace Jrd
|
} //namespace Jrd
|
||||||
|
|
||||||
#endif // JRD_CCH_H
|
#endif // JRD_CCH_H
|
||||||
|
|
||||||
|
@ -187,8 +187,8 @@ void DYN_UTIL_generate_constraint_name( thread_db* tdbb, Global* gbl, Firebird::
|
|||||||
jrd_req* request = NULL;
|
jrd_req* request = NULL;
|
||||||
SSHORT id = -1;
|
SSHORT id = -1;
|
||||||
|
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
@ -212,7 +212,6 @@ void DYN_UTIL_generate_constraint_name( thread_db* tdbb, Global* gbl, Firebird::
|
|||||||
DYN_REQUEST(drq_f_nxt_con) = request;
|
DYN_REQUEST(drq_f_nxt_con) = request;
|
||||||
request = NULL;
|
request = NULL;
|
||||||
} while (found);
|
} while (found);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (const Firebird::Exception& ex)
|
catch (const Firebird::Exception& ex)
|
||||||
{
|
{
|
||||||
@ -260,8 +259,8 @@ void DYN_UTIL_generate_field_name( thread_db* tdbb, Global* gbl, Firebird::MetaN
|
|||||||
jrd_req* request = NULL;
|
jrd_req* request = NULL;
|
||||||
SSHORT id = -1;
|
SSHORT id = -1;
|
||||||
|
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
@ -284,7 +283,6 @@ void DYN_UTIL_generate_field_name( thread_db* tdbb, Global* gbl, Firebird::MetaN
|
|||||||
DYN_REQUEST(drq_f_nxt_fld) = request;
|
DYN_REQUEST(drq_f_nxt_fld) = request;
|
||||||
request = NULL;
|
request = NULL;
|
||||||
} while (found);
|
} while (found);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (const Firebird::Exception& ex)
|
catch (const Firebird::Exception& ex)
|
||||||
{
|
{
|
||||||
@ -318,8 +316,8 @@ void DYN_UTIL_generate_field_position(thread_db* tdbb,
|
|||||||
|
|
||||||
jrd_req* request = NULL;
|
jrd_req* request = NULL;
|
||||||
|
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
request = CMP_find_request(tdbb, drq_l_fld_pos, DYN_REQUESTS);
|
request = CMP_find_request(tdbb, drq_l_fld_pos, DYN_REQUESTS);
|
||||||
|
|
||||||
FOR(REQUEST_HANDLE request)
|
FOR(REQUEST_HANDLE request)
|
||||||
@ -336,7 +334,6 @@ void DYN_UTIL_generate_field_position(thread_db* tdbb,
|
|||||||
END_FOR;
|
END_FOR;
|
||||||
|
|
||||||
*field_pos = field_position;
|
*field_pos = field_position;
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (const Firebird::Exception& ex)
|
catch (const Firebird::Exception& ex)
|
||||||
{
|
{
|
||||||
@ -367,8 +364,8 @@ void DYN_UTIL_generate_index_name(thread_db* tdbb, Global* gbl,
|
|||||||
jrd_req* request = NULL;
|
jrd_req* request = NULL;
|
||||||
SSHORT id = -1;
|
SSHORT id = -1;
|
||||||
|
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
@ -433,8 +430,8 @@ void DYN_UTIL_generate_trigger_name( thread_db* tdbb, Global* gbl, Firebird::Met
|
|||||||
jrd_req* request = NULL;
|
jrd_req* request = NULL;
|
||||||
SSHORT id = -1;
|
SSHORT id = -1;
|
||||||
|
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
@ -585,8 +582,8 @@ bool DYN_UTIL_get_prot(thread_db* tdbb,
|
|||||||
|
|
||||||
jrd_req* request = CMP_find_request(tdbb, drq_l_prot_mask, DYN_REQUESTS);
|
jrd_req* request = CMP_find_request(tdbb, drq_l_prot_mask, DYN_REQUESTS);
|
||||||
|
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
if (!request)
|
if (!request)
|
||||||
{
|
{
|
||||||
request = CMP_compile2(tdbb, prot_blr, sizeof(prot_blr), true);
|
request = CMP_compile2(tdbb, prot_blr, sizeof(prot_blr), true);
|
||||||
@ -631,8 +628,8 @@ void DYN_UTIL_store_check_constraints(thread_db* tdbb,
|
|||||||
|
|
||||||
jrd_req* request = CMP_find_request(tdbb, drq_s_chk_con, DYN_REQUESTS);
|
jrd_req* request = CMP_find_request(tdbb, drq_s_chk_con, DYN_REQUESTS);
|
||||||
|
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
STORE(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction)
|
STORE(REQUEST_HANDLE request TRANSACTION_HANDLE gbl->gbl_transaction)
|
||||||
CHK IN RDB$CHECK_CONSTRAINTS
|
CHK IN RDB$CHECK_CONSTRAINTS
|
||||||
strcpy(CHK.RDB$CONSTRAINT_NAME, constraint_name.c_str());
|
strcpy(CHK.RDB$CONSTRAINT_NAME, constraint_name.c_str());
|
||||||
|
@ -1434,4 +1434,3 @@ static void set_lock_attachment(Lock* lock, Attachment* attachment)
|
|||||||
|
|
||||||
lock->lck_attachment = attachment;
|
lock->lck_attachment = attachment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5387,11 +5387,13 @@ static RecordSource* gen_sort(thread_db* tdbb,
|
|||||||
DEV_BLKCHK(prior_rsb, type_rsb);
|
DEV_BLKCHK(prior_rsb, type_rsb);
|
||||||
DEV_BLKCHK(sort, type_nod);
|
DEV_BLKCHK(sort, type_nod);
|
||||||
SET_TDBB(tdbb);
|
SET_TDBB(tdbb);
|
||||||
|
|
||||||
/* We already know the number of keys, but we also need to compute the
|
/* We already know the number of keys, but we also need to compute the
|
||||||
total number of fields, keys and non-keys, to be pumped thru sort. Starting
|
total number of fields, keys and non-keys, to be pumped thru sort. Starting
|
||||||
with the number of keys, count the other field referenced. Since a field
|
with the number of keys, count the other field referenced. Since a field
|
||||||
is often a key, check for overlap to keep the length of the sort record
|
is often a key, check for overlap to keep the length of the sort record
|
||||||
down. */
|
down. */
|
||||||
|
|
||||||
/* Along with the record number, the transaction id of the
|
/* Along with the record number, the transaction id of the
|
||||||
* record will also be stored in the sort file. This will
|
* record will also be stored in the sort file. This will
|
||||||
* be used to detect update conflict in read committed
|
* be used to detect update conflict in read committed
|
||||||
@ -5472,6 +5474,7 @@ static RecordSource* gen_sort(thread_db* tdbb,
|
|||||||
jrd_nod* node = *node_ptr;
|
jrd_nod* node = *node_ptr;
|
||||||
dsc* desc = &descriptor;
|
dsc* desc = &descriptor;
|
||||||
CMP_get_desc(tdbb, csb, node, desc);
|
CMP_get_desc(tdbb, csb, node, desc);
|
||||||
|
|
||||||
// Allow for "key" forms of International text to grow
|
// Allow for "key" forms of International text to grow
|
||||||
if (IS_INTL_DATA(desc))
|
if (IS_INTL_DATA(desc))
|
||||||
{
|
{
|
||||||
@ -5664,7 +5667,9 @@ static RecordSource* gen_sort(thread_db* tdbb,
|
|||||||
ERR_post(Arg::Gds(isc_sort_rec_size_err) << Arg::Num(map_length));
|
ERR_post(Arg::Gds(isc_sort_rec_size_err) << Arg::Num(map_length));
|
||||||
// Msg438: sort record size of %ld bytes is too big
|
// Msg438: sort record size of %ld bytes is too big
|
||||||
}
|
}
|
||||||
|
|
||||||
map->smb_length = (USHORT) map_length;
|
map->smb_length = (USHORT) map_length;
|
||||||
|
|
||||||
// That was most unpleasant. Never the less, it's done (except for the debugging).
|
// That was most unpleasant. Never the less, it's done (except for the debugging).
|
||||||
// All that remains is to build the record source block for the sort.
|
// All that remains is to build the record source block for the sort.
|
||||||
RecordSource* rsb = FB_NEW_RPT(*tdbb->getDefaultPool(), 1) RecordSource();
|
RecordSource* rsb = FB_NEW_RPT(*tdbb->getDefaultPool(), 1) RecordSource();
|
||||||
@ -6496,6 +6501,7 @@ static jrd_nod* make_inference_node(CompilerScratch* csb, jrd_nod* boolean,
|
|||||||
DEV_BLKCHK(arg1, type_nod);
|
DEV_BLKCHK(arg1, type_nod);
|
||||||
DEV_BLKCHK(arg2, type_nod);
|
DEV_BLKCHK(arg2, type_nod);
|
||||||
fb_assert(boolean->nod_count >= 2); // must be a conjunction boolean
|
fb_assert(boolean->nod_count >= 2); // must be a conjunction boolean
|
||||||
|
|
||||||
// Clone the input predicate
|
// Clone the input predicate
|
||||||
jrd_nod* node = PAR_make_node(tdbb, boolean->nod_count);
|
jrd_nod* node = PAR_make_node(tdbb, boolean->nod_count);
|
||||||
node->nod_type = boolean->nod_type;
|
node->nod_type = boolean->nod_type;
|
||||||
@ -6506,12 +6512,15 @@ static jrd_nod* make_inference_node(CompilerScratch* csb, jrd_nod* boolean,
|
|||||||
// determined by its dependency on any of the fields
|
// determined by its dependency on any of the fields
|
||||||
// If provisions above change the line below will have to be modified
|
// If provisions above change the line below will have to be modified
|
||||||
node->nod_flags = boolean->nod_flags;
|
node->nod_flags = boolean->nod_flags;
|
||||||
|
|
||||||
// But substitute new values for some of the predicate arguments
|
// But substitute new values for some of the predicate arguments
|
||||||
node->nod_arg[0] = CMP_clone_node_opt(tdbb, csb, arg1);
|
node->nod_arg[0] = CMP_clone_node_opt(tdbb, csb, arg1);
|
||||||
node->nod_arg[1] = CMP_clone_node_opt(tdbb, csb, arg2);
|
node->nod_arg[1] = CMP_clone_node_opt(tdbb, csb, arg2);
|
||||||
|
|
||||||
// Arguments after the first two are just cloned (eg: LIKE ESCAPE clause)
|
// Arguments after the first two are just cloned (eg: LIKE ESCAPE clause)
|
||||||
for (USHORT n = 2; n < boolean->nod_count; n++)
|
for (USHORT n = 2; n < boolean->nod_count; n++)
|
||||||
node->nod_arg[n] = CMP_clone_node_opt(tdbb, csb, boolean->nod_arg[n]);
|
node->nod_arg[n] = CMP_clone_node_opt(tdbb, csb, boolean->nod_arg[n]);
|
||||||
|
|
||||||
// Share impure area for cached invariant value used to hold pre-compiled
|
// Share impure area for cached invariant value used to hold pre-compiled
|
||||||
// pattern for new LIKE and CONTAINING algorithms.
|
// pattern for new LIKE and CONTAINING algorithms.
|
||||||
// Proper cloning of impure area for this node would require careful accounting
|
// Proper cloning of impure area for this node would require careful accounting
|
||||||
@ -6519,6 +6528,7 @@ static jrd_nod* make_inference_node(CompilerScratch* csb, jrd_nod* boolean,
|
|||||||
// cached pattern value for all node clones. This is faster too.
|
// cached pattern value for all node clones. This is faster too.
|
||||||
if (node->nod_flags & nod_invariant)
|
if (node->nod_flags & nod_invariant)
|
||||||
node->nod_impure = boolean->nod_impure;
|
node->nod_impure = boolean->nod_impure;
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -609,6 +609,7 @@ jrd_file* PIO_open(Database* dbb,
|
|||||||
ERR_post(Arg::Gds(isc_io_error) << Arg::Str("open") << Arg::Str(file_name) <<
|
ERR_post(Arg::Gds(isc_io_error) << Arg::Str("open") << Arg::Str(file_name) <<
|
||||||
Arg::Gds(isc_io_open_err) << Arg::Unix(errno));
|
Arg::Gds(isc_io_open_err) << Arg::Unix(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
// If this is the primary file, set Database flag to indicate that it is
|
// If this is the primary file, set Database flag to indicate that it is
|
||||||
// being opened ReadOnly. This flag will be used later to compare with
|
// being opened ReadOnly. This flag will be used later to compare with
|
||||||
// the Header Page flag setting to make sure that the database is set ReadOnly.
|
// the Header Page flag setting to make sure that the database is set ReadOnly.
|
||||||
|
@ -1565,7 +1565,7 @@ void PAG_init2(thread_db* tdbb, USHORT shadow_number)
|
|||||||
// which must be done with an exclusive lock on the database --
|
// which must be done with an exclusive lock on the database --
|
||||||
// if this changes, this policy will have to be reevaluated;
|
// if this changes, this policy will have to be reevaluated;
|
||||||
// at any rate there is a problem with getting a read lock
|
// at any rate there is a problem with getting a read lock
|
||||||
//because the corresponding page in the main database file may not exist
|
// because the corresponding page in the main database file may not exist
|
||||||
|
|
||||||
if (!file->fil_min_page)
|
if (!file->fil_min_page)
|
||||||
CCH_FETCH(tdbb, &window, LCK_read, pag_header);
|
CCH_FETCH(tdbb, &window, LCK_read, pag_header);
|
||||||
|
@ -217,7 +217,7 @@ int SDW_add_file(thread_db* tdbb, const TEXT* file_name, SLONG start, USHORT sha
|
|||||||
// we can use the same header page, suitably modified,
|
// we can use the same header page, suitably modified,
|
||||||
// because they all look pretty much the same at this point
|
// because they all look pretty much the same at this point
|
||||||
|
|
||||||
/*******************
|
/*******************
|
||||||
Fix for bug 7925. drop_gdb wan not dropping secondary file in
|
Fix for bug 7925. drop_gdb wan not dropping secondary file in
|
||||||
multi-shadow files. The structure was not being filled with the
|
multi-shadow files. The structure was not being filled with the
|
||||||
info. Commented some code so that the structure will always be filled.
|
info. Commented some code so that the structure will always be filled.
|
||||||
@ -225,12 +225,13 @@ int SDW_add_file(thread_db* tdbb, const TEXT* file_name, SLONG start, USHORT sha
|
|||||||
-Sudesh 07/06/95
|
-Sudesh 07/06/95
|
||||||
|
|
||||||
The original code :
|
The original code :
|
||||||
===
|
===
|
||||||
if (shadow_file == file)
|
if (shadow_file == file)
|
||||||
copy_header(tdbb);
|
copy_header(tdbb);
|
||||||
else
|
else
|
||||||
===
|
===
|
||||||
************************/
|
************************/
|
||||||
|
|
||||||
// Temporarly reverting the change ------- Sudesh 07/07/95 *******
|
// Temporarly reverting the change ------- Sudesh 07/07/95 *******
|
||||||
|
|
||||||
if (shadow_file == file)
|
if (shadow_file == file)
|
||||||
@ -1328,5 +1329,3 @@ static void update_dbb_to_sdw(Database* dbb)
|
|||||||
pageSpace->file = shadow->sdw_file;
|
pageSpace->file = shadow->sdw_file;
|
||||||
shadow->sdw_flags |= SDW_rollover;
|
shadow->sdw_flags |= SDW_rollover;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1677,17 +1677,18 @@ static sort_record* get_merge(merge_control* merge, sort_context* scb
|
|||||||
if (record)
|
if (record)
|
||||||
{
|
{
|
||||||
if (merge->mrg_stream_a && !merge->mrg_record_a)
|
if (merge->mrg_stream_a && !merge->mrg_record_a)
|
||||||
|
{
|
||||||
if (eof)
|
if (eof)
|
||||||
merge->mrg_stream_a = NULL;
|
merge->mrg_stream_a = NULL;
|
||||||
else
|
else
|
||||||
merge->mrg_record_a = record;
|
merge->mrg_record_a = record;
|
||||||
|
}
|
||||||
else if (eof)
|
else if (eof)
|
||||||
merge->mrg_stream_b = NULL;
|
merge->mrg_stream_b = NULL;
|
||||||
else
|
else
|
||||||
merge->mrg_record_b = record;
|
merge->mrg_record_b = record;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// If either streams need a record and is still active, loop back to pick
|
// If either streams need a record and is still active, loop back to pick
|
||||||
// up the record. If either stream is dry, return the record of the other.
|
// up the record. If either stream is dry, return the record of the other.
|
||||||
// If both are dry, indicate eof for this stream.
|
// If both are dry, indicate eof for this stream.
|
||||||
|
@ -278,4 +278,3 @@ const int scb_sorted = 2; /* stream has been sorted */
|
|||||||
} //namespace Jrd
|
} //namespace Jrd
|
||||||
|
|
||||||
#endif // JRD_SORT_H
|
#endif // JRD_SORT_H
|
||||||
|
|
||||||
|
@ -32,20 +32,20 @@ namespace Jrd {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SCROLLABLE_CURSORS
|
#ifdef SCROLLABLE_CURSORS
|
||||||
void SORT_diddle_key(UCHAR *, Jrd::sort_context*, bool);
|
void SORT_diddle_key(UCHAR*, Jrd::sort_context*, bool);
|
||||||
void SORT_get(Jrd::thread_db*, Jrd::sort_context*, ULONG **, Jrd::rse_get_mode);
|
void SORT_get(Jrd::thread_db*, Jrd::sort_context*, ULONG**, Jrd::rse_get_mode);
|
||||||
void SORT_read_block(TempSpace*, FB_UINT64, BLOB_PTR *, ULONG);
|
void SORT_read_block(TempSpace*, FB_UINT64, BLOB_PTR*, ULONG);
|
||||||
#else
|
#else
|
||||||
void SORT_get(Jrd::thread_db*, Jrd::sort_context*, ULONG **);
|
void SORT_get(Jrd::thread_db*, Jrd::sort_context*, ULONG**);
|
||||||
FB_UINT64 SORT_read_block(TempSpace*, FB_UINT64, BLOB_PTR *, ULONG);
|
FB_UINT64 SORT_read_block(TempSpace*, FB_UINT64, BLOB_PTR*, ULONG);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void SORT_fini(Jrd::sort_context*, Jrd::Attachment*);
|
void SORT_fini(Jrd::sort_context*, Jrd::Attachment*);
|
||||||
Jrd::sort_context* SORT_init(Jrd::thread_db*, USHORT, USHORT, USHORT, const Jrd::sort_key_def*,
|
Jrd::sort_context* SORT_init(Jrd::thread_db*, USHORT, USHORT, USHORT, const Jrd::sort_key_def*,
|
||||||
Jrd::FPTR_REJECT_DUP_CALLBACK, void*); //, FB_UINT64);
|
Jrd::FPTR_REJECT_DUP_CALLBACK, void*); //, FB_UINT64);
|
||||||
void SORT_put(Jrd::thread_db*, Jrd::sort_context*, ULONG **);
|
void SORT_put(Jrd::thread_db*, Jrd::sort_context*, ULONG**);
|
||||||
void SORT_shutdown(Jrd::Attachment*);
|
void SORT_shutdown(Jrd::Attachment*);
|
||||||
void SORT_sort(Jrd::thread_db*, Jrd::sort_context*);
|
void SORT_sort(Jrd::thread_db*, Jrd::sort_context*);
|
||||||
FB_UINT64 SORT_write_block(TempSpace*, FB_UINT64, BLOB_PTR *, ULONG);
|
FB_UINT64 SORT_write_block(TempSpace*, FB_UINT64, BLOB_PTR*, ULONG);
|
||||||
|
|
||||||
#endif // JRD_SORT_PROTO_H
|
#endif // JRD_SORT_PROTO_H
|
||||||
|
@ -387,7 +387,9 @@ namespace
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
CAttachment(StoredAtt*, FB_API_HANDLE*, USHORT);
|
CAttachment(StoredAtt*, FB_API_HANDLE*, USHORT);
|
||||||
|
|
||||||
static void destroy(CAttachment*);
|
static void destroy(CAttachment*);
|
||||||
|
|
||||||
bool destroying()
|
bool destroying()
|
||||||
{
|
{
|
||||||
return flagDestroying;
|
return flagDestroying;
|
||||||
@ -419,7 +421,7 @@ namespace
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
CTransaction(StoredTra* h, FB_API_HANDLE* pub, Attachment par)
|
CTransaction(StoredTra* h, FB_API_HANDLE* pub, Attachment par)
|
||||||
: BaseHandle(hType(), pub, par), next(0), handle(h),
|
: BaseHandle(hType(), pub, par), next(0), handle(h),
|
||||||
blobs(getPool())
|
blobs(getPool())
|
||||||
{
|
{
|
||||||
parent->transactions.toParent(this);
|
parent->transactions.toParent(this);
|
||||||
@ -546,7 +548,7 @@ namespace
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
~CStatement()
|
~CStatement()
|
||||||
{
|
{
|
||||||
if (parent->destroying())
|
if (parent->destroying())
|
||||||
{
|
{
|
||||||
release_dsql_support(das);
|
release_dsql_support(das);
|
||||||
@ -689,8 +691,7 @@ namespace
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ToHandle>
|
template <typename ToHandle> RefPtr<ToHandle> translate(FB_API_HANDLE* handle)
|
||||||
RefPtr<ToHandle> translate(FB_API_HANDLE* handle)
|
|
||||||
{
|
{
|
||||||
if (shutdownStarted)
|
if (shutdownStarted)
|
||||||
{
|
{
|
||||||
@ -2051,6 +2052,7 @@ ISC_STATUS API_ROUTINE GDS_CREATE_DATABASE(ISC_STATUS* user_status,
|
|||||||
{
|
{
|
||||||
CALL(PROC_DROP_DATABASE, n) (temp, &handle);
|
CALL(PROC_DROP_DATABASE, n) (temp, &handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy(attachment);
|
destroy(attachment);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3802,12 +3804,9 @@ ISC_STATUS API_ROUTINE GDS_GET_SLICE(ISC_STATUS* user_status,
|
|||||||
status.setPrimaryHandle(attachment);
|
status.setPrimaryHandle(attachment);
|
||||||
Transaction transaction = findTransaction(tra_handle, attachment);
|
Transaction transaction = findTransaction(tra_handle, attachment);
|
||||||
|
|
||||||
CALL(PROC_GET_SLICE, attachment->implementation) (status, &attachment->handle, &transaction->handle,
|
CALL(PROC_GET_SLICE, attachment->implementation) (status, &attachment->handle,
|
||||||
array_id,
|
&transaction->handle, array_id, sdl_length, sdl, param_length, param,
|
||||||
sdl_length, sdl,
|
slice_length, slice, return_length);
|
||||||
param_length, param,
|
|
||||||
slice_length, slice,
|
|
||||||
return_length);
|
|
||||||
}
|
}
|
||||||
catch (const Exception& e)
|
catch (const Exception& e)
|
||||||
{
|
{
|
||||||
@ -4020,11 +4019,9 @@ ISC_STATUS API_ROUTINE GDS_PUT_SLICE(ISC_STATUS* user_status,
|
|||||||
status.setPrimaryHandle(attachment);
|
status.setPrimaryHandle(attachment);
|
||||||
Transaction transaction = findTransaction(tra_handle, attachment);
|
Transaction transaction = findTransaction(tra_handle, attachment);
|
||||||
|
|
||||||
CALL(PROC_PUT_SLICE, attachment->implementation) (status, &attachment->handle, &transaction->handle,
|
CALL(PROC_PUT_SLICE, attachment->implementation) (status, &attachment->handle,
|
||||||
array_id,
|
&transaction->handle, array_id, sdl_length, sdl, param_length, param,
|
||||||
sdl_length, sdl,
|
slice_length, slice);
|
||||||
param_length, param,
|
|
||||||
slice_length, slice);
|
|
||||||
}
|
}
|
||||||
catch (const Exception& e)
|
catch (const Exception& e)
|
||||||
{
|
{
|
||||||
@ -4061,7 +4058,7 @@ ISC_STATUS API_ROUTINE GDS_QUE_EVENTS(ISC_STATUS* user_status,
|
|||||||
status.setPrimaryHandle(attachment);
|
status.setPrimaryHandle(attachment);
|
||||||
|
|
||||||
CALL(PROC_QUE_EVENTS, attachment->implementation) (status, &attachment->handle,
|
CALL(PROC_QUE_EVENTS, attachment->implementation) (status, &attachment->handle,
|
||||||
id, length, events, ast, arg);
|
id, length, events, ast, arg);
|
||||||
}
|
}
|
||||||
catch (const Exception& e)
|
catch (const Exception& e)
|
||||||
{
|
{
|
||||||
@ -4184,8 +4181,7 @@ ISC_STATUS API_ROUTINE GDS_RECONNECT(ISC_STATUS* user_status,
|
|||||||
status.setPrimaryHandle(attachment);
|
status.setPrimaryHandle(attachment);
|
||||||
|
|
||||||
if (CALL(PROC_RECONNECT, attachment->implementation) (status, &attachment->handle,
|
if (CALL(PROC_RECONNECT, attachment->implementation) (status, &attachment->handle,
|
||||||
&handle,
|
&handle, length, id))
|
||||||
length, id))
|
|
||||||
{
|
{
|
||||||
return status[1];
|
return status[1];
|
||||||
}
|
}
|
||||||
@ -4794,9 +4790,8 @@ ISC_STATUS API_ROUTINE GDS_START_MULTIPLE(ISC_STATUS* user_status,
|
|||||||
|
|
||||||
attachment = translate<CAttachment>(vector->teb_database);
|
attachment = translate<CAttachment>(vector->teb_database);
|
||||||
|
|
||||||
if (CALL(PROC_START_TRANSACTION, attachment->implementation) (status, &handle, 1, &attachment->handle,
|
if (CALL(PROC_START_TRANSACTION, attachment->implementation) (status, &handle, 1,
|
||||||
vector->teb_tpb_length,
|
&attachment->handle, vector->teb_tpb_length, vector->teb_tpb))
|
||||||
vector->teb_tpb))
|
|
||||||
{
|
{
|
||||||
status_exception::raise(status);
|
status_exception::raise(status);
|
||||||
}
|
}
|
||||||
@ -4832,6 +4827,7 @@ ISC_STATUS API_ROUTINE GDS_START_MULTIPLE(ISC_STATUS* user_status,
|
|||||||
CALL(PROC_ROLLBACK, sub->implementation) (temp, &sub->handle);
|
CALL(PROC_ROLLBACK, sub->implementation) (temp, &sub->handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (transaction)
|
if (transaction)
|
||||||
{
|
{
|
||||||
destroy(transaction);
|
destroy(transaction);
|
||||||
@ -4917,10 +4913,9 @@ ISC_STATUS API_ROUTINE GDS_TRANSACT_REQUEST(ISC_STATUS* user_status,
|
|||||||
status.setPrimaryHandle(attachment);
|
status.setPrimaryHandle(attachment);
|
||||||
Transaction transaction = findTransaction(tra_handle, attachment);
|
Transaction transaction = findTransaction(tra_handle, attachment);
|
||||||
|
|
||||||
CALL(PROC_TRANSACT_REQUEST, attachment->implementation) (status, &attachment->handle, &transaction->handle,
|
CALL(PROC_TRANSACT_REQUEST, attachment->implementation) (status, &attachment->handle,
|
||||||
blr_length, blr,
|
&transaction->handle, blr_length, blr, in_msg_length, in_msg, out_msg_length,
|
||||||
in_msg_length, in_msg,
|
out_msg);
|
||||||
out_msg_length, out_msg);
|
|
||||||
}
|
}
|
||||||
catch (const Exception& e)
|
catch (const Exception& e)
|
||||||
{
|
{
|
||||||
@ -4994,7 +4989,8 @@ ISC_STATUS API_ROUTINE GDS_TRANSACTION_INFO(ISC_STATUS* user_status,
|
|||||||
{
|
{
|
||||||
SSHORT item_len = item_length;
|
SSHORT item_len = item_length;
|
||||||
SSHORT buffer_len = buffer_length;
|
SSHORT buffer_len = buffer_length;
|
||||||
for (Transaction sub = transaction->next; sub; sub = sub->next) {
|
for (Transaction sub = transaction->next; sub; sub = sub->next)
|
||||||
|
{
|
||||||
if (CALL(PROC_TRANSACTION_INFO, sub->implementation) (status, &sub->handle,
|
if (CALL(PROC_TRANSACTION_INFO, sub->implementation) (status, &sub->handle,
|
||||||
item_len, items,
|
item_len, items,
|
||||||
buffer_len, buffer))
|
buffer_len, buffer))
|
||||||
@ -5523,13 +5519,9 @@ static ISC_STATUS open_blob(ISC_STATUS* user_status,
|
|||||||
gds__parse_bpb(bpb_length, bpb, &from, &to);
|
gds__parse_bpb(bpb_length, bpb, &from, &to);
|
||||||
|
|
||||||
if (get_entrypoint(proc2, attachment->implementation) != no_entrypoint &&
|
if (get_entrypoint(proc2, attachment->implementation) != no_entrypoint &&
|
||||||
CALL(proc2, attachment->implementation) (status,
|
CALL(proc2, attachment->implementation) (status, &attachment->handle,
|
||||||
&attachment->handle,
|
&transaction->handle, &blob_handle, blob_id, bpb_length,
|
||||||
&transaction->handle,
|
bpb) != isc_unavailable)
|
||||||
&blob_handle,
|
|
||||||
blob_id,
|
|
||||||
bpb_length,
|
|
||||||
bpb) != isc_unavailable)
|
|
||||||
{
|
{
|
||||||
flags = 0;
|
flags = 0;
|
||||||
}
|
}
|
||||||
@ -5537,10 +5529,8 @@ static ISC_STATUS open_blob(ISC_STATUS* user_status,
|
|||||||
{
|
{
|
||||||
// This code has no effect because jrd8_create_blob, jrd8_open_blob,
|
// This code has no effect because jrd8_create_blob, jrd8_open_blob,
|
||||||
// REM_create_blob and REM_open_blob are defined as no_entrypoint in entry.h
|
// REM_create_blob and REM_open_blob are defined as no_entrypoint in entry.h
|
||||||
CALL(proc, attachment->implementation) (status,
|
CALL(proc, attachment->implementation) (status, &attachment->handle,
|
||||||
&attachment->handle,
|
&transaction->handle, &blob_handle, blob_id);
|
||||||
&transaction->handle,
|
|
||||||
&blob_handle, blob_id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status[1]) {
|
if (status[1]) {
|
||||||
|
Loading…
Reference in New Issue
Block a user