PrismaP
Prisma13mo ago
2 replies
uralsmh

Prisma.sql vs Prisma $queryRaw diff

Can someone guide me what is the main benefit of Prisma.sql and main differences with $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);
Was this page helpful?