mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-24 18:43:02 +01:00
Misc.
This commit is contained in:
parent
c66c73a0cc
commit
136cab1caf
@ -4597,11 +4597,10 @@ static dsql_req* prepare(
|
|||||||
const TEXT* string,
|
const TEXT* string,
|
||||||
USHORT client_dialect, USHORT parser_version)
|
USHORT client_dialect, USHORT parser_version)
|
||||||
{
|
{
|
||||||
ISC_STATUS_ARRAY local_status;
|
|
||||||
|
|
||||||
tsql* tdsql = DSQL_get_thread_data();
|
tsql* tdsql = DSQL_get_thread_data();
|
||||||
|
|
||||||
MOVE_CLEAR(local_status, sizeof(ISC_STATUS) * ISC_STATUS_LENGTH);
|
ISC_STATUS_ARRAY local_status;
|
||||||
|
MOVE_CLEAR(local_status, sizeof(local_status));
|
||||||
|
|
||||||
if (client_dialect > SQL_DIALECT_CURRENT)
|
if (client_dialect > SQL_DIALECT_CURRENT)
|
||||||
ERRD_post(isc_sqlerr, isc_arg_number, (SLONG) - 901,
|
ERRD_post(isc_sqlerr, isc_arg_number, (SLONG) - 901,
|
||||||
|
@ -267,8 +267,6 @@ bool ERRD_post_warning(ISC_STATUS status, ...)
|
|||||||
**/
|
**/
|
||||||
void ERRD_post(ISC_STATUS status, ...)
|
void ERRD_post(ISC_STATUS status, ...)
|
||||||
{
|
{
|
||||||
int warning_indx = 0;
|
|
||||||
|
|
||||||
ISC_STATUS* status_vector = ((tsql*) DSQL_get_thread_data())->tsql_status;
|
ISC_STATUS* status_vector = ((tsql*) DSQL_get_thread_data())->tsql_status;
|
||||||
|
|
||||||
// stuff the status into temp buffer
|
// stuff the status into temp buffer
|
||||||
@ -277,7 +275,7 @@ void ERRD_post(ISC_STATUS status, ...)
|
|||||||
STUFF_STATUS(tmp_status, status);
|
STUFF_STATUS(tmp_status, status);
|
||||||
|
|
||||||
// calculate length of the status
|
// calculate length of the status
|
||||||
int tmp_status_len = 0;
|
int tmp_status_len = 0, warning_indx = 0;
|
||||||
PARSE_STATUS(tmp_status, tmp_status_len, warning_indx);
|
PARSE_STATUS(tmp_status, tmp_status_len, warning_indx);
|
||||||
fb_assert(warning_indx == 0);
|
fb_assert(warning_indx == 0);
|
||||||
|
|
||||||
|
@ -454,17 +454,16 @@ static void internal_post(ISC_STATUS status, va_list args)
|
|||||||
* Used in ERR_post and ERR_post_nothrow
|
* Used in ERR_post and ERR_post_nothrow
|
||||||
*
|
*
|
||||||
**************************************/
|
**************************************/
|
||||||
ISC_STATUS_ARRAY tmp_status, warning_status;
|
|
||||||
int i, tmp_status_len = 0, status_len = 0, err_status_len = 0;
|
|
||||||
int warning_count = 0, warning_indx = 0;
|
|
||||||
|
|
||||||
ISC_STATUS* status_vector = ((thread_db*) JRD_get_thread_data())->tdbb_status_vector;
|
ISC_STATUS* status_vector = ((thread_db*) JRD_get_thread_data())->tdbb_status_vector;
|
||||||
|
|
||||||
/* stuff the status into temp buffer */
|
/* stuff the status into temp buffer */
|
||||||
|
ISC_STATUS_ARRAY tmp_status;
|
||||||
MOVE_CLEAR(tmp_status, sizeof(tmp_status));
|
MOVE_CLEAR(tmp_status, sizeof(tmp_status));
|
||||||
STUFF_STATUS_function(tmp_status, status, args);
|
STUFF_STATUS_function(tmp_status, status, args);
|
||||||
|
|
||||||
/* calculate length of the status */
|
/* calculate length of the status */
|
||||||
|
int tmp_status_len = 0, warning_indx = 0;
|
||||||
PARSE_STATUS(tmp_status, tmp_status_len, warning_indx);
|
PARSE_STATUS(tmp_status, tmp_status_len, warning_indx);
|
||||||
fb_assert(warning_indx == 0);
|
fb_assert(warning_indx == 0);
|
||||||
|
|
||||||
@ -478,11 +477,13 @@ static void internal_post(ISC_STATUS status, va_list args)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int status_len = 0;
|
||||||
PARSE_STATUS(status_vector, status_len, warning_indx);
|
PARSE_STATUS(status_vector, status_len, warning_indx);
|
||||||
if (status_len)
|
if (status_len)
|
||||||
--status_len;
|
--status_len;
|
||||||
|
|
||||||
/* check for duplicated error code */
|
/* check for duplicated error code */
|
||||||
|
int i;
|
||||||
for (i = 0; i < ISC_STATUS_LENGTH; i++) {
|
for (i = 0; i < ISC_STATUS_LENGTH; i++) {
|
||||||
if (status_vector[i] == isc_arg_end && i == status_len)
|
if (status_vector[i] == isc_arg_end && i == status_len)
|
||||||
break; /* end of argument list */
|
break; /* end of argument list */
|
||||||
@ -502,9 +503,12 @@ static void internal_post(ISC_STATUS status, va_list args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* if the status_vector has only warnings then adjust err_status_len */
|
/* if the status_vector has only warnings then adjust err_status_len */
|
||||||
if ((err_status_len = i) == 2 && warning_indx)
|
int err_status_len = i;
|
||||||
|
if (err_status_len == 2 && warning_indx)
|
||||||
err_status_len = 0;
|
err_status_len = 0;
|
||||||
|
|
||||||
|
ISC_STATUS_ARRAY warning_status;
|
||||||
|
int warning_count = 0;
|
||||||
if (warning_indx) {
|
if (warning_indx) {
|
||||||
/* copy current warning(s) to a temp buffer */
|
/* copy current warning(s) to a temp buffer */
|
||||||
MOVE_CLEAR(warning_status, sizeof(warning_status));
|
MOVE_CLEAR(warning_status, sizeof(warning_status));
|
||||||
|
@ -1241,11 +1241,6 @@ static IDX_E check_partner_index(
|
|||||||
* record appears in the partner index.
|
* record appears in the partner index.
|
||||||
*
|
*
|
||||||
**************************************/
|
**************************************/
|
||||||
index_desc partner_idx;
|
|
||||||
index_insertion insertion;
|
|
||||||
temporary_key key;
|
|
||||||
IndexRetrieval retrieval;
|
|
||||||
|
|
||||||
SET_TDBB(tdbb);
|
SET_TDBB(tdbb);
|
||||||
|
|
||||||
IDX_E result = idx_e_ok;
|
IDX_E result = idx_e_ok;
|
||||||
@ -1257,6 +1252,7 @@ static IDX_E check_partner_index(
|
|||||||
|
|
||||||
/* get the description of the partner index */
|
/* get the description of the partner index */
|
||||||
|
|
||||||
|
index_desc partner_idx;
|
||||||
if (!BTR_description(tdbb, partner_relation, root, &partner_idx, index_id))
|
if (!BTR_description(tdbb, partner_relation, root, &partner_idx, index_id))
|
||||||
BUGCHECK(175); /* msg 175 partner index description not found */
|
BUGCHECK(175); /* msg 175 partner index description not found */
|
||||||
|
|
||||||
@ -1284,6 +1280,7 @@ static IDX_E check_partner_index(
|
|||||||
// unique index, because a comparison is done on both keys.
|
// unique index, because a comparison is done on both keys.
|
||||||
index_desc tmpIndex = *idx;
|
index_desc tmpIndex = *idx;
|
||||||
tmpIndex.idx_flags |= idx_unique;
|
tmpIndex.idx_flags |= idx_unique;
|
||||||
|
temporary_key key;
|
||||||
result = BTR_key(tdbb, relation, record, &tmpIndex, &key, 0, fuzzy);
|
result = BTR_key(tdbb, relation, record, &tmpIndex, &key, 0, fuzzy);
|
||||||
CCH_RELEASE(tdbb, &window);
|
CCH_RELEASE(tdbb, &window);
|
||||||
|
|
||||||
@ -1293,6 +1290,7 @@ static IDX_E check_partner_index(
|
|||||||
/* fill out a retrieval block for the purpose of
|
/* fill out a retrieval block for the purpose of
|
||||||
generating a bitmap of duplicate records */
|
generating a bitmap of duplicate records */
|
||||||
|
|
||||||
|
IndexRetrieval retrieval;
|
||||||
MOVE_CLEAR(&retrieval, sizeof(IndexRetrieval));
|
MOVE_CLEAR(&retrieval, sizeof(IndexRetrieval));
|
||||||
//retrieval.blk_type = type_irb;
|
//retrieval.blk_type = type_irb;
|
||||||
retrieval.irb_index = partner_idx.idx_id;
|
retrieval.irb_index = partner_idx.idx_id;
|
||||||
@ -1317,6 +1315,7 @@ static IDX_E check_partner_index(
|
|||||||
/* if there is a bitmap, it means duplicates were found */
|
/* if there is a bitmap, it means duplicates were found */
|
||||||
|
|
||||||
if (bitmap) {
|
if (bitmap) {
|
||||||
|
index_insertion insertion;
|
||||||
insertion.iib_descriptor = &partner_idx;
|
insertion.iib_descriptor = &partner_idx;
|
||||||
insertion.iib_relation = partner_relation;
|
insertion.iib_relation = partner_relation;
|
||||||
insertion.iib_number.setValue(BOF_NUMBER);
|
insertion.iib_number.setValue(BOF_NUMBER);
|
||||||
|
@ -65,9 +65,7 @@ void CMD_UTIL_put_svc_status(ISC_STATUS* svc_status,
|
|||||||
*
|
*
|
||||||
**************************************/
|
**************************************/
|
||||||
|
|
||||||
ISC_STATUS_ARRAY tmp_status, warning_status;
|
ISC_STATUS_ARRAY tmp_status;
|
||||||
int i, tmp_status_len = 0, status_len = 0, err_status_len = 0;
|
|
||||||
int warning_count = 0, warning_indx = 0;
|
|
||||||
bool duplicate = false;
|
bool duplicate = false;
|
||||||
|
|
||||||
/* stuff the status into temp buffer */
|
/* stuff the status into temp buffer */
|
||||||
@ -76,7 +74,7 @@ void CMD_UTIL_put_svc_status(ISC_STATUS* svc_status,
|
|||||||
ISC_STATUS *status = tmp_status;
|
ISC_STATUS *status = tmp_status;
|
||||||
*status++ = isc_arg_gds;
|
*status++ = isc_arg_gds;
|
||||||
*status++ = ENCODE_ISC_MSG(errcode, facility);
|
*status++ = ENCODE_ISC_MSG(errcode, facility);
|
||||||
tmp_status_len = 3;
|
int tmp_status_len = 3;
|
||||||
|
|
||||||
if (arg1) {
|
if (arg1) {
|
||||||
SVC_STATUS_ARG(status, arg1_t, arg1);
|
SVC_STATUS_ARG(status, arg1_t, arg1);
|
||||||
@ -108,11 +106,13 @@ void CMD_UTIL_put_svc_status(ISC_STATUS* svc_status,
|
|||||||
MOVE_FASTER(tmp_status, svc_status, sizeof(ISC_STATUS) * tmp_status_len);
|
MOVE_FASTER(tmp_status, svc_status, sizeof(ISC_STATUS) * tmp_status_len);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
int status_len = 0, warning_indx = 0;
|
||||||
PARSE_STATUS(svc_status, status_len, warning_indx);
|
PARSE_STATUS(svc_status, status_len, warning_indx);
|
||||||
if (status_len)
|
if (status_len)
|
||||||
--status_len;
|
--status_len;
|
||||||
|
|
||||||
/* check for duplicated error code */
|
/* check for duplicated error code */
|
||||||
|
int i;
|
||||||
for (i = 0; i < ISC_STATUS_LENGTH; i++) {
|
for (i = 0; i < ISC_STATUS_LENGTH; i++) {
|
||||||
if (svc_status[i] == isc_arg_end && i == status_len)
|
if (svc_status[i] == isc_arg_end && i == status_len)
|
||||||
break; /* end of argument list */
|
break; /* end of argument list */
|
||||||
@ -124,7 +124,8 @@ void CMD_UTIL_put_svc_status(ISC_STATUS* svc_status,
|
|||||||
svc_status[i - 1] != isc_arg_warning &&
|
svc_status[i - 1] != isc_arg_warning &&
|
||||||
i + tmp_status_len - 2 < ISC_STATUS_LENGTH &&
|
i + tmp_status_len - 2 < ISC_STATUS_LENGTH &&
|
||||||
(memcmp(&svc_status[i], &tmp_status[1],
|
(memcmp(&svc_status[i], &tmp_status[1],
|
||||||
sizeof(ISC_STATUS) * (tmp_status_len - 2)) == 0)) {
|
sizeof(ISC_STATUS) * (tmp_status_len - 2)) == 0))
|
||||||
|
{
|
||||||
/* duplicate found */
|
/* duplicate found */
|
||||||
duplicate = true;
|
duplicate = true;
|
||||||
break;
|
break;
|
||||||
@ -132,9 +133,12 @@ void CMD_UTIL_put_svc_status(ISC_STATUS* svc_status,
|
|||||||
}
|
}
|
||||||
if (!duplicate) {
|
if (!duplicate) {
|
||||||
/* if the status_vector has only warnings then adjust err_status_len */
|
/* if the status_vector has only warnings then adjust err_status_len */
|
||||||
if ((err_status_len = i) == 2 && warning_indx)
|
int err_status_len = i;
|
||||||
|
if (err_status_len == 2 && warning_indx)
|
||||||
err_status_len = 0;
|
err_status_len = 0;
|
||||||
|
|
||||||
|
ISC_STATUS_ARRAY warning_status;
|
||||||
|
int warning_count = 0;
|
||||||
if (warning_indx) {
|
if (warning_indx) {
|
||||||
/* copy current warning(s) to a temp buffer */
|
/* copy current warning(s) to a temp buffer */
|
||||||
MOVE_CLEAR(warning_status, sizeof(warning_status));
|
MOVE_CLEAR(warning_status, sizeof(warning_status));
|
||||||
|
Loading…
Reference in New Issue
Block a user