| 703 | } |
| 704 | |
| 705 | ProfilerManager::Statement* ProfilerManager::getStatement(Request* request) |
| 706 | { |
| 707 | if (!isActive()) |
| 708 | return nullptr; |
| 709 | |
| 710 | auto mainProfileStatement = currentSession->statements.get(request->getStatement()->getStatementId()); |
| 711 | |
| 712 | if (mainProfileStatement) |
| 713 | return mainProfileStatement; |
| 714 | |
| 715 | for (const auto* statement = request->getStatement(); |
| 716 | statement && !currentSession->statements.exist(statement->getStatementId()); |
| 717 | statement = statement->parentStatement) |
| 718 | { |
| 719 | MetaName packageName; |
| 720 | MetaName routineName; |
| 721 | const char* type; |
| 722 | |
| 723 | if (const auto routine = statement->getRoutine()) |
| 724 | { |
| 725 | if (statement->procedure) |
| 726 | type = "PROCEDURE"; |
| 727 | else if (statement->function) |
| 728 | type = "FUNCTION"; |
| 729 | |
| 730 | packageName = routine->getName().package; |
| 731 | routineName = routine->getName().identifier; |
| 732 | } |
| 733 | else if (statement->triggerName.hasData()) |
| 734 | { |
| 735 | type = "TRIGGER"; |
| 736 | routineName = statement->triggerName; |
| 737 | } |
| 738 | else |
| 739 | type = "BLOCK"; |
| 740 | |
| 741 | const StmtNumber parentStatementId = statement->parentStatement ? |
| 742 | statement->parentStatement->getStatementId() : 0; |
| 743 | |
| 744 | LogLocalStatus status("Profiler defineStatement"); |
| 745 | currentSession->pluginSession->defineStatement(&status, |
| 746 | (SINT64) statement->getStatementId(), (SINT64) parentStatementId, |
| 747 | type, packageName.nullStr(), routineName.nullStr(), |
| 748 | (statement->sqlText.hasData() ? statement->sqlText->c_str() : "")); |
| 749 | |
| 750 | auto profileStatement = currentSession->statements.put(statement->getStatementId()); |
| 751 | profileStatement->id = statement->getStatementId(); |
| 752 | |
| 753 | if (!mainProfileStatement) |
| 754 | mainProfileStatement = profileStatement; |
| 755 | } |
| 756 | |
| 757 | return mainProfileStatement; |
| 758 | } |
| 759 | |
| 760 | |
| 761 | //-------------------------------------- |
nothing calls this directly
no test coverage detected