Search in sources :

Example 1 with StatementExecutor

use of com.google.gwtorm.server.StatementExecutor in project gerrit by GerritCodeReview.

the class SchemaUpdaterTest method update.

@Test
public void update() throws OrmException, FileNotFoundException, IOException {
    db.create();
    final Path site = Paths.get(UUID.randomUUID().toString());
    final SitePaths paths = new SitePaths(site);
    SchemaUpdater u = Guice.createInjector(new FactoryModule() {

        @Override
        protected void configure() {
            TypeLiteral<SchemaFactory<ReviewDb>> schemaFactory = new TypeLiteral<SchemaFactory<ReviewDb>>() {
            };
            bind(schemaFactory).to(NotesMigrationSchemaFactory.class);
            bind(Key.get(schemaFactory, ReviewDbFactory.class)).toInstance(db);
            bind(SitePaths.class).toInstance(paths);
            Config cfg = new Config();
            cfg.setString("user", null, "name", "Gerrit Code Review");
            cfg.setString("user", null, "email", "gerrit@localhost");
            //
            bind(Config.class).annotatedWith(//
            GerritServerConfig.class).toInstance(cfg);
            //
            bind(PersonIdent.class).annotatedWith(//
            GerritPersonIdent.class).toProvider(GerritPersonIdentProvider.class);
            bind(AllProjectsName.class).toInstance(new AllProjectsName("All-Projects"));
            bind(AllUsersName.class).toInstance(new AllUsersName("All-Users"));
            bind(GitRepositoryManager.class).toInstance(new InMemoryRepositoryManager());
            //
            bind(String.class).annotatedWith(//
            AnonymousCowardName.class).toProvider(AnonymousCowardNameProvider.class);
            bind(DataSourceType.class).to(InMemoryH2Type.class);
            bind(SystemGroupBackend.class);
            install(new ConfigNotesMigration.Module());
        }
    }).getInstance(SchemaUpdater.class);
    for (SchemaVersion s = u.getLatestSchemaVersion(); s.getVersionNbr() > 1; s = s.getPrior()) {
        try {
            assertThat(s.getPrior().getVersionNbr()).named("schema %s has prior version %s. Not true that", s.getVersionNbr(), s.getPrior().getVersionNbr()).isEqualTo(s.getVersionNbr() - 1);
        } catch (ProvisionException e) {
            // version.
            break;
        }
    }
    u.update(new UpdateUI() {

        @Override
        public void message(String msg) {
        }

        @Override
        public boolean yesno(boolean def, String msg) {
            return def;
        }

        @Override
        public boolean isBatch() {
            return true;
        }

        @Override
        public void pruneSchema(StatementExecutor e, List<String> pruneList) throws OrmException {
            for (String sql : pruneList) {
                e.execute(sql);
            }
        }
    });
    db.assertSchemaVersion();
    final SystemConfig sc = db.getSystemConfig();
    assertThat(sc.sitePath).isEqualTo(paths.site_path.toAbsolutePath().toString());
}
Also used : SystemConfig(com.google.gerrit.reviewdb.client.SystemConfig) InMemoryRepositoryManager(com.google.gerrit.testutil.InMemoryRepositoryManager) SystemConfig(com.google.gerrit.reviewdb.client.SystemConfig) Config(org.eclipse.jgit.lib.Config) GerritServerConfig(com.google.gerrit.server.config.GerritServerConfig) SitePaths(com.google.gerrit.server.config.SitePaths) StatementExecutor(com.google.gwtorm.server.StatementExecutor) ProvisionException(com.google.inject.ProvisionException) TypeLiteral(com.google.inject.TypeLiteral) OrmException(com.google.gwtorm.server.OrmException) ReviewDb(com.google.gerrit.reviewdb.server.ReviewDb) GerritPersonIdent(com.google.gerrit.server.GerritPersonIdent) Path(java.nio.file.Path) SchemaFactory(com.google.gwtorm.server.SchemaFactory) GerritServerConfig(com.google.gerrit.server.config.GerritServerConfig) AnonymousCowardName(com.google.gerrit.server.config.AnonymousCowardName) AllProjectsName(com.google.gerrit.server.config.AllProjectsName) FactoryModule(com.google.gerrit.extensions.config.FactoryModule) GitRepositoryManager(com.google.gerrit.server.git.GitRepositoryManager) ConfigNotesMigration(com.google.gerrit.server.notedb.ConfigNotesMigration) AllUsersName(com.google.gerrit.server.config.AllUsersName) Test(org.junit.Test)

Example 2 with StatementExecutor

use of com.google.gwtorm.server.StatementExecutor in project gerrit by GerritCodeReview.

the class Schema_145 method migrateData.

@Override
protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException, SQLException {
    JdbcSchema schema = (JdbcSchema) db;
    SqlDialect dialect = schema.getDialect();
    try (StatementExecutor e = newExecutor(db)) {
        try {
            dialect.dropIndex(e, "account_external_ids", "account_external_ids_byEmail");
        } catch (OrmException ex) {
        // Ignore.  The index did not exist.
        }
        e.execute("CREATE INDEX account_external_ids_byEmail" + " ON account_external_ids" + " (email_address)");
    }
}
Also used : JdbcSchema(com.google.gwtorm.jdbc.JdbcSchema) OrmException(com.google.gwtorm.server.OrmException) SqlDialect(com.google.gwtorm.schema.sql.SqlDialect) StatementExecutor(com.google.gwtorm.server.StatementExecutor)

Example 3 with StatementExecutor

use of com.google.gwtorm.server.StatementExecutor in project gerrit by GerritCodeReview.

the class Schema_89 method migrateData.

@Override
protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException, SQLException {
    SqlDialect dialect = ((JdbcSchema) db).getDialect();
    try (StatementExecutor e = newExecutor(db)) {
        dialect.dropIndex(e, "patch_set_approvals", "patch_set_approvals_openByUser");
        dialect.dropIndex(e, "patch_set_approvals", "patch_set_approvals_closedByU");
    }
}
Also used : JdbcSchema(com.google.gwtorm.jdbc.JdbcSchema) SqlDialect(com.google.gwtorm.schema.sql.SqlDialect) StatementExecutor(com.google.gwtorm.server.StatementExecutor)

Example 4 with StatementExecutor

use of com.google.gwtorm.server.StatementExecutor in project gerrit by GerritCodeReview.

the class Schema_102 method migrateData.

@Override
protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException, SQLException {
    JdbcSchema schema = (JdbcSchema) db;
    SqlDialect dialect = schema.getDialect();
    try (StatementExecutor e = newExecutor(db)) {
        // Drop left over indexes that were missed to be removed in schema 84.
        // See "Delete SQL index support" commit for more details:
        // d4ae3a16d5e1464574bd04f429a63eb9c02b3b43
        Pattern pattern = Pattern.compile("^changes_(allOpen|allClosed|byBranchClosed)$", Pattern.CASE_INSENSITIVE);
        String table = "changes";
        Set<String> listIndexes = dialect.listIndexes(schema.getConnection(), table);
        for (String index : listIndexes) {
            if (pattern.matcher(index).matches()) {
                dialect.dropIndex(e, table, index);
            }
        }
        dialect.dropIndex(e, table, "changes_byProjectOpen");
        if (dialect instanceof DialectPostgreSQL) {
            e.execute("CREATE INDEX changes_byProjectOpen" + " ON " + table + " (dest_project_name, last_updated_on)" + " WHERE open = 'Y'");
        } else {
            e.execute("CREATE INDEX changes_byProjectOpen" + " ON " + table + " (open, dest_project_name, last_updated_on)");
        }
    }
}
Also used : Pattern(java.util.regex.Pattern) JdbcSchema(com.google.gwtorm.jdbc.JdbcSchema) DialectPostgreSQL(com.google.gwtorm.schema.sql.DialectPostgreSQL) SqlDialect(com.google.gwtorm.schema.sql.SqlDialect) StatementExecutor(com.google.gwtorm.server.StatementExecutor)

Example 5 with StatementExecutor

use of com.google.gwtorm.server.StatementExecutor in project gerrit by GerritCodeReview.

the class Schema_105 method migrateData.

@Override
protected void migrateData(ReviewDb db, UpdateUI ui) throws SQLException, OrmException {
    JdbcSchema schema = (JdbcSchema) db;
    SqlDialect dialect = schema.getDialect();
    Map<String, OrmException> errors = new HashMap<>();
    try (StatementExecutor e = newExecutor(db)) {
        for (String index : listChangesIndexes(schema)) {
            ui.message("Dropping index " + index + " on table " + TABLE);
            try {
                dialect.dropIndex(e, TABLE, index);
            } catch (OrmException err) {
                errors.put(index, err);
            }
        }
    }
    for (String index : listChangesIndexes(schema)) {
        String msg = "Failed to drop index " + index;
        OrmException err = errors.get(index);
        if (err != null) {
            msg += ": " + err.getMessage();
        }
        ui.message(msg);
    }
}
Also used : JdbcSchema(com.google.gwtorm.jdbc.JdbcSchema) HashMap(java.util.HashMap) OrmException(com.google.gwtorm.server.OrmException) SqlDialect(com.google.gwtorm.schema.sql.SqlDialect) StatementExecutor(com.google.gwtorm.server.StatementExecutor)

Aggregations

StatementExecutor (com.google.gwtorm.server.StatementExecutor)6 JdbcSchema (com.google.gwtorm.jdbc.JdbcSchema)5 SqlDialect (com.google.gwtorm.schema.sql.SqlDialect)4 OrmException (com.google.gwtorm.server.OrmException)3 FactoryModule (com.google.gerrit.extensions.config.FactoryModule)1 CurrentSchemaVersion (com.google.gerrit.reviewdb.client.CurrentSchemaVersion)1 SystemConfig (com.google.gerrit.reviewdb.client.SystemConfig)1 ReviewDb (com.google.gerrit.reviewdb.server.ReviewDb)1 GerritPersonIdent (com.google.gerrit.server.GerritPersonIdent)1 AllProjectsName (com.google.gerrit.server.config.AllProjectsName)1 AllUsersName (com.google.gerrit.server.config.AllUsersName)1 AnonymousCowardName (com.google.gerrit.server.config.AnonymousCowardName)1 GerritServerConfig (com.google.gerrit.server.config.GerritServerConfig)1 SitePaths (com.google.gerrit.server.config.SitePaths)1 GitRepositoryManager (com.google.gerrit.server.git.GitRepositoryManager)1 ConfigNotesMigration (com.google.gerrit.server.notedb.ConfigNotesMigration)1 InMemoryRepositoryManager (com.google.gerrit.testutil.InMemoryRepositoryManager)1 JdbcExecutor (com.google.gwtorm.jdbc.JdbcExecutor)1 DialectPostgreSQL (com.google.gwtorm.schema.sql.DialectPostgreSQL)1 SchemaFactory (com.google.gwtorm.server.SchemaFactory)1