T
TanStack5w ago
fair-rose

unique index does not throw DuplicateKeyError

Maybe I'm misunderstanding how it should work but I'm trying to handle duplicates on the client to faster feedback. I have added an index to my collection and it correctly deduplicates the data, however my insert just fails silently now
ratelimitOverrides.createIndex((row) => [row.namespaceId, row.identifier], {
name: 'unique_identifier_per_namespace',
options: {
unique: true,
},
})
ratelimitOverrides.createIndex((row) => [row.namespaceId, row.identifier], {
name: 'unique_identifier_per_namespace',
options: {
unique: true,
},
})
and when submitting the form:
try {
collection.ratelimitOverrides.insert({...});
} catch (error) {
if (error instanceof DuplicateKeyError) {
setError("identifier", { type: "custom", message: "Identifier already exists" });
} else {
console.error(error)
}

}

try {
collection.ratelimitOverrides.insert({...});
} catch (error) {
if (error instanceof DuplicateKeyError) {
setError("identifier", { type: "custom", message: "Identifier already exists" });
} else {
console.error(error)
}

}

However this never throws, it just silently deduplicates on insert. It worked perfectly when I had a duplicate key in the collection, just not for indices
2 Replies
fair-rose
fair-roseOP5w ago
GitHub
db/packages/db/src/collection.ts at 7d813be190f983e6dd91e5cbda3c1ff...
A reactive client store for building super fast apps - TanStack/db
fair-rose
fair-roseOP5w ago
collection.ratelimitOverrides.forEach((override) => {
if (override.namespaceId === namespaceId && override.identifier === values.identifier) {
throw new DuplicateKeyError(override.id);
}
});
collection.ratelimitOverrides.insert({ .. });
collection.ratelimitOverrides.forEach((override) => {
if (override.namespaceId === namespaceId && override.identifier === values.identifier) {
throw new DuplicateKeyError(override.id);
}
});
collection.ratelimitOverrides.insert({ .. });
this workaround works, at least for small collections

Did you find this page helpful?