Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 52 additions & 50 deletions src/burp/restore.epp
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,48 @@ static inline void collect_missing_privs(BurpGlobals* tdgbl, USHORT type, const

} // namespace

bool activateIndex(BurpGlobals* tdgbl, const char* index_name, FbLocalStatus& local_status_vector)
{
bool fError = false;

Firebird::IRequest* req_handle = nullptr;
Firebird::ITransaction* activateIndexTran = nullptr;
START_TRANSACTION activateIndexTran;

FOR (TRANSACTION_HANDLE activateIndexTran REQUEST_HANDLE req_handle)
IND1 IN RDB$INDICES WITH IND1.RDB$INDEX_NAME EQ index_name
MODIFY IND1 USING
IND1.RDB$INDEX_INACTIVE = FALSE;
END_MODIFY;
END_FOR;

ON_ERROR
fError = true;
fb_utils::copyStatus(&local_status_vector, isc_status);
END_ERROR;

MISC_release_request_silent(req_handle);

if (!fError)
{
COMMIT activateIndexTran;
ON_ERROR
fError = true;
fb_utils::copyStatus(&local_status_vector, isc_status);
END_ERROR;
}

if (fError)
{
ROLLBACK activateIndexTran;
ON_ERROR
general_on_error();
END_ERROR;
return false;
}

return true;
}

int RESTORE_restore (const TEXT* file_name, const TEXT* database_name)
{
Expand All @@ -290,7 +332,6 @@ int RESTORE_restore (const TEXT* file_name, const TEXT* database_name)
**************************************/
Firebird::IRequest* req_handle1 = nullptr;
Firebird::IRequest* req_handle3 = nullptr;
Firebird::IRequest* req_handle5 = nullptr;
BASED_ON RDB$INDICES.RDB$INDEX_NAME index_name;

Firebird::DispatcherPtr provider;
Expand Down Expand Up @@ -388,30 +429,19 @@ int RESTORE_restore (const TEXT* file_name, const TEXT* database_name)
IDS.RDB$FOREIGN_KEY MISSING

MISC_terminate(IDS.RDB$INDEX_NAME, index_name,
(ULONG) MISC_symbol_length(IDS.RDB$INDEX_NAME, sizeof(IDS.RDB$INDEX_NAME)),
(ULONG)MISC_symbol_length(IDS.RDB$INDEX_NAME, sizeof(IDS.RDB$INDEX_NAME)),
sizeof(index_name));
BURP_verbose(285, index_name);
// activating and creating deferred index %s
MODIFY IDS USING
IDS.RDB$INDEX_INACTIVE = FALSE;
END_MODIFY;
ON_ERROR
general_on_error();
END_ERROR;

SAVE
// existing ON_ERROR continues past error, beck
ON_ERROR
BURP_print (false, 173, index_name);
BURP_print_status(false, isc_status);
MODIFY IDS USING
IDS.RDB$INDEX_INACTIVE = TRUE;
END_MODIFY;
ON_ERROR
general_on_error ();
END_ERROR;
FbLocalStatus local_status_vector;

if (!activateIndex(tdgbl, index_name, local_status_vector))
{
BURP_print(false, 173, index_name);
BURP_print_status(false, &local_status_vector);
tdgbl->flag_on_line = false;
END_ERROR;
}
END_FOR;
ON_ERROR
general_on_error ();
Expand Down Expand Up @@ -447,39 +477,11 @@ int RESTORE_restore (const TEXT* file_name, const TEXT* database_name)
sizeof(index_name));
BURP_verbose(285, index_name);
// activating and creating deferred index %s

bool fError = false;
Firebird::ITransaction* activateIndexTran = nullptr;
FbLocalStatus local_status_vector;

START_TRANSACTION activateIndexTran;
FOR (TRANSACTION_HANDLE activateIndexTran REQUEST_HANDLE req_handle5)
IND1 IN RDB$INDICES WITH IND1.RDB$INDEX_NAME EQ IDS.RDB$INDEX_NAME
MODIFY IND1 USING
IND1.RDB$INDEX_INACTIVE = FALSE;
END_MODIFY;
END_FOR;
ON_ERROR
fError = true;
fb_utils::copyStatus(&local_status_vector, isc_status);
END_ERROR;
MISC_release_request_silent(req_handle5);

if (!fError)
if (!activateIndex(tdgbl, index_name, local_status_vector))
{
COMMIT activateIndexTran;
ON_ERROR
fError = true;
fb_utils::copyStatus(&local_status_vector, isc_status);
END_ERROR;
}
if (fError)
{
ROLLBACK activateIndexTran;
ON_ERROR
general_on_error ();
END_ERROR;
BURP_print (false, 173, index_name);
BURP_print(false, 173, index_name);
BURP_print_status(false, &local_status_vector);
tdgbl->flag_on_line = false;
}
Expand Down
Loading