@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); } } }
@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); } }