Prisma.sql vs Prisma $queryRaw diff
Can someone guide me what is the main benefit of
Is below approach corrct?
Prisma.sqlPrisma.sql and main differences with $queryRaw$queryRaw? I could not find the Prisma.sql in official docs.Is below approach corrct?
export async function aggregateOpenPullRequestsInPeriod(
req: AnalyticsRequest,
dbClient: PrismaClient,
): Promise<
DistributionPeriodStats<{ opened: number; closed: number; merged: number }>[]
> {
const { start_date, end_date, aggregate_by, repository_names } = req;
const rawStartingTimeColumn = Prisma.raw('created_at');
const rawClosingTimeColumn = Prisma.raw('closed_at');
const rawMergedTimeColumn = Prisma.raw('merged_at');
const dateSeriesQuery = generateDateSeriesQuery(
start_date,
end_date,
aggregate_by,
);
const query = Prisma.sql` --> here
WITH date_series AS (
${dateSeriesQuery}
)
SELECT
ds.bucket_start AS start,
ds.bucket_end AS end,
JSON_BUILD_OBJECT(
'opened', COALESCE(SUM(CASE WHEN pr.${rawStartingTimeColumn} >= ds.bucket_start AND pr.${rawStartingTimeColumn} < ds.bucket_end + INTERVAL '1 day' THEN 1 ELSE 0 END), 0),
'closed', COALESCE(SUM(CASE WHEN pr.${rawClosingTimeColumn} >= ds.bucket_start AND pr.${rawClosingTimeColumn} < ds.bucket_end + INTERVAL '1 day' THEN 1 ELSE 0 END), 0),
'merged', COALESCE(SUM(CASE WHEN pr.${rawMergedTimeColumn} >= ds.bucket_start AND pr.${rawMergedTimeColumn} < ds.bucket_end + INTERVAL '1 day' THEN 1 ELSE 0 END), 0)
) AS value
FROM
date_series ds
LEFT JOIN "PullRequest" pr ON pr.repository_id IS NOT NULL
JOIN "Repository" r ON pr.repository_id = r.repository_id
WHERE
r.repository_name IN (${Prisma.join(repository_names)})
GROUP BY
ds.bucket_start, ds.bucket_end
ORDER BY
ds.bucket_start;
`;
const result = await dbClient.$queryRaw<
DistributionPeriodStats<{
opened: number;
closed: number;
merged: number;
}>[]
>(query);export async function aggregateOpenPullRequestsInPeriod(
req: AnalyticsRequest,
dbClient: PrismaClient,
): Promise<
DistributionPeriodStats<{ opened: number; closed: number; merged: number }>[]
> {
const { start_date, end_date, aggregate_by, repository_names } = req;
const rawStartingTimeColumn = Prisma.raw('created_at');
const rawClosingTimeColumn = Prisma.raw('closed_at');
const rawMergedTimeColumn = Prisma.raw('merged_at');
const dateSeriesQuery = generateDateSeriesQuery(
start_date,
end_date,
aggregate_by,
);
const query = Prisma.sql` --> here
WITH date_series AS (
${dateSeriesQuery}
)
SELECT
ds.bucket_start AS start,
ds.bucket_end AS end,
JSON_BUILD_OBJECT(
'opened', COALESCE(SUM(CASE WHEN pr.${rawStartingTimeColumn} >= ds.bucket_start AND pr.${rawStartingTimeColumn} < ds.bucket_end + INTERVAL '1 day' THEN 1 ELSE 0 END), 0),
'closed', COALESCE(SUM(CASE WHEN pr.${rawClosingTimeColumn} >= ds.bucket_start AND pr.${rawClosingTimeColumn} < ds.bucket_end + INTERVAL '1 day' THEN 1 ELSE 0 END), 0),
'merged', COALESCE(SUM(CASE WHEN pr.${rawMergedTimeColumn} >= ds.bucket_start AND pr.${rawMergedTimeColumn} < ds.bucket_end + INTERVAL '1 day' THEN 1 ELSE 0 END), 0)
) AS value
FROM
date_series ds
LEFT JOIN "PullRequest" pr ON pr.repository_id IS NOT NULL
JOIN "Repository" r ON pr.repository_id = r.repository_id
WHERE
r.repository_name IN (${Prisma.join(repository_names)})
GROUP BY
ds.bucket_start, ds.bucket_end
ORDER BY
ds.bucket_start;
`;
const result = await dbClient.$queryRaw<
DistributionPeriodStats<{
opened: number;
closed: number;
merged: number;
}>[]
>(query);