8000 feat: support limits for scheduled deliveries by pimmey · Pull Request #15393 · lightdash/lightdash · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

feat: support limits for scheduled deliveries #15393

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion packages/backend/src/scheduler/SchedulerTask.ts
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,8 @@ export default class SchedulerTask {
const csvForChartPromises =
chartTileUuidsWithChartUuids.map(
async ({ chartUuid }) => {
const chartLimit =
getSchedulerCsvLimit(csvOptions);
const query =
await this.asyncQueryService.executeAsyncDashboardChartQuery(
{
Expand All @@ -524,7 +526,7 @@ export default class SchedulerTask {
dashboardUuid,
dashboardFilters,
dashboardSorts: [],
// todo: support limit arg
limit: chartLimit,
},
);
const chart =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1816,6 +1816,7 @@ export class AsyncQueryService extends ProjectService {
dateZoom,
context,
invalidateCache,
limit,
}: ExecuteAsyncDashboardChartQueryArgs): Promise<ApiExecuteAsyncDashboardChartQueryResults> {
if (!isUserWithOrg(user)) {
throw new ForbiddenError('User is not part of an organization');
Expand Down Expand Up @@ -1898,11 +1899,21 @@ export class AsyncQueryService extends ProjectService {
: savedChart.metricQuery.sorts,
};

// Apply limit override if provided in the request
// For unlimited results (null), use Number.MAX_SAFE_INTEGER
const metricQueryWithLimit =
limit !== undefined
? {
...metricQueryWithDashboardOverrides,
limit: limit ?? MAX_SAFE_INTEGER,
}
: metricQueryWithDashboardOverrides;

const exploreDimensions = getDimensions(explore);

const metricQueryDimensions = [
...metricQueryWithDashboardOverrides.dimensions,
...(metricQueryWithDashboardOverrides.customDimensions ?? []),
...metricQueryWithLimit.dimensions,
...(metricQueryWithLimit.customDimensions ?? []),
];

const xAxisField = isCartesianChartConfig(savedChart.chartConfig.config)
Expand All @@ -1920,7 +1931,7 @@ export class AsyncQueryService extends ProjectService {
);

if (hasADateDimension) {
metricQueryWithDashboardOverrides.metadata = {
metricQueryWithLimit.metadata = {
hasADateDimension: {
name: hasADateDimension.name,
label: hasADateDimension.label,
Expand All @@ -1936,6 +1947,7 @@ export class AsyncQueryService extends ProjectService {
dashboardFilters,
dashboardSorts,
dateZoom,
limit,
};

const queryTags: RunQueryTags = {
Expand All @@ -1959,7 +1971,7 @@ export class AsyncQueryService extends ProjectService {

const { sql, fields } = await this.prepareMetricQueryAsyncQueryArgs({
user,
metricQuery: metricQueryWithDashboardOverrides,
metricQuery: metricQueryWithLimit,
explore,
dateZoom,
warehouseClient: warehouseConnection.warehouseClient,
Expand All @@ -1970,7 +1982,7 @@ export class AsyncQueryService extends ProjectService {
user,
projectUuid,
explore,
metricQuery: metricQueryWithDashboardOverrides,
metricQuery: metricQueryWithLimit,
context,
queryTags,
invalidateCache,
Expand All @@ -1987,7 +1999,7 @@ export class AsyncQueryService extends ProjectService {
queryUuid,
cacheMetadata,
appliedDashboardFilters,
metricQuery: metricQueryWithDashboardOverrides,
metricQuery: metricQueryWithLimit,
fields,
};
}
Expand Down
1 change: 1 addition & 0 deletions packages/backend/src/services/AsyncQueryService/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ export type ExecuteAsyncDashboardChartQueryArgs = CommonAsyncQueryArgs & {
dashboardFilters: DashboardFilters;
dashboardSorts: SortField[];
dateZoom?: DateZoom;
limit?: number | null | undefined;
};

export type ExecuteAsyncUnderlyingDataQueryArgs = CommonAsyncQueryArgs & {
Expand Down
7 changes: 1 addition & 6 deletions packages/common/src/types/api/paginatedQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,6 @@ export type ExecuteAsyncSavedChartRequestParams =
CommonPaginatedQueryRequestParams & {
chartUuid: string;
versionUuid?: string;
/**
* Limit override for query execution:
* - undefined: use saved chart's original limit
* - null: no limit (unlimited results)
* - number: apply specific limit
*/
limit?: number | null | undefined;
};

Expand All @@ -48,6 +42,7 @@ export type ExecuteAsyncDashboardChartRequestParams =
dashboardFilters: DashboardFilters;
dashboardSorts: SortField[];
dateZoom?: DateZoom;
limit?: number | null | undefined;
};

export type ExecuteAsyncSqlQueryRequestParams =
Expand Down
Loading
0