mirror of
https://github.com/google/nomulus.git
synced 2025-05-22 20:29:36 +02:00
Create SQL schema for RdeRevision (#835)
* Create SQL schema for RdeRevision * Split RdeRevision IDs into three separate DB fields as unified pkey * Rename variable * Merge remote-tracking branch 'origin/master' into rdeRevision * Rename variable in one other location * Implement no-op toDatastore/Sql for RdeRevision * Responses to CR * Merge remote-tracking branch 'origin/master' into rdeRevision * Use a date for the date column * Fix exception messages in tests * Regen diagram to fix the test * Use assignment in static factory methods * Merge remote-tracking branch 'origin/master' into rdeRevision
This commit is contained in:
parent
9ddde4799c
commit
3ed3b351d0
11 changed files with 895 additions and 525 deletions
|
@ -15,17 +15,32 @@
|
|||
package google.registry.model.rde;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static com.google.common.base.Verify.verify;
|
||||
import static com.google.common.base.Verify.verifyNotNull;
|
||||
import static google.registry.model.ofy.ObjectifyService.ofy;
|
||||
import static google.registry.model.rde.RdeNamingUtils.makePartialName;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||
|
||||
import com.google.common.base.VerifyException;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.googlecode.objectify.Key;
|
||||
import com.googlecode.objectify.annotation.Entity;
|
||||
import com.googlecode.objectify.annotation.Id;
|
||||
import com.googlecode.objectify.annotation.Ignore;
|
||||
import google.registry.model.BackupGroupRoot;
|
||||
import google.registry.model.ImmutableObject;
|
||||
import google.registry.model.rde.RdeRevision.RdeRevisionId;
|
||||
import google.registry.persistence.VKey;
|
||||
import google.registry.persistence.converter.LocalDateConverter;
|
||||
import google.registry.schema.replay.DatastoreEntity;
|
||||
import google.registry.schema.replay.SqlEntity;
|
||||
import java.io.Serializable;
|
||||
import java.util.Optional;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Convert;
|
||||
import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.IdClass;
|
||||
import javax.persistence.Transient;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.LocalDate;
|
||||
|
||||
/**
|
||||
* Datastore entity for tracking RDE revisions.
|
||||
|
@ -35,32 +50,67 @@ import org.joda.time.DateTime;
|
|||
* flag is included in the generated XML.
|
||||
*/
|
||||
@Entity
|
||||
public final class RdeRevision extends ImmutableObject {
|
||||
@javax.persistence.Entity
|
||||
@IdClass(RdeRevisionId.class)
|
||||
public final class RdeRevision extends BackupGroupRoot implements DatastoreEntity, SqlEntity {
|
||||
|
||||
/** String triplet of tld, date, and mode, e.g. {@code soy_2015-09-01_full}. */
|
||||
@Id
|
||||
String id;
|
||||
@Id @Transient String id;
|
||||
|
||||
@javax.persistence.Id @Ignore String tld;
|
||||
|
||||
@javax.persistence.Id @Ignore LocalDate date;
|
||||
|
||||
@javax.persistence.Id @Ignore RdeMode mode;
|
||||
|
||||
/**
|
||||
* Number of last revision successfully staged to GCS.
|
||||
*
|
||||
* <p>This values begins at zero upon object creation and thenceforth incremented transactionally.
|
||||
*/
|
||||
@Column(nullable = false)
|
||||
int revision;
|
||||
|
||||
/** Hibernate requires an empty constructor. */
|
||||
private RdeRevision() {}
|
||||
|
||||
public static RdeRevision create(
|
||||
String id, String tld, LocalDate date, RdeMode mode, int revision) {
|
||||
RdeRevision instance = new RdeRevision();
|
||||
instance.id = id;
|
||||
instance.tld = tld;
|
||||
instance.date = date;
|
||||
instance.mode = mode;
|
||||
instance.revision = revision;
|
||||
return instance;
|
||||
}
|
||||
|
||||
public int getRevision() {
|
||||
return revision;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<SqlEntity> toSqlEntities() {
|
||||
return ImmutableList.of(); // we don't care about RdeRevision history
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImmutableList<DatastoreEntity> toDatastoreEntities() {
|
||||
return ImmutableList.of(); // we don't care about RdeRevision history
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns next revision ID to use when staging a new deposit file for the given triplet.
|
||||
*
|
||||
* @return {@code 0} for first deposit generation and {@code >0} for resends
|
||||
*/
|
||||
public static int getNextRevision(String tld, DateTime date, RdeMode mode) {
|
||||
RdeRevision object =
|
||||
ofy().load().type(RdeRevision.class).id(makePartialName(tld, date, mode)).now();
|
||||
return object == null ? 0 : object.revision + 1;
|
||||
String id = makePartialName(tld, date, mode);
|
||||
RdeRevisionId sqlKey = RdeRevisionId.create(tld, date.toLocalDate(), mode);
|
||||
Key<RdeRevision> ofyKey = Key.create(RdeRevision.class, id);
|
||||
Optional<RdeRevision> revisionOptional =
|
||||
tm().maybeLoad(VKey.create(RdeRevision.class, sqlKey, ofyKey));
|
||||
return revisionOptional.map(rdeRevision -> rdeRevision.revision + 1).orElse(0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -76,17 +126,56 @@ public final class RdeRevision extends ImmutableObject {
|
|||
checkArgument(revision >= 0, "Negative revision: %s", revision);
|
||||
String triplet = makePartialName(tld, date, mode);
|
||||
tm().assertInTransaction();
|
||||
RdeRevision object = ofy().load().type(RdeRevision.class).id(triplet).now();
|
||||
RdeRevisionId sqlKey = RdeRevisionId.create(tld, date.toLocalDate(), mode);
|
||||
Key<RdeRevision> ofyKey = Key.create(RdeRevision.class, triplet);
|
||||
Optional<RdeRevision> revisionOptional =
|
||||
tm().maybeLoad(VKey.create(RdeRevision.class, sqlKey, ofyKey));
|
||||
if (revision == 0) {
|
||||
verify(object == null, "RdeRevision object already created: %s", object);
|
||||
revisionOptional.ifPresent(
|
||||
rdeRevision -> {
|
||||
throw new IllegalArgumentException(
|
||||
String.format(
|
||||
"RdeRevision object already created and revision 0 specified: %s",
|
||||
rdeRevision));
|
||||
});
|
||||
} else {
|
||||
verifyNotNull(object, "RDE revision object missing for %s?! revision=%s", triplet, revision);
|
||||
verify(object.revision == revision - 1,
|
||||
"RDE revision object should be at %s but was: %s", revision - 1, object);
|
||||
checkArgument(
|
||||
revisionOptional.isPresent(),
|
||||
"Couldn't find existing RDE revision %s when trying to save new revision %s",
|
||||
triplet,
|
||||
revision);
|
||||
checkArgument(
|
||||
revisionOptional.get().revision == revision - 1,
|
||||
"RDE revision object should be at revision %s but was: %s",
|
||||
revision - 1,
|
||||
revisionOptional.get());
|
||||
}
|
||||
RdeRevision object = RdeRevision.create(triplet, tld, date.toLocalDate(), mode, revision);
|
||||
tm().put(object);
|
||||
}
|
||||
|
||||
/** Class to represent the composite primary key of {@link RdeRevision} entity. */
|
||||
static class RdeRevisionId extends ImmutableObject implements Serializable {
|
||||
|
||||
String tld;
|
||||
|
||||
// Auto-conversion doesn't work for ID classes, we must specify @Column and @Convert
|
||||
@Column(columnDefinition = "date")
|
||||
@Convert(converter = LocalDateConverter.class)
|
||||
LocalDate date;
|
||||
|
||||
@Enumerated(EnumType.STRING)
|
||||
RdeMode mode;
|
||||
|
||||
/** Hibernate requires this default constructor. */
|
||||
private RdeRevisionId() {}
|
||||
|
||||
static RdeRevisionId create(String tld, LocalDate date, RdeMode mode) {
|
||||
RdeRevisionId instance = new RdeRevisionId();
|
||||
instance.tld = tld;
|
||||
instance.date = date;
|
||||
instance.mode = mode;
|
||||
return instance;
|
||||
}
|
||||
object = new RdeRevision();
|
||||
object.id = triplet;
|
||||
object.revision = revision;
|
||||
ofy().save().entity(object);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,6 +53,7 @@
|
|||
<class>google.registry.model.poll.PollMessage</class>
|
||||
<class>google.registry.model.poll.PollMessage$OneTime</class>
|
||||
<class>google.registry.model.poll.PollMessage$Autorenew</class>
|
||||
<class>google.registry.model.rde.RdeRevision</class>
|
||||
<class>google.registry.model.registrar.Registrar</class>
|
||||
<class>google.registry.model.registrar.RegistrarContact</class>
|
||||
<class>google.registry.model.registry.label.PremiumList</class>
|
||||
|
|
|
@ -15,118 +15,116 @@
|
|||
package google.registry.model.rde;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.model.ofy.ObjectifyService.ofy;
|
||||
import static google.registry.model.rde.RdeMode.FULL;
|
||||
import static google.registry.model.rde.RdeRevision.getNextRevision;
|
||||
import static google.registry.model.rde.RdeRevision.saveRevision;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import com.google.common.base.VerifyException;
|
||||
import google.registry.testing.AppEngineExtension;
|
||||
import google.registry.model.EntityTestCase;
|
||||
import google.registry.testing.DualDatabaseTest;
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.TestTemplate;
|
||||
|
||||
/** Unit tests for {@link RdeRevision}. */
|
||||
public class RdeRevisionTest {
|
||||
@DualDatabaseTest
|
||||
public class RdeRevisionTest extends EntityTestCase {
|
||||
|
||||
@RegisterExtension
|
||||
final AppEngineExtension appEngine =
|
||||
AppEngineExtension.builder().withDatastoreAndCloudSql().build();
|
||||
public RdeRevisionTest() {
|
||||
super(JpaEntityCoverageCheck.ENABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
@BeforeEach
|
||||
void beforeEach() {
|
||||
fakeClock.setTo(DateTime.parse("1984-12-18TZ"));
|
||||
}
|
||||
|
||||
@TestTemplate
|
||||
void testGetNextRevision_objectDoesntExist_returnsZero() {
|
||||
assertThat(getNextRevision("torment", DateTime.parse("1984-12-18TZ"), FULL)).isEqualTo(0);
|
||||
tm().transact(
|
||||
() -> assertThat(getNextRevision("torment", fakeClock.nowUtc(), FULL)).isEqualTo(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestTemplate
|
||||
void testGetNextRevision_objectExistsAtZero_returnsOne() {
|
||||
save("sorrow", DateTime.parse("1984-12-18TZ"), FULL, 0);
|
||||
assertThat(getNextRevision("sorrow", DateTime.parse("1984-12-18TZ"), FULL)).isEqualTo(1);
|
||||
save("sorrow", fakeClock.nowUtc(), FULL, 0);
|
||||
tm().transact(
|
||||
() -> assertThat(getNextRevision("sorrow", fakeClock.nowUtc(), FULL)).isEqualTo(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestTemplate
|
||||
void testSaveRevision_objectDoesntExist_newRevisionIsZero_nextRevIsOne() {
|
||||
tm().transact(() -> saveRevision("despondency", DateTime.parse("1984-12-18TZ"), FULL, 0));
|
||||
tm().transact(() -> saveRevision("despondency", fakeClock.nowUtc(), FULL, 0));
|
||||
tm().transact(
|
||||
() ->
|
||||
assertThat(getNextRevision("despondency", DateTime.parse("1984-12-18TZ"), FULL))
|
||||
.isEqualTo(1));
|
||||
assertThat(getNextRevision("despondency", fakeClock.nowUtc(), FULL)).isEqualTo(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestTemplate
|
||||
void testSaveRevision_objectDoesntExist_newRevisionIsOne_throwsVe() {
|
||||
VerifyException thrown =
|
||||
IllegalArgumentException thrown =
|
||||
assertThrows(
|
||||
VerifyException.class,
|
||||
() ->
|
||||
tm().transact(
|
||||
() ->
|
||||
saveRevision("despondency", DateTime.parse("1984-12-18TZ"), FULL, 1)));
|
||||
assertThat(thrown).hasMessageThat().contains("object missing");
|
||||
IllegalArgumentException.class,
|
||||
() -> tm().transact(() -> saveRevision("despondency", fakeClock.nowUtc(), FULL, 1)));
|
||||
assertThat(thrown)
|
||||
.hasMessageThat()
|
||||
.isEqualTo(
|
||||
"Couldn't find existing RDE revision despondency_1984-12-18_full "
|
||||
+ "when trying to save new revision 1");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestTemplate
|
||||
void testSaveRevision_objectExistsAtZero_newRevisionIsZero_throwsVe() {
|
||||
save("melancholy", DateTime.parse("1984-12-18TZ"), FULL, 0);
|
||||
VerifyException thrown =
|
||||
save("melancholy", fakeClock.nowUtc(), FULL, 0);
|
||||
IllegalArgumentException thrown =
|
||||
assertThrows(
|
||||
VerifyException.class,
|
||||
() ->
|
||||
tm().transact(
|
||||
() -> saveRevision("melancholy", DateTime.parse("1984-12-18TZ"), FULL, 0)));
|
||||
IllegalArgumentException.class,
|
||||
() -> tm().transact(() -> saveRevision("melancholy", fakeClock.nowUtc(), FULL, 0)));
|
||||
assertThat(thrown).hasMessageThat().contains("object already created");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestTemplate
|
||||
void testSaveRevision_objectExistsAtZero_newRevisionIsOne_nextRevIsTwo() {
|
||||
save("melancholy", DateTime.parse("1984-12-18TZ"), FULL, 0);
|
||||
tm().transact(() -> saveRevision("melancholy", DateTime.parse("1984-12-18TZ"), FULL, 1));
|
||||
tm().transact(
|
||||
() ->
|
||||
assertThat(getNextRevision("melancholy", DateTime.parse("1984-12-18TZ"), FULL))
|
||||
.isEqualTo(2));
|
||||
DateTime startOfDay = fakeClock.nowUtc().withTimeAtStartOfDay();
|
||||
save("melancholy", startOfDay, FULL, 0);
|
||||
fakeClock.advanceOneMilli();
|
||||
tm().transact(() -> saveRevision("melancholy", startOfDay, FULL, 1));
|
||||
tm().transact(() -> assertThat(getNextRevision("melancholy", startOfDay, FULL)).isEqualTo(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestTemplate
|
||||
void testSaveRevision_objectExistsAtZero_newRevisionIsTwo_throwsVe() {
|
||||
save("melancholy", DateTime.parse("1984-12-18TZ"), FULL, 0);
|
||||
VerifyException thrown =
|
||||
save("melancholy", fakeClock.nowUtc(), FULL, 0);
|
||||
IllegalArgumentException thrown =
|
||||
assertThrows(
|
||||
VerifyException.class,
|
||||
() ->
|
||||
tm().transact(
|
||||
() -> saveRevision("melancholy", DateTime.parse("1984-12-18TZ"), FULL, 2)));
|
||||
assertThat(thrown).hasMessageThat().contains("should be at 1 ");
|
||||
IllegalArgumentException.class,
|
||||
() -> tm().transact(() -> saveRevision("melancholy", fakeClock.nowUtc(), FULL, 2)));
|
||||
assertThat(thrown)
|
||||
.hasMessageThat()
|
||||
.contains("RDE revision object should be at revision 1 but was");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestTemplate
|
||||
void testSaveRevision_negativeRevision_throwsIae() {
|
||||
IllegalArgumentException thrown =
|
||||
assertThrows(
|
||||
IllegalArgumentException.class,
|
||||
() ->
|
||||
tm().transact(
|
||||
() ->
|
||||
saveRevision("melancholy", DateTime.parse("1984-12-18TZ"), FULL, -1)));
|
||||
() -> tm().transact(() -> saveRevision("melancholy", fakeClock.nowUtc(), FULL, -1)));
|
||||
assertThat(thrown).hasMessageThat().contains("Negative revision");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestTemplate
|
||||
void testSaveRevision_callerNotInTransaction_throwsIse() {
|
||||
IllegalStateException thrown =
|
||||
assertThrows(
|
||||
IllegalStateException.class,
|
||||
() -> saveRevision("frenzy", DateTime.parse("1984-12-18TZ"), FULL, 1));
|
||||
IllegalStateException.class, () -> saveRevision("frenzy", fakeClock.nowUtc(), FULL, 1));
|
||||
assertThat(thrown).hasMessageThat().contains("transaction");
|
||||
}
|
||||
|
||||
public static void save(String tld, DateTime date, RdeMode mode, int revision) {
|
||||
String triplet = RdeNamingUtils.makePartialName(tld, date, mode);
|
||||
RdeRevision object = new RdeRevision();
|
||||
object.id = triplet;
|
||||
object.revision = revision;
|
||||
ofy().saveWithoutBackup().entity(object).now();
|
||||
RdeRevision object = RdeRevision.create(triplet, tld, date.toLocalDate(), mode, revision);
|
||||
tm().transact(() -> tm().put(object));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ import google.registry.model.history.ContactHistoryTest;
|
|||
import google.registry.model.history.DomainHistoryTest;
|
||||
import google.registry.model.history.HostHistoryTest;
|
||||
import google.registry.model.poll.PollMessageTest;
|
||||
import google.registry.model.rde.RdeRevisionTest;
|
||||
import google.registry.model.registry.RegistryLockDaoTest;
|
||||
import google.registry.model.registry.RegistryTest;
|
||||
import google.registry.model.registry.label.ReservedListSqlDaoTest;
|
||||
|
@ -86,6 +87,7 @@ import org.junit.runner.RunWith;
|
|||
LockDaoTest.class,
|
||||
PollMessageTest.class,
|
||||
PremiumListDaoTest.class,
|
||||
RdeRevisionTest.class,
|
||||
RegistrarDaoTest.class,
|
||||
RegistryTest.class,
|
||||
ReservedListSqlDaoTest.class,
|
||||
|
|
|
@ -523,6 +523,7 @@ class google.registry.model.poll.PollMessage$OneTime {
|
|||
}
|
||||
class google.registry.model.rde.RdeRevision {
|
||||
@Id java.lang.String id;
|
||||
google.registry.model.UpdateAutoTimestamp updateTimestamp;
|
||||
int revision;
|
||||
}
|
||||
class google.registry.model.registrar.Registrar {
|
||||
|
|
|
@ -261,19 +261,19 @@ td.section {
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="property_name">generated on</td>
|
||||
<td class="property_value">2020-10-19 18:49:22.440463</td>
|
||||
<td class="property_value">2020-10-21 14:40:52.221127</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="property_name">last flyway file</td>
|
||||
<td id="lastFlywayFile" class="property_value">V65__local_date_date_type.sql</td>
|
||||
<td id="lastFlywayFile" class="property_value">V66__create_rde_revision.sql</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<svg viewbox="0.00 0.00 3506.90 2635.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="erDiagram" style="overflow: hidden; width: 100%; height: 800px"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 2631.5)">
|
||||
<svg viewbox="0.00 0.00 3506.90 2739.50" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="erDiagram" style="overflow: hidden; width: 100%; height: 800px"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 2735.5)">
|
||||
<title>SchemaCrawler_Diagram</title>
|
||||
<polygon fill="white" stroke="transparent" points="-4,4 -4,-2631.5 3502.9,-2631.5 3502.9,4 -4,4" />
|
||||
<polygon fill="white" stroke="transparent" points="-4,4 -4,-2735.5 3502.9,-2735.5 3502.9,4 -4,4" />
|
||||
<text text-anchor="start" x="3230.4" y="-29.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
generated by
|
||||
</text>
|
||||
|
@ -284,7 +284,7 @@ td.section {
|
|||
generated on
|
||||
</text>
|
||||
<text text-anchor="start" x="3313.4" y="-10.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
2020-10-19 18:49:22.440463
|
||||
2020-10-21 14:40:52.221127
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="3225.9,-4 3225.9,-44 3490.9,-44 3490.9,-4 3225.9,-4" /> <!-- allocationtoken_a08ccbef -->
|
||||
<g id="node1" class="node">
|
||||
|
@ -521,7 +521,7 @@ td.section {
|
|||
fk_billing_cancellation_billing_recurrence_id
|
||||
</text>
|
||||
</g> <!-- registrar_6e1503e3 -->
|
||||
<g id="node23" class="node">
|
||||
<g id="node24" class="node">
|
||||
<title>registrar_6e1503e3</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="9.5,-1102 9.5,-1121 116.5,-1121 116.5,-1102 9.5,-1102" />
|
||||
<text text-anchor="start" x="11.5" y="-1108.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
|
@ -2203,280 +2203,316 @@ td.section {
|
|||
<text text-anchor="start" x="2969" y="-1918.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
fko0gw90lpo1tuee56l0nb6y6g5
|
||||
</text>
|
||||
</g> <!-- rderevision_83396864 -->
|
||||
<g id="node23" class="node">
|
||||
<title>rderevision_83396864</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3231,-2030 3231,-2049 3361,-2049 3361,-2030 3231,-2030" />
|
||||
<text text-anchor="start" x="3233" y="-2036.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.RdeRevision
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3361,-2030 3361,-2049 3439,-2049 3439,-2030 3361,-2030" />
|
||||
<text text-anchor="start" x="3400" y="-2035.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="3233" y="-2017.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
tld
|
||||
</text>
|
||||
<text text-anchor="start" x="3317" y="-2016.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3363" y="-2016.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<text text-anchor="start" x="3233" y="-1998.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
mode
|
||||
</text>
|
||||
<text text-anchor="start" x="3317" y="-1997.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3363" y="-1997.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<text text-anchor="start" x="3233" y="-1979.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
"date"
|
||||
</text>
|
||||
<text text-anchor="start" x="3317" y="-1978.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3363" y="-1978.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
date not null
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="3230,-1972 3230,-2050 3440,-2050 3440,-1972 3230,-1972" />
|
||||
</g> <!-- registrarpoc_ab47054d -->
|
||||
<g id="node24" class="node">
|
||||
<g id="node25" class="node">
|
||||
<title>registrarpoc_ab47054d</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3232,-2030 3232,-2049 3364,-2049 3364,-2030 3232,-2030" />
|
||||
<text text-anchor="start" x="3234" y="-2036.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3232,-2134 3232,-2153 3364,-2153 3364,-2134 3232,-2134" />
|
||||
<text text-anchor="start" x="3234" y="-2140.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.RegistrarPoc
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3364,-2030 3364,-2049 3438,-2049 3438,-2030 3364,-2030" />
|
||||
<text text-anchor="start" x="3399" y="-2035.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3364,-2134 3364,-2153 3438,-2153 3438,-2134 3364,-2134" />
|
||||
<text text-anchor="start" x="3399" y="-2139.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="3234" y="-2017.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="3234" y="-2121.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
email_address
|
||||
</text>
|
||||
<text text-anchor="start" x="3345" y="-2016.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3345" y="-2120.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3366" y="-2016.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3366" y="-2120.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<text text-anchor="start" x="3234" y="-1997.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3234" y="-2101.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
gae_user_id
|
||||
</text>
|
||||
<text text-anchor="start" x="3345" y="-1997.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3345" y="-2101.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3366" y="-1997.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3366" y="-2101.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text
|
||||
</text>
|
||||
<text text-anchor="start" x="3234" y="-1979.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="3234" y="-2083.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
registrar_id
|
||||
</text>
|
||||
<text text-anchor="start" x="3345" y="-1978.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3345" y="-2082.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3366" y="-1978.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3366" y="-2082.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="3231,-1972 3231,-2050 3439,-2050 3439,-1972 3231,-1972" />
|
||||
<polygon fill="none" stroke="#888888" points="3231,-2076 3231,-2154 3439,-2154 3439,-2076 3231,-2076" />
|
||||
</g> <!-- registrylock_ac88663e -->
|
||||
<g id="node25" class="node">
|
||||
<g id="node26" class="node">
|
||||
<title>registrylock_ac88663e</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3213,-2191 3213,-2210 3347,-2210 3347,-2191 3213,-2191" />
|
||||
<text text-anchor="start" x="3215" y="-2197.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3213,-2295 3213,-2314 3347,-2314 3347,-2295 3213,-2295" />
|
||||
<text text-anchor="start" x="3215" y="-2301.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.RegistryLock
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3347,-2191 3347,-2210 3457,-2210 3457,-2191 3347,-2191" />
|
||||
<text text-anchor="start" x="3418" y="-2196.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3347,-2295 3347,-2314 3457,-2314 3457,-2295 3347,-2295" />
|
||||
<text text-anchor="start" x="3418" y="-2300.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="3215" y="-2178.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="3215" y="-2282.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
revision_id
|
||||
</text>
|
||||
<text text-anchor="start" x="3334" y="-2177.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3334" y="-2281.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3349" y="-2177.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3349" y="-2281.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
bigserial not null
|
||||
</text>
|
||||
<text text-anchor="start" x="3334" y="-2158.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3334" y="-2262.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3349" y="-2158.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3349" y="-2262.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
auto-incremented
|
||||
</text>
|
||||
<text text-anchor="start" x="3215" y="-2139.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3215" y="-2243.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
registrar_id
|
||||
</text>
|
||||
<text text-anchor="start" x="3334" y="-2139.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3334" y="-2243.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3349" y="-2139.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3349" y="-2243.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<text text-anchor="start" x="3215" y="-2120.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3215" y="-2224.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
repo_id
|
||||
</text>
|
||||
<text text-anchor="start" x="3334" y="-2120.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3334" y="-2224.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3349" y="-2120.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3349" y="-2224.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<text text-anchor="start" x="3215" y="-2101.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3215" y="-2205.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
verification_code
|
||||
</text>
|
||||
<text text-anchor="start" x="3334" y="-2101.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3334" y="-2205.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3349" y="-2101.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3349" y="-2205.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<text text-anchor="start" x="3215" y="-2082.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3215" y="-2186.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
relock_revision_id
|
||||
</text>
|
||||
<text text-anchor="start" x="3334" y="-2082.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3334" y="-2186.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3349" y="-2082.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3349" y="-2186.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
int8
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="3212,-2076.5 3212,-2211.5 3458,-2211.5 3458,-2076.5 3212,-2076.5" />
|
||||
<polygon fill="none" stroke="#888888" points="3212,-2180.5 3212,-2315.5 3458,-2315.5 3458,-2180.5 3212,-2180.5" />
|
||||
</g> <!-- registrylock_ac88663e->registrylock_ac88663e -->
|
||||
<g id="edge58" class="edge">
|
||||
<title>registrylock_ac88663e:w->registrylock_ac88663e:e</title>
|
||||
<path fill="none" stroke="black" d="M3197.38,-2095.25C3146.34,-2134.77 3160.96,-2233.5 3335,-2233.5 3515.72,-2233.5 3524.55,-2213.9 3466.46,-2186.31" />
|
||||
<polygon fill="black" stroke="black" points="3204.4,-2091.1 3215.29,-2089.87 3208.7,-2088.55 3213,-2086 3213,-2086 3213,-2086 3208.7,-2088.55 3210.71,-2082.13 3204.4,-2091.1 3204.4,-2091.1" />
|
||||
<ellipse fill="none" stroke="black" cx="3200.95" cy="-2093.14" rx="4" ry="4" />
|
||||
<polygon fill="black" stroke="black" points="3455.84,-2186.96 3459.98,-2177.86 3461.8,-2178.69 3457.66,-2187.79 3455.84,-2186.96" />
|
||||
<polyline fill="none" stroke="black" points="3457,-2182 3461.55,-2184.07 " />
|
||||
<polygon fill="black" stroke="black" points="3460.39,-2189.04 3464.53,-2179.94 3466.35,-2180.77 3462.21,-2189.87 3460.39,-2189.04" />
|
||||
<polyline fill="none" stroke="black" points="3461.55,-2184.07 3466.1,-2186.15 " />
|
||||
<text text-anchor="start" x="3253.5" y="-2237.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<path fill="none" stroke="black" d="M3197.38,-2199.25C3146.34,-2238.77 3160.96,-2337.5 3335,-2337.5 3515.72,-2337.5 3524.55,-2317.9 3466.46,-2290.31" />
|
||||
<polygon fill="black" stroke="black" points="3204.4,-2195.1 3215.29,-2193.87 3208.7,-2192.55 3213,-2190 3213,-2190 3213,-2190 3208.7,-2192.55 3210.71,-2186.13 3204.4,-2195.1 3204.4,-2195.1" />
|
||||
<ellipse fill="none" stroke="black" cx="3200.95" cy="-2197.14" rx="4" ry="4" />
|
||||
<polygon fill="black" stroke="black" points="3455.84,-2290.96 3459.98,-2281.86 3461.8,-2282.69 3457.66,-2291.79 3455.84,-2290.96" />
|
||||
<polyline fill="none" stroke="black" points="3457,-2286 3461.55,-2288.07 " />
|
||||
<polygon fill="black" stroke="black" points="3460.39,-2293.04 3464.53,-2283.94 3466.35,-2284.77 3462.21,-2293.87 3460.39,-2293.04" />
|
||||
<polyline fill="none" stroke="black" points="3461.55,-2288.07 3466.1,-2290.15 " />
|
||||
<text text-anchor="start" x="3253.5" y="-2341.3" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
fk2lhcwpxlnqijr96irylrh1707
|
||||
</text>
|
||||
</g> <!-- reservedentry_1a7b8520 -->
|
||||
<g id="node26" class="node">
|
||||
<g id="node27" class="node">
|
||||
<title>reservedentry_1a7b8520</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3227,-2309 3227,-2328 3370,-2328 3370,-2309 3227,-2309" />
|
||||
<text text-anchor="start" x="3229" y="-2315.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3227,-2413 3227,-2432 3370,-2432 3370,-2413 3227,-2413" />
|
||||
<text text-anchor="start" x="3229" y="-2419.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.ReservedEntry
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3370,-2309 3370,-2328 3444,-2328 3444,-2309 3370,-2309" />
|
||||
<text text-anchor="start" x="3405" y="-2314.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3370,-2413 3370,-2432 3444,-2432 3444,-2413 3370,-2413" />
|
||||
<text text-anchor="start" x="3405" y="-2418.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="3229" y="-2296.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="3229" y="-2400.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
revision_id
|
||||
</text>
|
||||
<text text-anchor="start" x="3342" y="-2295.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3342" y="-2399.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3372" y="-2295.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3372" y="-2399.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
int8 not null
|
||||
</text>
|
||||
<text text-anchor="start" x="3229" y="-2277.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="3229" y="-2381.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
domain_label
|
||||
</text>
|
||||
<text text-anchor="start" x="3342" y="-2276.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3342" y="-2380.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3372" y="-2276.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3372" y="-2380.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="3225.5,-2270.5 3225.5,-2329.5 3444.5,-2329.5 3444.5,-2270.5 3225.5,-2270.5" />
|
||||
<polygon fill="none" stroke="#888888" points="3225.5,-2374.5 3225.5,-2433.5 3444.5,-2433.5 3444.5,-2374.5 3225.5,-2374.5" />
|
||||
</g> <!-- reservedlist_b97c3f1c -->
|
||||
<g id="node27" class="node">
|
||||
<g id="node28" class="node">
|
||||
<title>reservedlist_b97c3f1c</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="2650.5,-2308 2650.5,-2327 2783.5,-2327 2783.5,-2308 2650.5,-2308" />
|
||||
<text text-anchor="start" x="2652.5" y="-2314.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="2650.5,-2412 2650.5,-2431 2783.5,-2431 2783.5,-2412 2650.5,-2412" />
|
||||
<text text-anchor="start" x="2652.5" y="-2418.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.ReservedList
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="2783.5,-2308 2783.5,-2327 2893.5,-2327 2893.5,-2308 2783.5,-2308" />
|
||||
<text text-anchor="start" x="2854.5" y="-2313.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="2783.5,-2412 2783.5,-2431 2893.5,-2431 2893.5,-2412 2783.5,-2412" />
|
||||
<text text-anchor="start" x="2854.5" y="-2417.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="2652.5" y="-2295.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="2652.5" y="-2399.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
revision_id
|
||||
</text>
|
||||
<text text-anchor="start" x="2752.5" y="-2294.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="2752.5" y="-2398.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="2785.5" y="-2294.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="2785.5" y="-2398.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
bigserial not null
|
||||
</text>
|
||||
<text text-anchor="start" x="2752.5" y="-2275.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="2752.5" y="-2379.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="2785.5" y="-2275.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="2785.5" y="-2379.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
auto-incremented
|
||||
</text>
|
||||
<text text-anchor="start" x="2652.5" y="-2256.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="2652.5" y="-2360.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
name
|
||||
</text>
|
||||
<text text-anchor="start" x="2752.5" y="-2256.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="2752.5" y="-2360.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="2785.5" y="-2256.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="2785.5" y="-2360.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="2649,-2250 2649,-2328 2894,-2328 2894,-2250 2649,-2250" />
|
||||
<polygon fill="none" stroke="#888888" points="2649,-2354 2649,-2432 2894,-2432 2894,-2354 2649,-2354" />
|
||||
</g> <!-- reservedentry_1a7b8520->reservedlist_b97c3f1c -->
|
||||
<g id="edge59" class="edge">
|
||||
<title>reservedentry_1a7b8520:w->reservedlist_b97c3f1c:e</title>
|
||||
<path fill="none" stroke="black" d="M3207.6,-2299C3078.53,-2299 3037.5,-2299 2904.65,-2299" />
|
||||
<polygon fill="black" stroke="black" points="3216,-2299 3226,-2303.5 3221,-2299 3226,-2299 3226,-2299 3226,-2299 3221,-2299 3226,-2294.5 3216,-2299 3216,-2299" />
|
||||
<ellipse fill="none" stroke="black" cx="3212" cy="-2299" rx="4" ry="4" />
|
||||
<polygon fill="black" stroke="black" points="2895.5,-2304 2895.5,-2294 2897.5,-2294 2897.5,-2304 2895.5,-2304" />
|
||||
<polyline fill="none" stroke="black" points="2894.5,-2299 2899.5,-2299 " />
|
||||
<polygon fill="black" stroke="black" points="2900.5,-2304 2900.5,-2294 2902.5,-2294 2902.5,-2304 2900.5,-2304" />
|
||||
<polyline fill="none" stroke="black" points="2899.5,-2299 2904.5,-2299 " />
|
||||
<text text-anchor="start" x="2970.5" y="-2302.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<path fill="none" stroke="black" d="M3207.6,-2403C3078.53,-2403 3037.5,-2403 2904.65,-2403" />
|
||||
<polygon fill="black" stroke="black" points="3216,-2403 3226,-2407.5 3221,-2403 3226,-2403 3226,-2403 3226,-2403 3221,-2403 3226,-2398.5 3216,-2403 3216,-2403" />
|
||||
<ellipse fill="none" stroke="black" cx="3212" cy="-2403" rx="4" ry="4" />
|
||||
<polygon fill="black" stroke="black" points="2895.5,-2408 2895.5,-2398 2897.5,-2398 2897.5,-2408 2895.5,-2408" />
|
||||
<polyline fill="none" stroke="black" points="2894.5,-2403 2899.5,-2403 " />
|
||||
<polygon fill="black" stroke="black" points="2900.5,-2408 2900.5,-2398 2902.5,-2398 2902.5,-2408 2900.5,-2408" />
|
||||
<polyline fill="none" stroke="black" points="2899.5,-2403 2904.5,-2403 " />
|
||||
<text text-anchor="start" x="2970.5" y="-2406.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
fkgq03rk0bt1hb915dnyvd3vnfc
|
||||
</text>
|
||||
</g> <!-- spec11threatmatch_a61228a6 -->
|
||||
<g id="node28" class="node">
|
||||
<g id="node29" class="node">
|
||||
<title>spec11threatmatch_a61228a6</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3192,-2452 3192,-2471 3368,-2471 3368,-2452 3192,-2452" />
|
||||
<text text-anchor="start" x="3194" y="-2458.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3192,-2556 3192,-2575 3368,-2575 3368,-2556 3192,-2556" />
|
||||
<text text-anchor="start" x="3194" y="-2562.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.Spec11ThreatMatch
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3368,-2452 3368,-2471 3478,-2471 3478,-2452 3368,-2452" />
|
||||
<text text-anchor="start" x="3439" y="-2457.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3368,-2556 3368,-2575 3478,-2575 3478,-2556 3368,-2556" />
|
||||
<text text-anchor="start" x="3439" y="-2561.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="3194" y="-2439.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="3194" y="-2543.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
id
|
||||
</text>
|
||||
<text text-anchor="start" x="3315" y="-2438.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3315" y="-2542.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3370" y="-2438.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3370" y="-2542.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
bigserial not null
|
||||
</text>
|
||||
<text text-anchor="start" x="3315" y="-2419.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3315" y="-2523.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3370" y="-2419.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3370" y="-2523.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
auto-incremented
|
||||
</text>
|
||||
<text text-anchor="start" x="3194" y="-2400.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3194" y="-2504.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
check_date
|
||||
</text>
|
||||
<text text-anchor="start" x="3315" y="-2400.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3315" y="-2504.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3370" y="-2400.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3370" y="-2504.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
date not null
|
||||
</text>
|
||||
<text text-anchor="start" x="3194" y="-2381.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3194" y="-2485.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
registrar_id
|
||||
</text>
|
||||
<text text-anchor="start" x="3315" y="-2381.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3315" y="-2485.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3370" y="-2381.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3370" y="-2485.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<text text-anchor="start" x="3194" y="-2362.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3194" y="-2466.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
tld
|
||||
</text>
|
||||
<text text-anchor="start" x="3315" y="-2362.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3315" y="-2466.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3370" y="-2362.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3370" y="-2466.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="3191,-2356 3191,-2472 3479,-2472 3479,-2356 3191,-2356" />
|
||||
<polygon fill="none" stroke="#888888" points="3191,-2460 3191,-2576 3479,-2576 3479,-2460 3191,-2460" />
|
||||
</g> <!-- tld_f1fa57e2 -->
|
||||
<g id="node29" class="node">
|
||||
<g id="node30" class="node">
|
||||
<title>tld_f1fa57e2</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3262,-2518 3262,-2537 3335,-2537 3335,-2518 3262,-2518" />
|
||||
<text text-anchor="start" x="3264" y="-2524.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3262,-2622 3262,-2641 3335,-2641 3335,-2622 3262,-2622" />
|
||||
<text text-anchor="start" x="3264" y="-2628.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.Tld
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3335,-2518 3335,-2537 3409,-2537 3409,-2518 3335,-2518" />
|
||||
<text text-anchor="start" x="3370" y="-2523.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3335,-2622 3335,-2641 3409,-2641 3409,-2622 3335,-2622" />
|
||||
<text text-anchor="start" x="3370" y="-2627.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="3264" y="-2505.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="3264" y="-2609.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
tld_name
|
||||
</text>
|
||||
<text text-anchor="start" x="3329" y="-2504.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3329" y="-2608.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3337" y="-2504.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3337" y="-2608.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
text not null
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="3260.5,-2498 3260.5,-2538 3409.5,-2538 3409.5,-2498 3260.5,-2498" />
|
||||
<polygon fill="none" stroke="#888888" points="3260.5,-2602 3260.5,-2642 3409.5,-2642 3409.5,-2602 3260.5,-2602" />
|
||||
</g> <!-- transaction_d50389d4 -->
|
||||
<g id="node30" class="node">
|
||||
<g id="node31" class="node">
|
||||
<title>transaction_d50389d4</title>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3218,-2603 3218,-2622 3343,-2622 3343,-2603 3218,-2603" />
|
||||
<text text-anchor="start" x="3220" y="-2609.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3218,-2707 3218,-2726 3343,-2726 3343,-2707 3218,-2707" />
|
||||
<text text-anchor="start" x="3220" y="-2713.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
public.Transaction
|
||||
</text>
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3343,-2603 3343,-2622 3453,-2622 3453,-2603 3343,-2603" />
|
||||
<text text-anchor="start" x="3414" y="-2608.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<polygon fill="#ebcef2" stroke="transparent" points="3343,-2707 3343,-2726 3453,-2726 3453,-2707 3343,-2707" />
|
||||
<text text-anchor="start" x="3414" y="-2712.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
[table]
|
||||
</text>
|
||||
<text text-anchor="start" x="3220" y="-2590.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
<text text-anchor="start" x="3220" y="-2694.8" font-family="Helvetica,sans-Serif" font-weight="bold" font-style="italic" font-size="14.00">
|
||||
id
|
||||
</text>
|
||||
<text text-anchor="start" x="3287" y="-2589.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3287" y="-2693.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3345" y="-2589.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3345" y="-2693.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
bigserial not null
|
||||
</text>
|
||||
<text text-anchor="start" x="3287" y="-2570.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3287" y="-2674.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
</text>
|
||||
<text text-anchor="start" x="3345" y="-2570.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
<text text-anchor="start" x="3345" y="-2674.8" font-family="Helvetica,sans-Serif" font-size="14.00">
|
||||
auto-incremented
|
||||
</text>
|
||||
<polygon fill="none" stroke="#888888" points="3216.5,-2564.5 3216.5,-2623.5 3453.5,-2623.5 3453.5,-2564.5 3216.5,-2564.5" />
|
||||
<polygon fill="none" stroke="#888888" points="3216.5,-2668.5 3216.5,-2727.5 3453.5,-2727.5 3453.5,-2668.5 3216.5,-2668.5" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
@ -4774,6 +4810,56 @@ td.section {
|
|||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<table>
|
||||
<caption style="background-color: #EBCEF2;"> <span id="rderevision_83396864" class="caption_name">public.RdeRevision</span> <span class="caption_description">[table]</span>
|
||||
</caption>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth"><b><i>tld</i></b></td>
|
||||
<td class="minwidth">text not null</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth"><b><i>mode</i></b></td>
|
||||
<td class="minwidth">text not null</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth"><b><i>"date"</i></b></td>
|
||||
<td class="minwidth">date not null</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" class="section">Primary Key</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="name">RdeRevision_pkey</td>
|
||||
<td class="description right">[primary key]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">tld</td>
|
||||
<td class="minwidth"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">mode</td>
|
||||
<td class="minwidth"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="spacer"></td>
|
||||
<td class="minwidth">"date"</td>
|
||||
<td class="minwidth"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<table>
|
||||
<caption style="background-color: #EBCEF2;"> <span id="registrar_6e1503e3" class="caption_name">public.Registrar</span> <span class="caption_description">[table]</span>
|
||||
</caption>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -63,3 +63,4 @@ V62__disable_key_auto_generation_for_history_tables.sql
|
|||
V63__add_schema_for_ds_data.sql
|
||||
V64__transfer_history_columns.sql
|
||||
V65__local_date_date_type.sql
|
||||
V66__create_rde_revision.sql
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
-- Copyright 2020 The Nomulus Authors. All Rights Reserved.
|
||||
--
|
||||
-- Licensed under the Apache License, Version 2.0 (the "License");
|
||||
-- you may not use this file except in compliance with the License.
|
||||
-- You may obtain a copy of the License at
|
||||
--
|
||||
-- http://www.apache.org/licenses/LICENSE-2.0
|
||||
--
|
||||
-- Unless required by applicable law or agreed to in writing, software
|
||||
-- distributed under the License is distributed on an "AS IS" BASIS,
|
||||
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
-- See the License for the specific language governing permissions and
|
||||
-- limitations under the License.
|
||||
|
||||
CREATE TABLE "RdeRevision" (
|
||||
tld TEXT NOT NULL,
|
||||
mode TEXT NOT NULL,
|
||||
date date NOT NULL,
|
||||
update_timestamp timestamptz,
|
||||
revision int4 NOT NULL,
|
||||
PRIMARY KEY (tld, mode, date)
|
||||
);
|
|
@ -494,6 +494,15 @@
|
|||
primary key (revision_id)
|
||||
);
|
||||
|
||||
create table "RdeRevision" (
|
||||
date date not null,
|
||||
mode text not null,
|
||||
tld text not null,
|
||||
update_timestamp timestamptz,
|
||||
revision int4 not null,
|
||||
primary key (date, mode, tld)
|
||||
);
|
||||
|
||||
create table "Registrar" (
|
||||
registrar_id text not null,
|
||||
allowed_tlds text[],
|
||||
|
|
|
@ -682,6 +682,19 @@ CREATE SEQUENCE public."PremiumList_revision_id_seq"
|
|||
ALTER SEQUENCE public."PremiumList_revision_id_seq" OWNED BY public."PremiumList".revision_id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: RdeRevision; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE TABLE public."RdeRevision" (
|
||||
tld text NOT NULL,
|
||||
mode text NOT NULL,
|
||||
date date NOT NULL,
|
||||
update_timestamp timestamp with time zone,
|
||||
revision integer NOT NULL
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: Registrar; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
@ -1166,6 +1179,14 @@ ALTER TABLE ONLY public."PremiumList"
|
|||
ADD CONSTRAINT "PremiumList_pkey" PRIMARY KEY (revision_id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: RdeRevision RdeRevision_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public."RdeRevision"
|
||||
ADD CONSTRAINT "RdeRevision_pkey" PRIMARY KEY (tld, mode, date);
|
||||
|
||||
|
||||
--
|
||||
-- Name: RegistrarPoc RegistrarPoc_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue