@Override public String valueOf(PhysicalSchema physicalSchema) { return physicalSchema.getPhysicalName(); } }).makeString(",") + "]";
@Override public String getSchemaExpression(PhysicalSchema physicalSchema) { return "(?i).+\\." + physicalSchema.getPhysicalName(); } }
@Override public String valueOf(PhysicalSchema physicalSchema) { return physicalSchema.getPhysicalName(); } }).makeString("('", "','", "')");
@Override public String valueOf(PhysicalSchema physicalSchema) { return physicalSchema.getPhysicalName(); } }).castToSet());
@Override public String getSchemaExpression(PhysicalSchema physicalSchema) { return physicalSchema.getPhysicalName(); }
@Override public boolean accept(Schema each) { return each.getCatalogName().equals(physicalSchema.getPhysicalName()); } });
@Override public void setDataSourceSchema(Connection conn, PhysicalSchema schema) { // NOTE - SET SCHEMA 'schemaName' (with quotes) is only effective for PostgreSQL versions >= 8.4 // For 8.3, we must use SET search_path TO schemaName (without quotes) // This is compatible w/ future versions as well; hence, we keep it // (unfortunately, can't easily bring up version 8.3 on an app server environment for easy testing) JdbcHelper jdbc = this.getJdbcTemplate(); jdbc.update(conn, "USE " + schema.getPhysicalName()); } }
@Override public Iterable<SchemaObjectRow> valueOf(PhysicalSchema physicalSchema) { final String sql = String.format( "select '%1$s' schema, trim(TABNAME) name, NUM_REORG_REC_ALTERS, REORG_PENDING\n" + "FROM TABLE (SYSPROC.ADMIN_GET_TAB_INFO('%1$s', null)) WHERE REORG_PENDING = 'Y'" , physicalSchema.getPhysicalName()); LOG.debug("Executing SQL: " + sql); return stmtExecutor.getJdbcTemplate() .query(conn, sql, new BeanListHandler<SchemaObjectRow>(SchemaObjectRow.class)); } });
@Override public void setDataSourceSchema(Connection conn, PhysicalSchema schema) { // NOTE - SET SCHEMA 'schemaName' (with quotes) is only effective for PostgreSQL versions >= 8.4 // For 8.3, we must use SET search_path TO schemaName (without quotes) // This is compatible w/ future versions as well; hence, we keep it // (unfortunately, can't easily bring up version 8.3 on an app server environment for easy testing) JdbcHelper jdbc = this.getJdbcTemplate(); jdbc.update(conn, "SET search_path TO " + schema.getPhysicalName()); } }
@Override public String getSchemaPrefix(PhysicalSchema schema) { return schema.getPhysicalName() + "." + ObjectUtils.defaultIfNull(schema.getSubschema(), "") + "."; }
@Override public void value(Connection conn) { stmtExecutor.getJdbcTemplate().update(conn, "CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS(NULL, '" + physicalSchema.getPhysicalName() + "', NULL)"); } });
@Override public void deploy(Change change, CommandExecutionContext cec) { MongoDatabase database = mongoClient.getDatabase(change.getPhysicalSchema(env).getPhysicalName()); final BasicDBObject command = new BasicDBObject(); command.put("eval", change.getConvertedContent()); Document result = database.runCommand(command); LOG.info("Result: {}", result); }
@Override public void validateDatabase(Catalog database, final PhysicalSchema physicalSchema) { MutableCollection<Schema> schemasWithIncorrectCatalog = CollectionAdapter.adapt(database.getSchemas()).reject(new Predicate<Schema>() { @Override public boolean accept(Schema each) { return each.getCatalogName().equals(physicalSchema.getPhysicalName()); } }); if (schemasWithIncorrectCatalog.notEmpty()) { throw new IllegalArgumentException("Returned ASE schemas should be in " + physicalSchema.getPhysicalName() + " catalog; however, these were not: " + schemasWithIncorrectCatalog); } }
@Override public void update(DeployExecution deployExecution) { MongoDatabase database = mongoClient.getDatabase(env.getPhysicalSchema(deployExecution.getSchema()).getPhysicalName()); MongoCollection<Document> auditCollection = database.getCollection(deployExecutionTableName); auditCollection.replaceOne(getChangeFilter(deployExecution), getDocumentFromDeployExecution(deployExecution, true)); }
@Override public void persistNew(DeployExecution deployExecution, PhysicalSchema physicalSchema) { MongoDatabase database = mongoClient.getDatabase(physicalSchema.getPhysicalName()); MongoCollection<Document> auditCollection = database.getCollection(deployExecutionTableName); MutableInt mutableInt = nextIdBySchema.get(physicalSchema); mutableInt.increment(); ((DeployExecutionImpl) deployExecution).setId(mutableInt.longValue()); Document doc = getDocumentFromDeployExecution(deployExecution, false); auditCollection.insertOne(doc); }
@Override public void init() { for (PhysicalSchema physicalSchema : env.getPhysicalSchemas()) { MongoDatabase database = mongoClient.getDatabase(physicalSchema.getPhysicalName()); try { database.createCollection(getAuditContainerName()); } catch (Exception e) { // create if it doesn't exist already; TODO clean this up } MongoCollection<Document> collection = database.getCollection(getAuditContainerName()); collection.createIndex(Indexes.ascending(changeNameColumn, "OBJECTNAME")); } }
private void validateEnv1(MongoDbEnvironment env1) { assertThat(env1.getConnectionURI(), equalTo("mongodb://localhost:10000")); assertThat(env1.getSchemaNames(), equalTo(Sets.immutable.of("MYSCHEMA"))); assertThat(env1.getPhysicalSchema("MYSCHEMA").getPhysicalName(), equalTo("MYSCHEMA")); assertThat(env1.getTokens(), equalTo(Maps.immutable.<String, String>empty())); }
private void validateEnv2(MongoDbEnvironment env2) { assertThat(env2.getConnectionURI(), equalTo("mongodb://localhost:10001")); assertThat(env2.getSchemaNames(), equalTo(Sets.immutable.of("MYSCHEMA"))); assertThat(env2.getPhysicalSchema("MYSCHEMA").getPhysicalName(), equalTo("MYSCHEMA_TEST2")); assertThat(env2.getTokens(), equalTo(Maps.immutable.of("key", "val"))); } }
@Before public void setup() { this.env = new DbEnvironment(); this.env.setSchemas(Sets.immutable.with(new Schema(physicalSchema.getPhysicalName()))); this.sqlExecutor = new Db2SqlExecutor(dataSource, env); this.metricsCollector = new DeployMetricsCollectorImpl(); this.db2PostDeployAction = new Db2PostDeployAction(sqlExecutor, metricsCollector); }
@Before public void setup() { this.env = new DbEnvironment(); this.env.setSchemas(Sets.immutable.with(new Schema(physicalSchema.getPhysicalName()))); this.sqlExecutor = new Db2SqlExecutor(dataSource, env); this.metricsCollector = new DeployMetricsCollectorImpl(); this.db2PostDeployAction = new Db2PostDeployAction(sqlExecutor, metricsCollector); }