private void createPrivileges(final MetadataResultSet results, final boolean privilegesForColumn) throws SQLException { while (results.next()) { final String catalogName = quotedName(results.getString("TABLE_CAT")); final String schemaName = quotedName(results.getString("TABLE_SCHEM")); final String tableName = quotedName(results.getString("TABLE_NAME")); final String columnName; if (privilegesForColumn) { columnName = quotedName(results.getString("COLUMN_NAME")); } else { columnName = null; } final MutableTable table = lookupTable(catalogName, schemaName, tableName); if (table == null) { continue; } final MutableColumn column = table.getColumn(columnName); if (privilegesForColumn && column == null) { continue; } final String privilegeName = results.getString("PRIVILEGE"); final String grantor = results.getString("GRANTOR"); final String grantee = results.getString("GRANTEE"); final boolean isGrantable = results.getBoolean("IS_GRANTABLE"); final MutablePrivilege<?> privilege; if (privilegesForColumn) { final MutablePrivilege<Column> columnPrivilege = column.getPrivilege(privilegeName); if (columnPrivilege == null) { privilege = new MutablePrivilege<>(column, privilegeName); column.addPrivilege((MutablePrivilege<Column>) privilege); } else { privilege = columnPrivilege; } } else { final MutablePrivilege<Table> tablePrivilege = table.getPrivilege(privilegeName); if (tablePrivilege == null) { privilege = new MutablePrivilege<>(table, privilegeName); table.addPrivilege((MutablePrivilege<Table>) privilege); } else { privilege = tablePrivilege; } } privilege.addGrant(grantor, grantee, isGrantable); privilege.addAttributes(results.getAttributes()); if (privilegesForColumn) { column.addPrivilege((MutablePrivilege<Column>) privilege); } else { table.addPrivilege((MutablePrivilege<Table>) privilege); } } }
@Test public void tableEquals() { final SchemaCrawlerOptions schemaCrawlerOptions = new SchemaCrawlerOptions(); schemaCrawlerOptions.setShowStoredProcedures(true); final Catalog catalog = testUtility.getCatalog(schemaCrawlerOptions); assertNotNull("Could not obtain catalog", catalog); assertTrue("Could not find any schemas", catalog.getSchemas().length > 0); final Schema schema = catalog.getSchema("PUBLIC"); assertNotNull("Could not obtain schema", schema); assertTrue("Could not find any tables", schema.getTables().length > 0); assertTrue("Could not find any procedures", schema.getProcedures().length > 0); // Try negative test final Table table0 = schema.getTables()[0]; assertTrue("Could not find any columns", table0.getColumns().length > 0); final MutableTable table1 = new MutableTable(table0.getCatalogName(), table0.getSchemaName(), "Test Table 1"); final MutableTable table2 = new MutableTable(table0.getCatalogName(), table0.getSchemaName(), "Test Table 2"); final PrimaryKey primaryKey = table0.getPrimaryKey(); table1.setPrimaryKey(primaryKey); table2.setPrimaryKey(primaryKey); for (final Column column : table0.getColumns()) { table1.addColumn((MutableColumn) column); table2.addColumn((MutableColumn) column); } for (final Index index : table0.getIndices()) { table1.addIndex((MutableIndex) index); table2.addIndex((MutableIndex) index); } for (final ForeignKey fk : table0.getForeignKeys()) { table1.addForeignKey((MutableForeignKey) fk); table2.addForeignKey((MutableForeignKey) fk); } for (final Trigger trigger : table0.getTriggers()) { table1.addTrigger((MutableTrigger) trigger); table2.addTrigger((MutableTrigger) trigger); } for (final Privilege privilege : table0.getPrivileges()) { table1.addPrivilege((MutablePrivilege) privilege); table2.addPrivilege((MutablePrivilege) privilege); } for (final CheckConstraint checkConstraint : table0.getCheckConstraints()) { table1.addCheckConstraint((MutableCheckConstraint) checkConstraint); table2.addCheckConstraint((MutableCheckConstraint) checkConstraint); } assertFalse("Tables should not be equal", table1.equals(table2)); }