Exemplo n.º 1
0
  @Override
  public void visit(VariableTable r) throws MVisitorException {
    // VariableTable : cas de base

    /*
     * si feuille : représente un résultat déjà calculé. Il ne faut pas le
     * prendre en compte dans le coût
     */
    if (r.getRelation() == null && !BD.isATable(r)) {
      return;
      // TODO : vérifier que les res inter ont bien un fils nul
    }

    /*
     * Si ce n'est pas une feuille, c'est un soit une table, soit un
     * résultat intermédiaire à calculer et à envoyer sur un autre site
     */
    // Cas table : on la rapatrie sur le site courant
    if (BD.isATable(r)) {
      Table t = BD.getTable(r);
      String siteT = BD.isHostedOn(t);
      this.nbtuples = t.tupleCount();

      if (siteT.equals(site)) {
        // super, on est déjà sur le bon site
      } else {
        // on calcule le cout de transfert par tuple
        float coutTransfert = cost(site, siteT);
        // on a le cout total grace au nb de tuples
        this.cout = coutTransfert * this.nbtuples;
        print(coutTransfert);
      }
    }
    // Cas res interm. Le site dest est indiqué par l'attribut site de la
    // VariableTable
    else {
      // on visite d'abord la descendance
      r.getRelation().maccept(this);

      String siteD = r.getSite();
      if (siteD == null || siteD == "")
        // Anomalie, on ne fait rien
        return;

      if (siteD.equals(site)) {
        // à priori ne devrait pas arriver mais pourquoi pas
        // le cout ne change pas
      } else {
        // on calcule le cout de transfert par tuple
        float coutTransfert = cost(siteD, site);
        // ici le nb de tuples est celui calculé par les visites des
        // fils si le visiteur n'est pas tombé sur une VariableTable
        // représentant une table plutôt, on aura un cout faux
        this.cout = coutTransfert * this.nbtuples;
        print(coutTransfert);
      }
    }
  }
Exemplo n.º 2
0
  @Override
  public void visit(Table r) throws MVisitorException {
    // ne devrait pas arriver mais pour le fun :

    if (BD.isHostedOn(r) == null)
      // la table n'est pas hébergée sur un site
      return;

    String siteT = BD.isHostedOn(r);
    this.nbtuples = r.tupleCount();

    if (siteT.equals(site)) {
      // super, on est déjà sur le bon site
    } else {
      // on calcule le cout de transfert par tuple
      float coutTransfert = cost(site, siteT);
      // on a le cout total grace au nb de tuples
      this.cout = coutTransfert * this.nbtuples;
      print(coutTransfert);
    }
  }