MCPcopy Create free account
hub / github.com/Norbyte/ositools / EvaluateInServerThread

Method EvaluateInServerThread

OsiInterface/Debugger.cpp:676–778  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

674 }
675
676 ResultCode Debugger::EvaluateInServerThread(uint32_t seq, EvalType type, uint32_t nodeId, MsgTuple const & params,
677 bool & querySucceeded)
678 {
679 Debug("Debugger::EvaluateInServerThread(): Type %d, node %d", type, nodeId);
680
681 if (nodeId == 0 || nodeId > (*globals_.Nodes)->Db.Size) {
682 Debug("Debugger::EvaluateInServerThread(): Tried to call nonexistent node %d", nodeId);
683 return ResultCode::InvalidNodeId;
684 }
685
686 auto node = (*globals_.Nodes)->Db.Start[nodeId - 1];
687 if (node->Function == nullptr) {
688 Debug("Debugger::EvaluateInServerThread(): Node has no function!");
689 return ResultCode::NotCallable;
690 }
691
692 auto const & sig = node->Function->Signature;
693 if (params.column_size() != sig->Params->Params.Size) {
694 Debug("Debugger::EvaluateInServerThread(): Got %d params, but node %d has %d!",
695 params.column_size(), nodeId, sig->Params->Params.Size);
696 return ResultCode::InvalidParamTupleArity;
697 }
698
699 auto typeNode = sig->Params->Params.Head->Next;
700 for (unsigned i = 0; i < sig->Params->Params.Size; i++) {
701 auto typeId = params.column()[i].type_id();
702 if (typeId != (uint32_t)ValueType::None
703 && !AreTypesCompatible(typeNode->Item.Type, typeId)) {
704 Debug("Debugger::EvaluateInServerThread(): Parameter %d type mismatch; expected %d, got %d!",
705 i, typeNode->Item.Type, typeId);
706 return ResultCode::InvalidParamType;
707 }
708 typeNode = typeNode->Next;
709
710 if (typeId == (uint32_t)ValueType::None
711 && type != EvalType::Pushdown
712 && !sig->OutParamList.isOutParam(i)) {
713 Debug("Debugger::EvaluateInServerThread(): Got a null value for IN parameter %d!", i);
714 return ResultCode::MissingRequiredParam;
715 }
716 }
717
718 auto adapter = debugAdapters_.FindAdapter(params.column_size());
719 if (adapter == nullptr) {
720 Debug("Debugger::EvaluateInServerThread(): No debug adapter available for %d columns!", params.column_size());
721 return ResultCode::NoAdapter;
722 }
723
724 if (globals_.TypedValueVMT == nullptr) {
725 Debug("Debugger::EvaluateInServerThread(): TypedValue VMT not available");
726 return ResultCode::EvalEngineNotReady;
727 }
728
729 AdapterRef adapterRef;
730 adapterRef.Id = adapter->Id;
731 adapterRef.Manager = adapter->Db;
732
733 breakpoints_.SetDebuggingDisabled(true);

Callers 1

EvaluateMethod · 0.95

Calls 9

DebugFunction · 0.85
AreTypesCompatibleFunction · 0.85
MsgToTupleFunction · 0.85
TupClearOutParamsFunction · 0.85
isOutParamMethod · 0.80
FindAdapterMethod · 0.80
SetDebuggingDisabledMethod · 0.80
IsValidMethod · 0.80
SendEvaluateRowMethod · 0.80

Tested by

no test coverage detected