Skip to main content

RawCountLoader

RawCountLoader is a Loader which is used to generate the rawCount for the number of rows in the database.

It's used by index based queries as well as custom ent queries.

RawCountLoaderFactory​

Public Facing LoaderFactory of RawCountLoader used to create new instances of RawCountLoader as needed.

API​

interface QueryCountOptions {
tableName: string;
groupCol?: string;
clause?: clause.Clause;
}
declare class RawCountLoader<K extends any> implements Loader<K, number> {
context?: Context | undefined;
constructor(options: QueryCountOptions, context?: Context | undefined);
}
declare class RawCountLoaderFactory implements LoaderFactory<ID, number> {
name: string;
constructor(options: QueryCountOptions);
createLoader(context?: Context): any;
}
  • tableName: relevant table in the database.
  • groupCol: column in the database that can be converted into an IN query when querying for multiple sources
  • clause: Clause instance for filtering.

Note that at least one of groupCol and clause must be provided.

Examples​

Given the following schema:

src/schema/todo_schema.ts
const TodoSchema = new EntSchema({
fields: {
text: StringType(),
completed: BooleanType({
index: true,
defaultValueOnCreate: () => {
return false;
},
}),
creatorID: UUIDType({
foreignKey: { schema: "Account", column: "id" },
}),
};
});
export default TodoSchema;

here are some examples:

  • count of open todos of a user. can be used to fetch multiple users at a time
const openTodosCountLoader = new RawCountLoaderFactory({
tableName: Todo.loaderOptions().tableName,
groupCol: "creator_id",
clause: query.Eq("completed", false),
});

generates query like this

SELECT count(1) as count FROM todos WHERE creator_id IN ($1, $2, $3) AND completed = $4 GROUP BY creator_id;
  • count of open todos of a user. cannot be used to fetch multiple users at a time
const openTodosCountLoader = new RawCountLoaderFactory({
tableName: Todo.loaderOptions().tableName,
clause: query.And(query.Eq("creator_id", user.id, query.Eq("completed", false)),
});

generates query like this

SELECT count(1) as count FROM todos WHERE creator_id = $1 AND completed = $2;
  • count of all todos of a user. can be used to fetch multiple users at a time
const allTodosCountLoader = new RawCountLoaderFactory({
tableName: Todo.loaderOptions().tableName,
groupCol: "creator_id",
});

generates query like this

SELECT count(1) as count FROM todos WHERE creator_id IN ($1, $2, $3) GROUP BY creator_id;
  • count of all todos of a user. cannot be used to fetch multiple users at a time
const allTodosCountLoader = new RawCountLoaderFactory({
tableName: Todo.loaderOptions().tableName,
clause: query.Eq("creator_id", user.id),
});

generates query like this

SELECT count(1) as count FROM todos WHERE creator_id = $1;