package com.baasbox.db; import java.util.List; import play.Logger; import com.baasbox.dao.exception.SqlInjectionException; import com.baasbox.util.QueryParams; import com.orientechnologies.orient.core.db.record.ODatabaseRecordTx; import com.orientechnologies.orient.core.record.impl.ODocument; /** * Created by eto on 10/23/14. */ public class Evolution_1_0_0_M1 implements IEvolution { private String version = "1.0.0-M1"; @Override public String getFinalVersion() { return version; } @Override public void evolve(ODatabaseRecordTx db) { Logger.info("Applying evolutions to evolve to the " + version + " level"); try{ changeIndexesType(db); //createCollectionIndexes(db); //postponed }catch (Throwable e){ Logger.error("Error applying evolution to " + version + " level!!" ,e); throw new RuntimeException(e); } Logger.info ("DB now is on " + version + " level"); } private void changeIndexesType(ODatabaseRecordTx db){ Logger.info("Changing indexes type..."); DbHelper.execMultiLineCommands(db,true, "drop index _BB_Collection.name;", "drop index _BB_Node.id;", "drop index _BB_Permissions.tag;", "drop index E.id;", "create index _BB_Collection.name UNIQUE_HASH_INDEX;", "create index _BB_Node.id UNIQUE_HASH_INDEX;", "create index _BB_Permissions.tag UNIQUE_HASH_INDEX;", "create index E.id UNIQUE_HASH_INDEX;" ); Logger.info("...done!"); } /* TODO: postponed */ private void createCollectionIndexes(ODatabaseRecordTx db) throws SqlInjectionException{ Logger.info("Creating collection indexes..."); Logger.info("...dropping old _BB_NODE indexes"); DbHelper.execMultiLineCommands(db,true, "drop index _bb_node._author;", "drop index _bb_node._creation_date;"); List<ODocument> collections = DbHelper.commandExecute(DbHelper.selectCommandBuilder("_BB_COLLECTION", false, QueryParams.getInstance()), new String[]{}); Logger.info("...found " + collections.size() + " collections"); for (ODocument coll:collections){ DbHelper.execMultiLineCommands(db,true, "create index " + coll.field("name") + "._author notunique;", "create index " + coll.field("name") + "._creation_date notunique;" ); } Logger.info("...done!"); } }