From 54428a99fb837244f16bf85b1b306173feeef3cf Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Tue, 17 Jan 2012 08:32:15 -0800 Subject: [PATCH] Fix SubmoduleSubscription primary key The primary key for a subscription should be: super-project name super-project branch super-project path As this uniquely identifies one location that needs to know the updated SHA-1 of a submodule. It also permits a super-project to subscribe to the same submodule multiple times, at different paths within the super-project. This is a major schema change that gwtorm cannot upgrade on its own. If you have trouble getting through this upgrade on, seek help from the authors/reviewers of commit d15704079c2f82 ("Allow superprojects to subscribe to submodule updates"): Author: Goran Lungberg Code-Review+1: Nasser Grainawi Code-Review+2: Martin Fick Verified+1: Martin Fick Change-Id: Ibfe09bd8db2e935ca75475d79311fda5b2bff3d1 --- .../reviewdb/SubmoduleSubscription.java | 61 ++++++++++--------- .../reviewdb/SubmoduleSubscriptionAccess.java | 5 +- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/SubmoduleSubscription.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/SubmoduleSubscription.java index b6c27bd33b..026348a321 100644 --- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/SubmoduleSubscription.java +++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/SubmoduleSubscription.java @@ -15,7 +15,7 @@ package com.google.gerrit.reviewdb; import com.google.gwtorm.client.Column; -import com.google.gwtorm.client.CompoundKey; +import com.google.gwtorm.client.StringKey; /** * Defining a project/branch subscription to a project/branch project. @@ -27,7 +27,7 @@ import com.google.gwtorm.client.CompoundKey; */ public final class SubmoduleSubscription { /** Subscription key */ - public static class Key extends CompoundKey { + public static class Key extends StringKey { private static final long serialVersionUID = 1L; /** @@ -37,22 +37,16 @@ public final class SubmoduleSubscription { @Column(id = 1) protected Branch.NameKey superProject; - /** - * Indicates the submodule, aka subscription: the project the subscriber's - * gitlink is pointed to. - */ @Column(id = 2) - protected Branch.NameKey submodule; + protected String submodulePath; protected Key() { superProject = new Branch.NameKey(); - submodule = new Branch.NameKey(); } - protected Key(final Branch.NameKey superProject, - final Branch.NameKey submodule) { + protected Key(Branch.NameKey superProject, String path) { this.superProject = superProject; - this.submodule = submodule; + this.submodulePath = path; } @Override @@ -61,51 +55,53 @@ public final class SubmoduleSubscription { } @Override - public com.google.gwtorm.client.Key[] members() { - return new com.google.gwtorm.client.Key[] {submodule}; + public String get() { + return submodulePath; } + @Override + protected void set(String newValue) { + this.submodulePath = newValue; + } } @Column(id = 1, name = Column.NONE) protected Key key; @Column(id = 2) - protected String path; + protected Branch.NameKey submodule; protected SubmoduleSubscription() { } - public SubmoduleSubscription(final Branch.NameKey superProject, - final Branch.NameKey submodule, final String path) { - key = new Key(superProject, submodule); - this.path = path; + public SubmoduleSubscription(Branch.NameKey superProject, + Branch.NameKey submodule, + String path) { + this.key = new Key(superProject, path); + this.submodule = submodule; } - @Override - public String toString() { - return key.superProject.getParentKey().get() + " " + key.superProject.get() - + ", " + key.submodule.getParentKey().get() + " " - + key.submodule.get() + ", " + path; + public Key getKey() { + return key; } public Branch.NameKey getSuperProject() { return key.superProject; } - public Branch.NameKey getSubmodule() { - return key.submodule; + public String getPath() { + return key.get(); } - public String getPath() { - return path; + public Branch.NameKey getSubmodule() { + return submodule; } @Override public boolean equals(Object o) { if (o instanceof SubmoduleSubscription) { return key.equals(((SubmoduleSubscription) o).key) - && path.equals(((SubmoduleSubscription) o).path); + && submodule.equals(((SubmoduleSubscription) o).submodule); } return false; } @@ -114,4 +110,13 @@ public final class SubmoduleSubscription { public int hashCode() { return key.hashCode(); } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getSuperProject()).append(':').append(getPath()); + sb.append(" follows "); + sb.append(getSubmodule()); + return sb.toString(); + } } diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/SubmoduleSubscriptionAccess.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/SubmoduleSubscriptionAccess.java index 126da78d71..909bd579ec 100644 --- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/SubmoduleSubscriptionAccess.java +++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/SubmoduleSubscriptionAccess.java @@ -25,14 +25,11 @@ public interface SubmoduleSubscriptionAccess extends @PrimaryKey("key") SubmoduleSubscription get(SubmoduleSubscription.Key key) throws OrmException; - @Query("ORDER BY key.superProject.projectName") - ResultSet all() throws OrmException; - @Query("WHERE key.superProject = ?") ResultSet bySuperProject(Branch.NameKey superProject) throws OrmException; - @Query("WHERE key.submodule = ?") + @Query("WHERE submodule = ?") ResultSet bySubmodule(Branch.NameKey submodule) throws OrmException; }