static boolean hasColumn(KeyRecord pk, String columnName) { if (pk != null) { return pk.getColumnByName(columnName) != null; } return false; }
private boolean isJoinOrPkColumn(Column column) { boolean joinColumn = Boolean.valueOf(column.getProperty(ODataMetadataProcessor.JOIN_COLUMN, false)); if (!joinColumn) { Table table = (Table)column.getParent(); return (table.getPrimaryKey().getColumnByName(column.getName()) != null); } return false; }
private boolean isJoinOrPkColumn(Column column) { Table table = (Table)column.getParent(); boolean isKey = (table.getPrimaryKey().getColumnByName(column.getName()) != null); if (!isKey) { for(ForeignKey fk:table.getForeignKeys()) { if (fk.getColumnByName(column.getName()) != null) { isKey = true; } } } return isKey; } }
private boolean addEnityKey(Comparison obj) { if (obj.getOperator().equals(Comparison.Operator.EQ)) { if (obj.getLeftExpression() instanceof ColumnReference && obj.getRightExpression() instanceof Literal) { ColumnReference columnRef = (ColumnReference)obj.getLeftExpression(); Table parentTable = columnRef.getTable().getMetadataObject(); Entity entity = getEntity(parentTable); if (entity != null) { Column column = columnRef.getMetadataObject(); if (parentTable.getPrimaryKey().getColumnByName(column.getName())!=null) { entity.addKeyValue(column, (Literal)obj.getRightExpression()); return true; } } } if (obj.getLeftExpression() instanceof ColumnReference && obj.getRightExpression() instanceof ColumnReference) { Column left = ((ColumnReference)obj.getLeftExpression()).getMetadataObject(); Column right = ((ColumnReference)obj.getRightExpression()).getMetadataObject(); if (isJoinOrPkColumn(left)&& isJoinOrPkColumn(right)) { // in odata the navigation from parent to child implicit by their keys Entity leftEntity = getEntity((Table)left.getParent()); Entity rightEntity = getEntity((Table)right.getParent()); leftEntity.addRelation(left, right, rightEntity); rightEntity.addRelation(right,left, leftEntity); return true; } } } return false; }
@Test public void testPhysicalTableAlterAddColumn() throws Exception { String ddl = "CREATE DATABASE FOO;" + "USE DATABASE FOO ;" + "CREATE FOREIGN DATA WRAPPER postgresql;" + "CREATE SERVER pgsql TYPE 'custom' FOREIGN DATA WRAPPER postgresql OPTIONS (\"jndi-name\" 'jndiname');" + "CREATE SCHEMA test SERVER pgsql;" + "SET SCHEMA test;" + "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, e3 date);" + "ALTER TABLE G1 ADD COLUMN e4 integer PRIMARY KEY OPTIONS(x 10)"; Database db = helpParse(ddl); Schema s = db.getSchema("test"); Table t = s.getTable("G1"); assertNotNull(t); assertTrue(t.getColumns().size() == 4); assertNotNull(t.getColumnByName("e1")); assertNotNull(t.getColumnByName("e2")); assertNotNull(t.getColumnByName("e3")); assertNotNull(t.getColumnByName("e4")); Column c = t.getColumnByName("e4"); assertEquals("integer", c.getRuntimeType()); assertNotNull(t.getPrimaryKey().getColumnByName("e4")); assertEquals("10", c.getProperty("x", false)); }