| 450 | // IndexExpression class |
| 451 | |
| 452 | IndexExpression::IndexExpression(thread_db* tdbb, index_desc* idx) |
| 453 | : m_tdbb(tdbb) |
| 454 | { |
| 455 | if (!(idx->idx_flags & idx_expression)) |
| 456 | return; |
| 457 | |
| 458 | fb_assert(idx->idx_expression); |
| 459 | m_expression = idx->idx_expression; |
| 460 | |
| 461 | fb_assert(idx->idx_expression_statement); |
| 462 | const auto orgRequest = tdbb->getRequest(); |
| 463 | m_request = idx->idx_expression_statement->findRequest(tdbb, true); |
| 464 | |
| 465 | if (!m_request) |
| 466 | ERR_post(Arg::Gds(isc_random) << "Attempt to evaluate index expression recursively"); |
| 467 | |
| 468 | fb_assert(m_request != orgRequest); |
| 469 | |
| 470 | fb_assert(!m_request->req_caller); |
| 471 | m_request->req_caller = orgRequest; |
| 472 | |
| 473 | m_request->req_flags &= req_in_use; |
| 474 | m_request->req_flags |= req_active; |
| 475 | |
| 476 | TRA_attach_request(tdbb->getTransaction(), m_request); |
| 477 | fb_assert(m_request->req_transaction); |
| 478 | TRA_setup_request_snapshot(tdbb, m_request); |
| 479 | |
| 480 | if (orgRequest) |
| 481 | m_request->setGmtTimeStamp(orgRequest->getGmtTimeStamp()); |
| 482 | else |
| 483 | m_request->validateTimeStamp(); |
| 484 | |
| 485 | m_request->req_rpb[0].rpb_number.setValue(BOF_NUMBER); |
| 486 | m_request->req_rpb[0].rpb_number.setValid(true); |
| 487 | } |
| 488 | |
| 489 | IndexExpression::~IndexExpression() |
| 490 | { |
nothing calls this directly
no test coverage detected