void runAfterCompilationHook(DriverContext driverContext, Context analyzerContext, Throwable compileException)
      throws Exception {
    List<QueryLifeTimeHook> queryHooks = hooks.getHooks(QUERY_LIFETIME_HOOKS);
    if (!queryHooks.isEmpty()) {
      HookContext hookContext = new PrivateHookContext(driverContext, analyzerContext);
      hookContext.setException(compileException);

      QueryLifeTimeHookContext qhc =
          new QueryLifeTimeHookContextImpl.Builder()
              .withHiveConf(conf)
              .withCommand(analyzerContext.getCmd())
              .withHookContext(hookContext)
              .build();

      for (QueryLifeTimeHook hook : queryHooks) {
        hook.afterCompile(qhc, compileException != null);
      }
    }
  }
Dispatches {@link QueryLifeTimeHook#afterCompile(QueryLifeTimeHookContext, boolean)}.

@param driverContext the DriverContext used for generating the HookContext
@param analyzerContext the SemanticAnalyzer context for this query
@param compileException the exception if one was thrown during the compilation
@throws Exception during {@link PrivateHookContext} creation
ql/src/java/org/apache/hadoop/hive/ql/HookRunner.java