C_QanExecPlan.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /****************************************************************************************************************************
  2. Licensed Materials - Property of IBM
  3. BI and PM: QFW
  4. © Copyright IBM Corp. 2005, 2010
  5. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  6. *****************************************************************************************************************************/
  7. function C_QanExecPlan( oLogDoc )
  8. {
  9. this.m_oLogDoc = oLogDoc;
  10. this.m_aAllTreeNodesByName = [];
  11. this.m_aAllTreeNodesByID = [];
  12. this.m_iNodeIdGen = 1;
  13. };
  14. C_QanExecPlan.prototype.F_Init = function()
  15. {
  16. if (!this.m_oLogDoc)
  17. this.m_aPlanRoots = this.f_initSubtree( null );
  18. else
  19. {
  20. var v_nRootSubtreeNode = this.m_oLogDoc.F_GetAsXMLDoc().documentElement;
  21. var v_nCoordinationPlannerMainCall =
  22. v_nRootSubtreeNode.selectSingleNode( "QFSSession/QFSQuery[@_provider='CoordinationPlanner']" );
  23. if( !v_nCoordinationPlannerMainCall )
  24. return;
  25. this.m_aPlanRoots = this.f_initSubtree( v_nCoordinationPlannerMainCall );
  26. }
  27. };
  28. C_QanExecPlan.prototype.F_GetLogDoc = function()
  29. {
  30. return this.m_oLogDoc;
  31. }
  32. C_QanExecPlan.prototype.f_execCommandCondition = function()
  33. {
  34. return "@method='QueryExecute1' or @method='QueryExecute2' or @method='QueryValidate1' or @method='QueryValidate2'";
  35. }
  36. C_QanExecPlan.prototype.f_initSubtree = function( nSubtreeNode, oNestingParentPlanNode )
  37. {
  38. if (nSubtreeNode)
  39. {
  40. var v_nlExecutionMethods =
  41. nSubtreeNode.selectNodes( "QFSQuery["+ this.f_execCommandCondition()+ "]" );
  42. if( v_nlExecutionMethods.length == 0 )
  43. return;
  44. var v_nlFullExecPlanMethod = v_nlExecutionMethods[v_nlExecutionMethods.length - 1];
  45. var v_nlProviderQueries =
  46. v_nlFullExecPlanMethod.selectNodes( "parm[@type='input']/*/querySet/queries/providerQuery" );
  47. var v_aRootPlanNodes = this.f_createExecutionPlan( v_nlProviderQueries, null, oNestingParentPlanNode );
  48. for( var i = 0; i < v_nlExecutionMethods.length; ++i )
  49. {
  50. var v_nOutmostOperation =
  51. v_nlExecutionMethods[i].selectSingleNode("parm[@type='input']/*/querySet/queries/providerQuery");
  52. if( !v_nOutmostOperation )
  53. continue;
  54. var v_sOutmostOperationName = v_nOutmostOperation.getAttribute("name");
  55. var v_oPlanNode = this.m_aAllTreeNodesByName[ v_sOutmostOperationName ];
  56. if( !v_oPlanNode )
  57. continue;
  58. var v_nQueryFeedbackResult =
  59. v_nlExecutionMethods[i].selectSingleNode("parm[@type='output']/response/queryFeedbackResult");
  60. v_oPlanNode.F_SetQueryFeedback( v_nQueryFeedbackResult );
  61. var v_nNestedNodeTree =
  62. v_nlExecutionMethods[i].selectSingleNode("QFSQuery[@_provider='CoordinationPlanner']");
  63. if( !v_nNestedNodeTree )
  64. continue;
  65. this.f_initSubtree( v_nNestedNodeTree, v_oPlanNode );
  66. }
  67. }
  68. return v_aRootPlanNodes;
  69. };
  70. C_QanExecPlan.prototype.f_createExecutionPlan = function( nlProviderQueries, oParentPlanNode, oNestedCallsParentPlanNode )
  71. {
  72. var v_aPlanNodes = [];
  73. for( var i = 0; i < nlProviderQueries.length; ++i )
  74. {
  75. v_oPlanNode = new C_QanExecPlanNode( this.m_iNodeIdGen, nlProviderQueries[i], oParentPlanNode, oNestedCallsParentPlanNode );
  76. v_aPlanNodes.push( v_oPlanNode );
  77. this.m_aAllTreeNodesByName[ v_oPlanNode.F_GetName() ] = v_oPlanNode;
  78. this.m_aAllTreeNodesByID[ this.m_iNodeIdGen ] = v_oPlanNode;
  79. this.m_iNodeIdGen++;
  80. var v_nlChildProviderQueries = nlProviderQueries[i].selectNodes( "source/querySet/queries/providerQuery|source/providerQuery" );
  81. this.f_createExecutionPlan( v_nlChildProviderQueries, v_oPlanNode, oNestedCallsParentPlanNode );
  82. }
  83. return v_aPlanNodes;
  84. }
  85. C_QanExecPlan.prototype.F_GetPlanRootNodes = function()
  86. {
  87. return this.m_aPlanRoots;
  88. }
  89. C_QanExecPlan.prototype.F_GetPlanNodeByID = function( iID )
  90. {
  91. return this.m_aAllTreeNodesByID[iID];
  92. }