private void createTableElements( final Document dom, final Catalog catalog, final Schema schema, final Element eRoot) { final Collection<Table> tables = catalog.getTables(schema); for (final Table table : tables) { // if (table.getName ().equals ("MessageNote")) // { // System.out.println ("Here"); // } if (m_options.m_schemaObjectFilterStrategy.passesFilter(table)) { final TableType tableType = table.getTableType(); final String tableNameUpperCase = tableType.getTableType().toUpperCase(); if (tableType.isView()) { eRoot.appendChild(createViewElement(dom, table)); } else if (tableNameUpperCase.contains("TABLE") || tableNameUpperCase.contains("TEMPORARY")) { // For each Table object create element and attach it to root. eRoot.appendChild(createTableElement(dom, table)); } } // else System.out.println (table.getSchemaName ()); } }
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); } }
public final void traverse() throws SchemaCrawlerException { final Collection<ColumnDataType> columnDataTypes = catalog.getColumnDataTypes(); final Collection<Table> tables = catalog.getTables(); final Collection<Routine> routines = catalog.getRoutines(); final Collection<Synonym> synonyms = catalog.getSynonyms(); final Collection<Sequence> sequences = catalog.getSequences(); handler.begin(); handler.handleHeaderStart(); handler.handle(catalog.getCrawlInfo()); handler.handleHeaderEnd(); if (!tables.isEmpty()) { handler.handleTablesStart(); final List<? extends Table> tablesList = new ArrayList<>(tables); Collections.sort(tablesList, tablesComparator); for (final Table table : tablesList) { handler.handle(table); } handler.handleTablesEnd(); } if (!routines.isEmpty()) { handler.handleRoutinesStart(); final List<? extends Routine> routinesList = new ArrayList<>(routines); Collections.sort(routinesList, routinesComparator); for (final Routine routine : routinesList) { handler.handle(routine); } handler.handleRoutinesEnd(); } if (!sequences.isEmpty()) { handler.handleSequencesStart(); for (final Sequence sequence : sequences) { handler.handle(sequence); } handler.handleSequencesEnd(); } if (!synonyms.isEmpty()) { handler.handleSynonymsStart(); for (final Synonym synonym : synonyms) { handler.handle(synonym); } handler.handleSynonymsEnd(); } if (!columnDataTypes.isEmpty()) { handler.handleColumnDataTypesStart(); for (final ColumnDataType columnDataType : columnDataTypes) { handler.handle(columnDataType); } handler.handleColumnDataTypesEnd(); } handler.handleInfoStart(); handler.handle(catalog.getSchemaCrawlerInfo()); handler.handle(catalog.getDatabaseInfo()); handler.handle(catalog.getJdbcDriverInfo()); handler.handleInfoEnd(); handler.end(); }