MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / evlGetContext

Function evlGetContext

src/jrd/SysFunction.cpp:4570–4875  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4568
4569
4570dsc* evlGetContext(thread_db* tdbb, const SysFunction*, const NestValueArray& args,
4571 impure_value* impure)
4572{
4573 fb_assert(args.getCount() == 2);
4574
4575 Jrd::Attachment* attachment = tdbb->getAttachment();
4576 Database* dbb = tdbb->getDatabase();
4577 jrd_tra* transaction = tdbb->getTransaction();
4578 Request* request = tdbb->getRequest();
4579
4580 request->req_flags &= ~req_null;
4581 const dsc* nameSpace = EVL_expr(tdbb, request, args[0]);
4582 if (request->req_flags & req_null) // Complain if namespace is null
4583 ERR_post(Arg::Gds(isc_ctx_bad_argument) << Arg::Str(RDB_GET_CONTEXT));
4584
4585 const dsc* name = EVL_expr(tdbb, request, args[1]);
4586 if (request->req_flags & req_null) // Complain if variable name is null
4587 ERR_post(Arg::Gds(isc_ctx_bad_argument) << Arg::Str(RDB_GET_CONTEXT));
4588
4589 const string nameSpaceStr(MOV_make_string2(tdbb, nameSpace, ttype_none));
4590 const string nameStr(MOV_make_string2(tdbb, name, ttype_none));
4591
4592 string resultStr;
4593 USHORT resultType = ttype_none;
4594 request->req_flags |= req_null;
4595
4596 if (nameSpaceStr == SYSTEM_NAMESPACE) // Handle system variables
4597 {
4598 if (nameStr == ENGINE_VERSION)
4599 resultStr.printf("%s.%s.%s", FB_MAJOR_VER, FB_MINOR_VER, FB_REV_NO);
4600 else if (nameStr == DATABASE_NAME)
4601 resultStr = dbb->dbb_database_name.ToString();
4602 else if (nameStr == DATABASE_GUID)
4603 {
4604 char guidBuffer[GUID_BUFF_SIZE];
4605 GuidToString(guidBuffer, &dbb->dbb_guid);
4606 resultStr = string(guidBuffer);
4607 }
4608 else if (nameStr == DATABASE_FILE_ID)
4609 {
4610 resultStr = dbb->getUniqueFileId();
4611 }
4612 else if (nameStr == REPLICA_MODE)
4613 {
4614 if (dbb->dbb_replica_mode == REPLICA_READ_ONLY)
4615 resultStr = RO_VALUE;
4616 else if (dbb->dbb_replica_mode == REPLICA_READ_WRITE)
4617 resultStr = RW_VALUE;
4618 else
4619 {
4620 fb_assert(dbb->dbb_replica_mode == REPLICA_NONE);
4621 return NULL;
4622 }
4623 }
4624 else if (nameStr == SESSION_ID_NAME)
4625 resultStr.printf("%" SQUADFORMAT, PAG_attachment_id(tdbb));
4626 else if (nameStr == NETWORK_PROTOCOL_NAME)
4627 {

Callers

nothing calls this directly

Calls 15

EVL_exprFunction · 0.85
GdsClass · 0.85
StrClass · 0.85
MOV_make_string2Function · 0.85
GuidToStringFunction · 0.85
PAG_attachment_idFunction · 0.85
formatFunction · 0.85
raiseFunction · 0.85
createFunction · 0.85
EVL_make_valueFunction · 0.85
getDatabaseMethod · 0.80
getGlobalCommitNumberMethod · 0.80

Tested by

no test coverage detected