public ForeignKey(Table table, String name, Column[] columns, UniqueKey key, boolean cascade) { super(table, name, columns); if (key == null) { throw new IllegalArgumentException("Unique key cannot be null."); } m_key = key; m_cascade = cascade; Column[] fk = getColumns(); Column[] uk = m_key.getColumns(); if (fk.length != uk.length) { throw new IllegalArgumentException( "Foreign columns don't match unique key: fk = " + getSQL() + " uk = " + key.getSQL()); } for (int i = 0; i < fk.length; i++) { if (fk[i].getType() == Integer.MIN_VALUE) { fk[i].setType(uk[i].getType()); fk[i].setSize(uk[i].getSize()); } else { if (fk[i].getType() != uk[i].getType() && fk[i].getSize() != uk[i].getSize()) { throw new IllegalArgumentException("Foreign columns don't match unique key."); } } } m_key.addForeignKey(this); }