@@ -275,6 +275,48 @@ static inline void collect_missing_privs(BurpGlobals* tdgbl, USHORT type, const
275
275
276
276
} // namespace
277
277
278
+ bool activateIndex(BurpGlobals* tdgbl, const char* index_name, FbLocalStatus& local_status_vector)
279
+ {
280
+ bool fError = false;
281
+
282
+ Firebird::IRequest* req_handle = nullptr;
283
+ Firebird::ITransaction* activateIndexTran = nullptr;
284
+ START_TRANSACTION activateIndexTran;
285
+
286
+ FOR (TRANSACTION_HANDLE activateIndexTran REQUEST_HANDLE req_handle)
287
+ IND1 IN RDB$INDICES WITH IND1.RDB$INDEX_NAME EQ index_name
288
+ MODIFY IND1 USING
289
+ IND1.RDB$INDEX_INACTIVE = FALSE;
290
+ END_MODIFY;
291
+ END_FOR;
292
+
293
+ ON_ERROR
294
+ fError = true;
295
+ fb_utils::copyStatus(&local_status_vector, isc_status);
296
+ END_ERROR;
297
+
298
+ MISC_release_request_silent(req_handle);
299
+
300
+ if (!fError)
301
+ {
302
+ COMMIT activateIndexTran;
303
+ ON_ERROR
304
+ fError = true;
305
+ fb_utils::copyStatus(&local_status_vector, isc_status);
306
+ END_ERROR;
307
+ }
308
+
309
+ if (fError)
310
+ {
311
+ ROLLBACK activateIndexTran;
312
+ ON_ERROR
313
+ general_on_error();
314
+ END_ERROR;
315
+ return false;
316
+ }
317
+
318
+ return true;
319
+ }
278
320
279
321
int RESTORE_restore (const TEXT* file_name, const TEXT* database_name)
280
322
{
@@ -290,7 +332,6 @@ int RESTORE_restore (const TEXT* file_name, const TEXT* database_name)
290
332
**************************************/
291
333
Firebird::IRequest* req_handle1 = nullptr;
292
334
Firebird::IRequest* req_handle3 = nullptr;
293
- Firebird::IRequest* req_handle5 = nullptr;
294
335
BASED_ON RDB$INDICES.RDB$INDEX_NAME index_name;
295
336
296
337
Firebird::DispatcherPtr provider;
@@ -388,30 +429,19 @@ int RESTORE_restore (const TEXT* file_name, const TEXT* database_name)
388
429
IDS.RDB$FOREIGN_KEY MISSING
389
430
390
431
MISC_terminate(IDS.RDB$INDEX_NAME, index_name,
391
- (ULONG) MISC_symbol_length(IDS.RDB$INDEX_NAME, sizeof(IDS.RDB$INDEX_NAME)),
432
+ (ULONG)MISC_symbol_length(IDS.RDB$INDEX_NAME, sizeof(IDS.RDB$INDEX_NAME)),
392
433
sizeof(index_name));
393
434
BURP_verbose(285, index_name);
394
435
// activating and creating deferred index %s
395
- MODIFY IDS USING
396
- IDS.RDB$INDEX_INACTIVE = FALSE;
397
- END_MODIFY;
398
- ON_ERROR
399
- general_on_error();
400
- END_ERROR;
401
436
402
- SAVE
403
- // existing ON_ERROR continues past error, beck
404
- ON_ERROR
405
- BURP_print (false, 173, index_name);
406
- BURP_print_status(false, isc_status);
407
- MODIFY IDS USING
408
- IDS.RDB$INDEX_INACTIVE = TRUE;
409
- END_MODIFY;
410
- ON_ERROR
411
- general_on_error ();
412
- END_ERROR;
437
+ FbLocalStatus local_status_vector;
438
+
439
+ if (!activateIndex(tdgbl, index_name, local_status_vector))
440
+ {
441
+ BURP_print(false, 173, index_name);
442
+ BURP_print_status(false, &local_status_vector);
413
443
tdgbl->flag_on_line = false;
414
- END_ERROR;
444
+ }
415
445
END_FOR;
416
446
ON_ERROR
417
447
general_on_error ();
@@ -447,39 +477,11 @@ int RESTORE_restore (const TEXT* file_name, const TEXT* database_name)
447
477
sizeof(index_name));
448
478
BURP_verbose(285, index_name);
449
479
// activating and creating deferred index %s
450
-
451
- bool fError = false;
452
- Firebird::ITransaction* activateIndexTran = nullptr;
453
480
FbLocalStatus local_status_vector;
454
481
455
- START_TRANSACTION activateIndexTran;
456
- FOR (TRANSACTION_HANDLE activateIndexTran REQUEST_HANDLE req_handle5)
457
- IND1 IN RDB$INDICES WITH IND1.RDB$INDEX_NAME EQ IDS.RDB$INDEX_NAME
458
- MODIFY IND1 USING
459
- IND1.RDB$INDEX_INACTIVE = FALSE;
460
- END_MODIFY;
461
- END_FOR;
462
- ON_ERROR
463
- fError = true;
464
- fb_utils::copyStatus(&local_status_vector, isc_status);
465
- END_ERROR;
466
- MISC_release_request_silent(req_handle5);
467
-
468
- if (!fError)
482
+ if (!activateIndex(tdgbl, index_name, local_status_vector))
469
483
{
470
- COMMIT activateIndexTran;
471
- ON_ERROR
472
- fError = true;
473
- fb_utils::copyStatus(&local_status_vector, isc_status);
474
- END_ERROR;
475
- }
476
- if (fError)
477
- {
478
- ROLLBACK activateIndexTran;
479
- ON_ERROR
480
- general_on_error ();
481
- END_ERROR;
482
- BURP_print (false, 173, index_name);
484
+ BURP_print(false, 173, index_name);
483
485
BURP_print_status(false, &local_status_vector);
484
486
tdgbl->flag_on_line = false;
485
487
}
0 commit comments