private void buildFullName() { if (fullName == null) { final StringBuilder buffer = new StringBuilder(); if (schema != null && !Utility.isBlank(schema.getFullName())) { buffer.append(schema.getFullName()).append("."); } if (!Utility.isBlank(getName())) { buffer.append(getName()); } fullName = buffer.toString(); } }
private void analyseSchema() { try { final String jdbcUrl = m_options.m_jdbcUrl; final String schemaName = m_options.m_schemaName; System.out.printf("Analysing schema [%s] at [%s]...%n", schemaName, jdbcUrl); final long msecStart = System.currentTimeMillis(); // Create a database connection final DataSource dataSource = new DatabaseConnectionOptions(jdbcUrl); final Connection connection = dataSource.getConnection(m_options.m_username, m_options.m_password); // Create the options final SchemaCrawlerOptions options = new SchemaCrawlerOptions(); // Set what details are required in the schema - this affects the // time taken to crawl the schema options.setSchemaInfoLevel(SchemaInfoLevel.standard()); options.setSchemaInclusionRule(new RegularExpressionInclusionRule(schemaName)); final InclusionRule tableRule = new RegularExpressionExclusionRule(".+[\\$/].+"); final InclusionRule procRule = s -> { // System.out.println (s); final String[] a = new String[] { ".*" + "\\$" + ".*", ".*" + "_RETRIGGER_EXPRESSION" + ".*", ".*" + "BITOR" + ".*", ".*" + "CENTRED" + ".*", ".*" + "COMPLEMENT" + ".*", ".*" + "D2" + ".*", ".*" + "DDMMYYYYHHMMMSS" + ".*", ".*" + "DOW" + ".*", ".*" + "DSM" + ".*", ".*" + "ENABLE" + ".*", ".*" + "F2" + ".*", ".*" + "GET_LAST_CHANGE_NUMBER" + ".*", ".*" + "GROOM" + ".*", ".*" + "IS_EVEN" + ".*", ".*" + "IS_ODD" + ".*", ".*" + "LEFT_PADDED" + ".*", ".*" + "LOGICAL_" + ".*", ".*" + "M2" + ".*", ".*" + "MD5" + ".*", ".*" + "MERGE_OSS_TRIP_LOCATION" + ".*", ".*" + "MODF" + ".*", ".*" + "NEXT_TIME_ABSOLUTE" + ".*", ".*" + "NEXT_TIME_RELATIVE" + ".*", ".*" + "RESERVE_FARM_STATUS" + ".*", ".*" + "RIGHT_PADDED" + ".*", ".*" + "S2" + ".*", ".*" + "SCHEDULE_JOB" + ".*", ".*" + "SNDF" + ".*", ".*" + "SSM" + ".*", ".*" + "XOR" + ".*", ".*" + "XSD_TIMESTAMP" + ".*", ".*" + "//dummy//" + ".*" }; return !HcUtil.containsWildcard(a, s); }; options.setTableInclusionRule(tableRule); options.setRoutineInclusionRule(procRule); // new ExcludeAll () // Get the schema definition final Catalog catalog = SchemaCrawlerUtility.getCatalog(connection, options); final long msecDuration = System.currentTimeMillis() - msecStart; final Collection<Schema> schemas = catalog.getSchemas(); ThreadContext.assertFault( schemas.size() == 1, "Expected one schema, got %s [%s]", schemas.size(), schemas.size()); final Schema[] a = schemas.toArray(new Schema[schemas.size()]); final Schema schema = a[0]; final DatabaseInfo di = catalog.getDatabaseInfo(); System.out.printf( " catalog[%s] database[%s] version[%s]%n", schema.getFullName(), di.getProductName(), di.getProductVersion()); System.out.printf(" %s tables%n", catalog.getTables(schema).size()); System.out.printf(" %s stored procedures%n", catalog.getRoutines(schema).size()); System.out.printf("...analysed in %s seconds%n", msecDuration / 1_000L); outputSchemaXml(catalog, schema); System.out.printf("Schema file [%s] created.%n", m_options.m_outputFilename); } catch (final SchemaCrawlerException | SQLException e) { // Propagate exception as unchecked fault up to the fault barrier. ThreadContext.throwFault(e); } }
void retrieveTables( final Schema schema, final String tableNamePattern, final Collection<String> tableTypes, final InclusionRule tableInclusionRule) throws SQLException { requireNonNull(schema, "No schema provided"); final InclusionRuleFilter<Table> tableFilter = new InclusionRuleFilter<>(tableInclusionRule, false); if (tableFilter.isExcludeAll()) { LOGGER.log(Level.INFO, "Not retrieving tables, since this was not requested"); return; } final Optional<Schema> schemaOptional = catalog.lookupSchema(schema.getFullName()); if (!schemaOptional.isPresent()) { LOGGER.log( Level.INFO, new StringFormat( "Cannot locate schema, so not retrieving tables for schema: %s", schema)); return; } LOGGER.log(Level.INFO, new StringFormat("Retrieving tables for schema: %s", schema)); final TableTypes supportedTableTypes = getRetrieverConnection().getTableTypes(); final String[] filteredTableTypes = supportedTableTypes.filterUnknown(tableTypes); LOGGER.log( Level.FINER, new StringFormat( "Retrieving table types: %s", filteredTableTypes == null ? "<<all>>" : Arrays.asList(filteredTableTypes))); final String catalogName = schema.getCatalogName(); final String schemaName = schema.getName(); try (final MetadataResultSet results = new MetadataResultSet( getMetaData() .getTables( unquotedName(catalogName), unquotedName(schemaName), tableNamePattern, filteredTableTypes)); ) { results.setDescription("retrieveTables"); while (results.next()) { // "TABLE_CAT", "TABLE_SCHEM" final String tableName = quotedName(results.getString("TABLE_NAME")); LOGGER.log(Level.FINE, String.format("Retrieving table: %s.%s", schema, tableName)); final String tableTypeString = results.getString("TABLE_TYPE"); final String remarks = results.getString("REMARKS"); final TableType tableType = supportedTableTypes.lookupTableType(tableTypeString).orElse(TableType.UNKNOWN); if (tableType.equals(TableType.UNKNOWN)) { LOGGER.log( Level.FINE, new StringFormat( "Unknown table type, %s, for %s.%s", tableTypeString, schema, tableName)); } final MutableTable table; if (tableType.isView()) { table = new MutableView(schema, tableName); } else { table = new MutableTable(schema, tableName); } if (tableFilter.test(table)) { table.setTableType(tableType); table.setRemarks(remarks); catalog.addTable(table); } } } }