Skip to content

Commit 7317967

Browse files
committed
address comments
1 parent 6af9867 commit 7317967

File tree

15 files changed

+240
-32
lines changed

15 files changed

+240
-32
lines changed

fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/SemanticException.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public enum ErrorCode {
5050
ORDERING_IS_OF_INCOMPATIBLE_TYPE(10, "The specified ordering expecting an argument of a primitive or record type, is invoked with an argument of an array type or other complex type."),
5151
ARGUMENT_TO_COLLATE_IS_OF_COMPLEX_TYPE(11, "The argument to a collate expression expecting an argument of a primitive type, is invoked with an argument of a complex type, e.g. an array or a record."),
5252
INVALID_ENUM_VALUE(12, "Invalid enum value for the enum type"),
53+
INVALID_UUID_VALUE(13, "Invalid UUID value for the UUID type"),
5354

5455
// insert, update, deletes
5556
UPDATE_TRANSFORM_AMBIGUOUS(1_000, "The transformations used in an UPDATE statement are ambiguous."),
@@ -109,7 +110,11 @@ public static void check(final boolean condition, @Nonnull final ErrorCode messa
109110

110111
public static void check(final boolean condition, @Nonnull final ErrorCode message, @Nonnull final String additionalErrorMessage) {
111112
if (!condition) {
112-
throw new SemanticException(message, additionalErrorMessage);
113+
fail(message, additionalErrorMessage);
113114
}
114115
}
116+
117+
public static void fail(@Nonnull final ErrorCode message, @Nonnull final String additionalErrorMessage) {
118+
throw new SemanticException(message, additionalErrorMessage);
119+
}
115120
}

fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/typing/Type.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,9 @@ default boolean isEnum() {
179179
}
180180

181181
/**
182-
* Checks whether a {@link Type} is {@link Enum}.
182+
* Checks whether a {@link Type} is {@link Uuid}.
183183
*
184-
* @return <code>true</code> if the {@link Type} is {@link Enum}, otherwise <code>false</code>.
184+
* @return <code>true</code> if the {@link Type} is {@link Uuid}, otherwise <code>false</code>.
185185
*/
186186
default boolean isUuid() {
187187
return false;
@@ -809,13 +809,22 @@ public static TypeCode fromProtobufType(@Nonnull final Descriptors.FieldDescript
809809
case FLOAT:
810810
return TypeCode.FLOAT;
811811
case INT64:
812+
case UINT64:
813+
case FIXED64:
814+
case SFIXED64:
815+
case SINT64:
812816
return TypeCode.LONG;
813817
case INT32:
818+
case FIXED32:
819+
case UINT32:
820+
case SFIXED32:
821+
case SINT32:
814822
return TypeCode.INT;
815823
case BOOL:
816824
return TypeCode.BOOLEAN;
817825
case STRING:
818826
return TypeCode.STRING;
827+
case GROUP:
819828
case ENUM:
820829
return TypeCode.ENUM;
821830
case MESSAGE:

fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/FieldValue.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,6 @@ private static Object unwrapPrimitive(@Nonnull Type type, @Nullable Object field
177177
} else if (type.getTypeCode() == Type.TypeCode.VERSION) {
178178
return FDBRecordVersion.fromBytes(((ByteString)fieldValue).toByteArray(), false);
179179
} else if (type.isUuid()) {
180-
if (fieldValue instanceof UUID) {
181-
return fieldValue;
182-
}
183180
Verify.verify(fieldValue instanceof DynamicMessage);
184181
final var message = (DynamicMessage) fieldValue;
185182
return new UUID((Long) message.getField(message.getDescriptorForType().findFieldByName("most_significant_bits")),

fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/MessageHelpers.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,8 @@ public static <M extends Message> Object transformMessage(@Nonnull final FDBReco
360360
} else {
361361
if (currentMessage != null) {
362362
final var currentFieldType = Verify.verifyNotNull(currentRecordType.getField(messageFieldDescriptor.getIndex())).getFieldType();
363+
// If the field type is a message, then it could be one of the special types, like UUID. We do not
364+
// want to get the value of that field as a 'runtime' type, hence we get the raw message itself.
363365
var fieldResult = messageFieldDescriptor.isRepeated() || !messageFieldDescriptor.getType().equals(Descriptors.FieldDescriptor.Type.MESSAGE) ?
364366
getFieldOnMessage(currentMessage, messageFieldDescriptor) : getFieldMessageOnMessage(currentMessage, messageFieldDescriptor);
365367
fieldResult = NullableArrayTypeUtils.unwrapIfArray(fieldResult, currentFieldType);

fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/PromoteValue.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ enum PhysicalOperator {
8989
NONE_TO_ARRAY(Type.TypeCode.NONE, Type.TypeCode.ARRAY, (descriptor, in) -> in),
9090
NULL_TO_ENUM(Type.TypeCode.NULL, Type.TypeCode.ENUM, (descriptor, in) -> null),
9191
STRING_TO_ENUM(Type.TypeCode.STRING, Type.TypeCode.ENUM, ((descriptor, in) -> stringToEnumValue((Descriptors.EnumDescriptor)descriptor, (String)in))),
92-
STRING_TO_UUID(Type.TypeCode.STRING, Type.TypeCode.UUID, ((descriptor, in) -> UUID.fromString((String) in)));
92+
STRING_TO_UUID(Type.TypeCode.STRING, Type.TypeCode.UUID, ((descriptor, in) -> stringToUuidValue((String) in)));
9393

9494
@Nonnull
9595
private static final Supplier<BiMap<PhysicalOperator, PPhysicalOperator>> protoEnumBiMapSupplier =
@@ -148,6 +148,17 @@ public static Descriptors.EnumValueDescriptor stringToEnumValue(Descriptors.Enum
148148
return maybeValue;
149149
}
150150

151+
@Nonnull
152+
public static UUID stringToUuidValue(String value) {
153+
try {
154+
return UUID.fromString(value);
155+
} catch (IllegalArgumentException ex) {
156+
SemanticException.fail(SemanticException.ErrorCode.INVALID_UUID_VALUE, value);
157+
}
158+
// won't happen
159+
return null;
160+
}
161+
151162
@Nonnull
152163
private static BiMap<PhysicalOperator, PPhysicalOperator> getProtoEnumBiMap() {
153164
return protoEnumBiMapSupplier.get();

fdb-record-layer-core/src/main/java/com/apple/foundationdb/record/query/plan/cascades/values/RelOpValue.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@
6969
import java.util.Objects;
7070
import java.util.Optional;
7171
import java.util.Set;
72-
import java.util.UUID;
7372
import java.util.function.BinaryOperator;
7473
import java.util.function.Supplier;
7574
import java.util.function.UnaryOperator;
@@ -735,33 +734,33 @@ private enum BinaryPhysicalOperator {
735734
GTE_UE(Comparisons.Type.GREATER_THAN_OR_EQUALS, Type.TypeCode.UNKNOWN, Type.TypeCode.ENUM, (l, r) -> null),
736735

737736
EQ_IDID(Comparisons.Type.EQUALS, Type.TypeCode.UUID, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.EQUALS, l, r)),
738-
EQ_IDS(Comparisons.Type.EQUALS, Type.TypeCode.UUID, Type.TypeCode.STRING, (l, r) -> Comparisons.evalComparison(Comparisons.Type.EQUALS, l, UUID.fromString((String) r))),
739-
EQ_SID(Comparisons.Type.EQUALS, Type.TypeCode.STRING, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.EQUALS, UUID.fromString((String) l), r)),
737+
EQ_IDS(Comparisons.Type.EQUALS, Type.TypeCode.UUID, Type.TypeCode.STRING, (l, r) -> Comparisons.evalComparison(Comparisons.Type.EQUALS, l, PromoteValue.PhysicalOperator.stringToUuidValue((String) r))),
738+
EQ_SID(Comparisons.Type.EQUALS, Type.TypeCode.STRING, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.EQUALS, PromoteValue.PhysicalOperator.stringToUuidValue((String) l), r)),
740739
EQ_UID(Comparisons.Type.EQUALS, Type.TypeCode.UNKNOWN, Type.TypeCode.UUID, (l, r) -> null),
741740
EQ_IDU(Comparisons.Type.EQUALS, Type.TypeCode.UUID, Type.TypeCode.UNKNOWN, (l, r) -> null),
742741
NEQ_IDID(Comparisons.Type.NOT_EQUALS, Type.TypeCode.UUID, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.NOT_EQUALS, l, r)),
743-
NEQ_IDS(Comparisons.Type.NOT_EQUALS, Type.TypeCode.UUID, Type.TypeCode.STRING, (l, r) -> Comparisons.evalComparison(Comparisons.Type.NOT_EQUALS, l, UUID.fromString((String) r))),
744-
NEQ_SID(Comparisons.Type.NOT_EQUALS, Type.TypeCode.STRING, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.NOT_EQUALS, UUID.fromString((String) l), r)),
742+
NEQ_IDS(Comparisons.Type.NOT_EQUALS, Type.TypeCode.UUID, Type.TypeCode.STRING, (l, r) -> Comparisons.evalComparison(Comparisons.Type.NOT_EQUALS, l, PromoteValue.PhysicalOperator.stringToUuidValue((String) r))),
743+
NEQ_SID(Comparisons.Type.NOT_EQUALS, Type.TypeCode.STRING, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.NOT_EQUALS, PromoteValue.PhysicalOperator.stringToUuidValue((String) l), r)),
745744
NEQ_UID(Comparisons.Type.NOT_EQUALS, Type.TypeCode.UNKNOWN, Type.TypeCode.UUID, (l, r) -> null),
746745
NEQ_IDU(Comparisons.Type.NOT_EQUALS, Type.TypeCode.UUID, Type.TypeCode.UNKNOWN, (l, r) -> null),
747746
LT_IDID(Comparisons.Type.LESS_THAN, Type.TypeCode.UUID, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.LESS_THAN, l, r)),
748-
LT_IDS(Comparisons.Type.LESS_THAN, Type.TypeCode.UUID, Type.TypeCode.STRING, (l, r) -> Comparisons.evalComparison(Comparisons.Type.LESS_THAN, l, UUID.fromString((String) r))),
749-
LT_SID(Comparisons.Type.LESS_THAN, Type.TypeCode.STRING, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.LESS_THAN, UUID.fromString((String) l), r)),
747+
LT_IDS(Comparisons.Type.LESS_THAN, Type.TypeCode.UUID, Type.TypeCode.STRING, (l, r) -> Comparisons.evalComparison(Comparisons.Type.LESS_THAN, l, PromoteValue.PhysicalOperator.stringToUuidValue((String) r))),
748+
LT_SID(Comparisons.Type.LESS_THAN, Type.TypeCode.STRING, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.LESS_THAN, PromoteValue.PhysicalOperator.stringToUuidValue((String) l), r)),
750749
LT_UID(Comparisons.Type.LESS_THAN, Type.TypeCode.UNKNOWN, Type.TypeCode.UUID, (l, r) -> null),
751750
LT_IDU(Comparisons.Type.LESS_THAN, Type.TypeCode.UUID, Type.TypeCode.UNKNOWN, (l, r) -> null),
752751
LTE_IDID(Comparisons.Type.LESS_THAN_OR_EQUALS, Type.TypeCode.UUID, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.LESS_THAN_OR_EQUALS, l, r)),
753-
LTE_IDS(Comparisons.Type.LESS_THAN_OR_EQUALS, Type.TypeCode.UUID, Type.TypeCode.STRING, (l, r) -> Comparisons.evalComparison(Comparisons.Type.LESS_THAN_OR_EQUALS, l, UUID.fromString((String) r))),
754-
LTE_SID(Comparisons.Type.LESS_THAN_OR_EQUALS, Type.TypeCode.STRING, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.LESS_THAN_OR_EQUALS, UUID.fromString((String) l), r)),
752+
LTE_IDS(Comparisons.Type.LESS_THAN_OR_EQUALS, Type.TypeCode.UUID, Type.TypeCode.STRING, (l, r) -> Comparisons.evalComparison(Comparisons.Type.LESS_THAN_OR_EQUALS, l, PromoteValue.PhysicalOperator.stringToUuidValue((String) r))),
753+
LTE_SID(Comparisons.Type.LESS_THAN_OR_EQUALS, Type.TypeCode.STRING, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.LESS_THAN_OR_EQUALS, PromoteValue.PhysicalOperator.stringToUuidValue((String) l), r)),
755754
LTE_UID(Comparisons.Type.LESS_THAN_OR_EQUALS, Type.TypeCode.UNKNOWN, Type.TypeCode.UUID, (l, r) -> null),
756755
LTE_IDU(Comparisons.Type.LESS_THAN_OR_EQUALS, Type.TypeCode.UUID, Type.TypeCode.UNKNOWN, (l, r) -> null),
757756
GT_IDID(Comparisons.Type.GREATER_THAN, Type.TypeCode.UUID, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.GREATER_THAN, l, r)),
758-
GT_IDS(Comparisons.Type.GREATER_THAN, Type.TypeCode.UUID, Type.TypeCode.STRING, (l, r) -> Comparisons.evalComparison(Comparisons.Type.GREATER_THAN, l, UUID.fromString((String) r))),
759-
GT_SID(Comparisons.Type.GREATER_THAN, Type.TypeCode.STRING, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.GREATER_THAN, UUID.fromString((String) l), r)),
757+
GT_IDS(Comparisons.Type.GREATER_THAN, Type.TypeCode.UUID, Type.TypeCode.STRING, (l, r) -> Comparisons.evalComparison(Comparisons.Type.GREATER_THAN, l, PromoteValue.PhysicalOperator.stringToUuidValue((String) r))),
758+
GT_SID(Comparisons.Type.GREATER_THAN, Type.TypeCode.STRING, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.GREATER_THAN, PromoteValue.PhysicalOperator.stringToUuidValue((String) l), r)),
760759
GT_UID(Comparisons.Type.GREATER_THAN, Type.TypeCode.UNKNOWN, Type.TypeCode.UUID, (l, r) -> null),
761760
GT_IDU(Comparisons.Type.GREATER_THAN, Type.TypeCode.UUID, Type.TypeCode.UNKNOWN, (l, r) -> null),
762761
GTE_IDID(Comparisons.Type.GREATER_THAN_OR_EQUALS, Type.TypeCode.UUID, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.GREATER_THAN_OR_EQUALS, l, r)),
763-
GTE_IDS(Comparisons.Type.GREATER_THAN_OR_EQUALS, Type.TypeCode.UUID, Type.TypeCode.STRING, (l, r) -> Comparisons.evalComparison(Comparisons.Type.GREATER_THAN_OR_EQUALS, l, UUID.fromString((String) r))),
764-
GTE_SID(Comparisons.Type.GREATER_THAN_OR_EQUALS, Type.TypeCode.STRING, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.GREATER_THAN_OR_EQUALS, UUID.fromString((String) l), r)),
762+
GTE_IDS(Comparisons.Type.GREATER_THAN_OR_EQUALS, Type.TypeCode.UUID, Type.TypeCode.STRING, (l, r) -> Comparisons.evalComparison(Comparisons.Type.GREATER_THAN_OR_EQUALS, l, PromoteValue.PhysicalOperator.stringToUuidValue((String) r))),
763+
GTE_SID(Comparisons.Type.GREATER_THAN_OR_EQUALS, Type.TypeCode.STRING, Type.TypeCode.UUID, (l, r) -> Comparisons.evalComparison(Comparisons.Type.GREATER_THAN_OR_EQUALS, PromoteValue.PhysicalOperator.stringToUuidValue((String) l), r)),
765764
GTE_UID(Comparisons.Type.GREATER_THAN_OR_EQUALS, Type.TypeCode.UNKNOWN, Type.TypeCode.UUID, (l, r) -> null),
766765
GTE_IDU(Comparisons.Type.GREATER_THAN_OR_EQUALS, Type.TypeCode.UUID, Type.TypeCode.UNKNOWN, (l, r) -> null),
767766
;

fdb-record-layer-core/src/test/java/com/apple/foundationdb/record/provider/foundationdb/FDBRecordStoreCrudTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,13 @@
2323
import com.apple.foundationdb.FDBError;
2424
import com.apple.foundationdb.FDBException;
2525
import com.apple.foundationdb.record.IsolationLevel;
26+
import com.apple.foundationdb.record.RecordMetaData;
2627
import com.apple.foundationdb.record.TestRecords1Proto;
2728
import com.apple.foundationdb.record.TestRecordsBytesProto;
29+
import com.apple.foundationdb.record.TestRecordsUuidProto;
2830
import com.apple.foundationdb.record.TestRecordsWithUnionProto;
2931
import com.apple.foundationdb.record.metadata.MetaDataException;
32+
import com.apple.foundationdb.record.metadata.expressions.TupleFieldsHelper;
3033
import com.apple.foundationdb.tuple.Tuple;
3134
import com.apple.test.Tags;
3235
import com.google.protobuf.Message;
@@ -35,6 +38,8 @@
3538
import org.junit.jupiter.api.parallel.Execution;
3639
import org.junit.jupiter.api.parallel.ExecutionMode;
3740

41+
import java.util.UUID;
42+
3843
import static org.hamcrest.MatcherAssert.assertThat;
3944
import static org.hamcrest.Matchers.instanceOf;
4045
import static org.hamcrest.core.Is.is;
@@ -162,6 +167,32 @@ public void writeByteString() throws Exception {
162167
}
163168
}
164169

170+
@Test
171+
public void writeUuid() {
172+
UUID uuid1 = UUID.fromString("710730ce-d9fd-417a-bb6e-27bcfefe3d4d");
173+
UUID uuid2 = UUID.fromString("03b9221a-e61b-4bee-8c47-34e1248ed273");
174+
175+
try (FDBRecordContext context = openContext()) {
176+
createOrOpenRecordStore(context, RecordMetaData.build(TestRecordsUuidProto.getDescriptor()));
177+
recordStore.saveRecord(TestRecordsUuidProto.UuidRecord.newBuilder()
178+
.setSecondary(TupleFieldsHelper.toProto(UUID.randomUUID())).setPkey(TupleFieldsHelper.toProto(uuid1)).setName("foo").build());
179+
recordStore.saveRecord(TestRecordsUuidProto.UuidRecord.newBuilder()
180+
.setSecondary(TupleFieldsHelper.toProto(UUID.randomUUID())).setPkey(TupleFieldsHelper.toProto(uuid2)).setName("foo").build());
181+
commit(context);
182+
}
183+
184+
try (FDBRecordContext context = openContext()) {
185+
createOrOpenRecordStore(context, RecordMetaData.build(TestRecordsUuidProto.getDescriptor()));
186+
FDBStoredRecord<Message> rec1 = recordStore.loadRecord(Tuple.from(uuid1));
187+
assertNotNull(rec1);
188+
TestRecordsUuidProto.UuidRecord.Builder myrec1 = TestRecordsUuidProto.UuidRecord.newBuilder();
189+
myrec1.mergeFrom(rec1.getRecord());
190+
assertEquals(uuid1, TupleFieldsHelper.fromProto(myrec1.getPkey()));
191+
assertEquals("foo", myrec1.getName());
192+
commit(context);
193+
}
194+
}
195+
165196
@Test
166197
public void writeNotUnionType() throws Exception {
167198
try (FDBRecordContext context = openContext()) {

fdb-record-layer-core/src/test/java/com/apple/foundationdb/record/provider/foundationdb/FDBRecordStoreUniqueIndexTest.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.apple.foundationdb.record.ScanProperties;
3636
import com.apple.foundationdb.record.TestRecords1Proto;
3737
import com.apple.foundationdb.record.TestRecordsBytesProto;
38+
import com.apple.foundationdb.record.TestRecordsUuidProto;
3839
import com.apple.foundationdb.record.TupleRange;
3940
import com.apple.foundationdb.record.metadata.Index;
4041
import com.apple.foundationdb.record.metadata.IndexAggregateFunction;
@@ -43,10 +44,11 @@
4344
import com.apple.foundationdb.record.metadata.IndexTypes;
4445
import com.apple.foundationdb.record.metadata.IndexValidator;
4546
import com.apple.foundationdb.record.metadata.Key;
47+
import com.apple.foundationdb.record.metadata.expressions.TupleFieldsHelper;
4648
import com.apple.foundationdb.record.provider.foundationdb.indexes.InvalidIndexEntry;
4749
import com.apple.foundationdb.record.provider.foundationdb.indexes.ValueIndexMaintainer;
48-
import com.apple.foundationdb.record.query.QueryToKeyMatcher;
4950
import com.apple.foundationdb.record.provider.foundationdb.keyspace.KeySpacePath;
51+
import com.apple.foundationdb.record.query.QueryToKeyMatcher;
5052
import com.apple.foundationdb.record.query.plan.QueryPlanner;
5153
import com.apple.foundationdb.record.test.TestKeySpace;
5254
import com.apple.foundationdb.record.util.pair.Pair;
@@ -71,6 +73,7 @@
7173
import java.util.List;
7274
import java.util.Random;
7375
import java.util.Set;
76+
import java.util.UUID;
7477
import java.util.concurrent.Callable;
7578
import java.util.concurrent.CompletableFuture;
7679
import java.util.concurrent.ExecutionException;
@@ -117,6 +120,22 @@ public void writeUniqueByteString() throws Exception {
117120
}
118121
}
119122

123+
@Test
124+
public void writeUniqueUuid() {
125+
final UUID nonUniqueUuid = UUID.fromString("710730ce-d9fd-417a-bb6e-27bcfefe3d4d");
126+
127+
try (FDBRecordContext context = openContext()) {
128+
createOrOpenRecordStore(context, RecordMetaData.build(TestRecordsUuidProto.getDescriptor()));
129+
recordStore.saveRecord(TestRecordsUuidProto.UuidRecord.newBuilder()
130+
.setPkey(TupleFieldsHelper.toProto(UUID.randomUUID())).setSecondary(TupleFieldsHelper.toProto(UUID.randomUUID())).setUnique(TupleFieldsHelper.toProto(nonUniqueUuid))
131+
.setName("foo").build());
132+
recordStore.saveRecord(TestRecordsUuidProto.UuidRecord.newBuilder()
133+
.setPkey(TupleFieldsHelper.toProto(UUID.randomUUID())).setSecondary(TupleFieldsHelper.toProto(UUID.randomUUID())).setUnique(TupleFieldsHelper.toProto(nonUniqueUuid))
134+
.setName("box").build());
135+
assertThrows(RecordIndexUniquenessViolation.class, () -> commit(context));
136+
}
137+
}
138+
120139
@Test
121140
public void asyncUniqueInserts() throws Exception {
122141
List<TestRecords1Proto.MySimpleRecord> records = new ArrayList<>();

0 commit comments

Comments
 (0)