From 2125367297c79b0be7164b6924a9d2a400c73498 Mon Sep 17 00:00:00 2001 From: Par Winzell Date: Thu, 6 May 2010 14:38:52 +0000 Subject: [PATCH] Automatically handle changes to primary key by dropping the old one (which triggers the creation of the new one). --- .../depot/impl/DepotMarshaller.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/java/com/samskivert/depot/impl/DepotMarshaller.java b/src/java/com/samskivert/depot/impl/DepotMarshaller.java index 01dc620..0996129 100644 --- a/src/java/com/samskivert/depot/impl/DepotMarshaller.java +++ b/src/java/com/samskivert/depot/impl/DepotMarshaller.java @@ -814,6 +814,29 @@ public class DepotMarshaller } } + // if the primary key has changed size or signature, we have to drop and readd it + boolean keyMatch; + if (metaData.pkColumns.size() == _pkColumns.size()) { + keyMatch = true; + for (FieldMarshaller column : _pkColumns) { + keyMatch &= metaData.pkColumns.contains(column.getField().getName()); + } + } else { + keyMatch = false; + } + + if (!keyMatch) { + log.info("Primary key has changed: dropping."); + ctx.invoke(new Modifier() { + @Override protected int invoke (Connection conn, DatabaseLiaison liaison) + throws SQLException { + // TODO + return 0; + } + }); + + } + // add or remove the primary key as needed if (hasPrimaryKey() && metaData.pkName == null) { log.info("Adding primary key.");