/*** * extract mappings from given datasource, and insert them into the pre-processed mapping * * Duplicate Exception may happen, * since mapping id is generated randomly and same id may occur */ private SQLPPMapping bootstrapMappings(SQLPPMapping ppMapping) throws SQLException, DuplicateMappingException { if (ppMapping == null) { throw new IllegalArgumentException("Model should not be null"); } try (Connection conn = LocalJDBCConnectionUtils.createConnection(settings)) { RDBMetadata metadata = RDBMetadataExtractionTools.createMetadata(conn, typeFactory, jdbcTypeMapper); // this operation is EXPENSIVE RDBMetadataExtractionTools.loadMetadata(metadata, conn, null); return bootstrapMappings(metadata, ppMapping); } }
public static RDBMetadata createDummyMetadata() { return createDummyMetadata("dummy class"); }
String defaultSchema = getOracleDefaultOwner(conn); if (realTables == null || realTables.isEmpty()) seedRelationIds = getTableList(conn, new OracleRelationListProvider(idfac, defaultSchema), idfac); else seedRelationIds = getTableList(defaultSchema, realTables, idfac); seedRelationIds = getTableListDefault(md, ImmutableSet.of("SYSTOOLS", "SYSCAT", "SYSIBM", "SYSIBMADM", "SYSSTAT"), idfac); else if (productName.contains("SQL Server")) // MS SQL Server seedRelationIds = getTableListDefault(md, ImmutableSet.of("sys", "INFORMATION_SCHEMA"), idfac); else seedRelationIds = getTableListDefault(md, ImmutableSet.<String>of(), idfac); seedRelationIds = getTableList(null, realTables, idfac); String catalog = getCatalog(metadata, conn); getPrimaryKey(md, relation, metadata.getQuotedIDFactory()); getUniqueAttributes(md, relation, metadata.getQuotedIDFactory()); getForeignKeys(md, relation, metadata); if (printouts) { System.out.println(relation + ";"); for (UniqueConstraint uc : relation.getUniqueConstraints()) System.out.println(uc + ";"); for (ForeignKeyConstraint fk : relation.getForeignKeys()) System.out.println(fk + ";");
@Override public RDBMetadata extract(SQLPPMapping ppMapping, Connection connection, Optional<File> constraintFile) throws DBMetadataExtractionException { try { RDBMetadata metadata = RDBMetadataExtractionTools.createMetadata(connection, typeFactory, jdbcTypeMapper); return extract(ppMapping, connection, metadata, constraintFile); } catch (SQLException e) { throw new DBMetadataExtractionException(e.getMessage()); } }
RDBMetadataExtractionTools.loadMetadata(metadata, connection, null); }); RDBMetadataExtractionTools.loadMetadata(metadata, connection, realTables);
/** * Retrieves the primary key for the table * */ private static void getPrimaryKey(DatabaseMetaData md, DatabaseRelationDefinition relation, QuotedIDFactory idfac) throws SQLException { RelationID id = relation.getID(); // Retrieves a description of the given table's primary key columns. They are ordered by COLUMN_NAME (sic!) try (ResultSet rs = md.getPrimaryKeys(null, id.getSchemaName(), id.getTableName())) { extractPrimaryKey(relation, idfac, id, rs); } catch (SQLSyntaxErrorException e) { // WORKAROUND for MySQL connector >= 8.0: // <https://github.com/ontop/ontop/issues/270> try (ResultSet rs = md.getPrimaryKeys(id.getSchemaName(), null, id.getTableName())) { extractPrimaryKey(relation, idfac, id, rs); } } }
/** * Retrieves the unique attributes(s) * @param md * @return * @throws SQLException */ private static void getUniqueAttributes(DatabaseMetaData md, DatabaseRelationDefinition relation, QuotedIDFactory idfac) throws SQLException { RelationID id = relation.getID(); // extracting unique try (ResultSet rs = md.getIndexInfo(null, id.getSchemaName(), id.getTableName(), true, true)) { extractUniqueAttributes(relation, idfac, rs); } catch (Exception e){ // Workaround for MySQL-connector >= 8.0 try (ResultSet rs = md.getIndexInfo(id.getSchemaName(),null, id.getTableName(), true, true)) { extractUniqueAttributes(relation, idfac, rs); } } }
/** * Retrieves the foreign keys for the table * */ private static void getForeignKeys(DatabaseMetaData md, DatabaseRelationDefinition relation, DBMetadata metadata) throws SQLException { QuotedIDFactory idfac = metadata.getQuotedIDFactory(); RelationID relationId = relation.getID(); try (ResultSet rs = md.getImportedKeys(null, relationId.getSchemaName(), relationId.getTableName())) { extractForeignKeys(relation, metadata, idfac, rs); } catch (Exception ex) { try (ResultSet rs = md.getImportedKeys(relationId.getSchemaName(),null, relationId.getTableName())) { extractForeignKeys(relation, metadata, idfac, rs); } } }
String defaultSchema = getOracleDefaultOwner(conn); if (realTables == null || realTables.isEmpty()) seedRelationIds = getTableList(conn, new OracleRelationListProvider(idfac, defaultSchema), idfac); else seedRelationIds = getTableList(defaultSchema, realTables, idfac); seedRelationIds = getTableListDefault(md, ImmutableSet.of("SYSTOOLS", "SYSCAT", "SYSIBM", "SYSIBMADM", "SYSSTAT"), idfac); else if (productName.contains("SQL Server")) // MS SQL Server seedRelationIds = getTableListDefault(md, ImmutableSet.of("sys", "INFORMATION_SCHEMA"), idfac); else seedRelationIds = getTableListDefault(md, ImmutableSet.<String>of(), idfac); seedRelationIds = getTableList(null, realTables, idfac); getPrimaryKey(md, relation, metadata.getQuotedIDFactory()); getUniqueAttributes(md, relation, metadata.getQuotedIDFactory()); getForeignKeys(md, relation, metadata); if (printouts) { System.out.println(relation + ";"); for (UniqueConstraint uc : relation.getUniqueConstraints()) System.out.println(uc + ";"); for (ForeignKeyConstraint fk : relation.getForeignKeys()) System.out.println(fk + ";"); System.out.println("");
@Override public RDBMetadata extract(SQLPPMapping ppMapping, Connection connection, Optional<File> constraintFile) throws DBMetadataExtractionException { try { RDBMetadata metadata = RDBMetadataExtractionTools.createMetadata(connection); return extract(ppMapping, connection, metadata, constraintFile); } catch (SQLException e) { throw new DBMetadataExtractionException(e.getMessage()); } }
RDBMetadataExtractionTools.loadMetadata(metadata, connection, null); }); RDBMetadataExtractionTools.loadMetadata(metadata, connection, realTables);
/*** * extract mappings from given datasource, and insert them into the pre-processed mapping * * Duplicate Exception may happen, * since mapping id is generated randomly and same id may occur */ private SQLPPMapping bootstrapMappings(SQLPPMapping ppMapping) throws SQLException, DuplicateMappingException { if (ppMapping == null) { throw new IllegalArgumentException("Model should not be null"); } try (Connection conn = LocalJDBCConnectionUtils.createConnection(settings)) { RDBMetadata metadata = RDBMetadataExtractionTools.createMetadata(conn); // this operation is EXPENSIVE RDBMetadataExtractionTools.loadMetadata(metadata, conn, null); return bootstrapMappings(metadata, ppMapping); } }
private void addDatabaseTableToDataSetComboBox() { DefaultComboBoxModel<RelationDefinition> relationList = new DefaultComboBoxModel<>(); try { Connection conn = ConnectionTools.getConnection(selectedSource); RDBMetadata md = RDBMetadataExtractionTools.createMetadata(conn, obdaModel.getTypeFactory(), jdbcTypeMapper); // this operation is EXPENSIVE -- only names are needed + a flag for table/view RDBMetadataExtractionTools.loadMetadata(md, conn, null); for (DatabaseRelationDefinition relation : md.getDatabaseRelations()) { relationList.addElement(relation); } } catch (SQLException e) { // NO-OP } cboDataSet.setModel(relationList); cboDataSet.setSelectedIndex(-1); }
" Message: " + e.getMessage()); RDBMetadata metadata = RDBMetadataExtractionTools.createMetadata(conn, typeFactory, jdbcTypeMapper); RDBMetadataExtractionTools.loadMetadata(metadata, conn, null);