diff --git a/src/server/index.ts b/src/server/index.ts index bcc0e48..e056850 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -128,7 +128,7 @@ export type { WithoutSystemFields, WithOptionalSystemFields, SystemIndexes, - IndexTiebreakerFields, + IndexTiebreakerField, } from "./system_fields.js"; export { httpRouter, HttpRouter, ROUTABLE_HTTP_METHODS } from "./router.js"; export type { RoutableMethod } from "./router.js"; diff --git a/src/server/schema.test.ts b/src/server/schema.test.ts index 44d6fbd..2e3c8f3 100644 --- a/src/server/schema.test.ts +++ b/src/server/schema.test.ts @@ -432,17 +432,11 @@ describe("DataModelFromSchemaDefinition", () => { | "property1" | "property2"; type ExpectedIndexes = { - by_property1: ["property1", "_creationTime", "_id"]; - by_property1_property2: [ - "property1", - "property2", - "_creationTime", - "_id", - ]; + by_property1: ["property1", "_creationTime"]; + by_property1_property2: ["property1", "property2", "_creationTime"]; - // System indexes - by_creation_time: ["_creationTime", "_id"]; - by_id: ["_id"]; + // System index + by_creation_time: ["_creationTime"]; }; type ExpectedDataModel = { table: { diff --git a/src/server/schema.ts b/src/server/schema.ts index ae0a680..f7e25e1 100644 --- a/src/server/schema.ts +++ b/src/server/schema.ts @@ -38,7 +38,7 @@ import { } from "../server/data_model.js"; import { IdField, - IndexTiebreakerFields, + IndexTiebreakerField, SystemFields, SystemIndexes, } from "../server/system_fields.js"; @@ -200,7 +200,7 @@ export class TableDefinition< Indexes & Record< IndexName, - [FirstFieldPath, ...RestFieldPaths, ...IndexTiebreakerFields] + [FirstFieldPath, ...RestFieldPaths, IndexTiebreakerField] > >, SearchIndexes, diff --git a/src/server/system_fields.ts b/src/server/system_fields.ts index 865531a..2a40175 100644 --- a/src/server/system_fields.ts +++ b/src/server/system_fields.ts @@ -46,15 +46,16 @@ export type WithOptionalSystemFields = Expand< * @public */ export type SystemIndexes = { - // Note `db.get(id)` is simpler and equivalent to a query on `by_id`. - // Unless the query is being built dynamically, or doing manual pagination. - by_id: ["_id"]; + // We have a system index `by_id` but developers should never have a use + // for querying it (`db.get(id)` is always simpler). + // by_id: ["_id"]; - by_creation_time: ["_creationTime", "_id"]; + by_creation_time: ["_creationTime"]; }; /** - * Convex automatically appends "_creationTime" and "_id" to the end of every index to break ties if all other fields are identical. + * Convex automatically appends "_creationTime" to the end of every index to + * break ties if all of the other fields are identical. * @public */ -export type IndexTiebreakerFields = ["_creationTime", "_id"]; +export type IndexTiebreakerField = "_creationTime";