-
Alexander Polyankin authoredAlexander Polyankin authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
query.ts 3.21 KiB
import * as ML from "cljs/metabase.lib.js";
import type {
CardType,
DatabaseId,
DatasetQuery,
TableId,
} from "metabase-types/api";
import type {
CardMetadata,
Clause,
ClauseType,
ColumnMetadata,
Join,
MetadataProvider,
MetricMetadata,
Query,
SegmentMetadata,
TableMetadata,
} from "./types";
export function fromLegacyQuery(
databaseId: DatabaseId | null,
metadataProvider: MetadataProvider,
datasetQuery: DatasetQuery,
): Query {
return ML.query(databaseId, metadataProvider, datasetQuery);
}
/**
* Use this in combination with Lib.metadataProvider(databaseId, legacyMetadata) and
Lib.tableOrCardMetadata(metadataProvider, tableOrCardId);
*/
export function queryFromTableOrCardMetadata(
metadataProvider: MetadataProvider,
tableOrCardMetadata: TableMetadata | CardMetadata,
): Query {
return ML.query(metadataProvider, tableOrCardMetadata);
}
export function toLegacyQuery(query: Query): DatasetQuery {
return ML.legacy_query(query);
}
export function withDifferentTable(query: Query, tableId: TableId): Query {
return ML.with_different_table(query, tableId);
}
export function suggestedName(query: Query): string {
return ML.suggestedName(query);
}
export function stageCount(query: Query): number {
return ML.stage_count(query);
}
export function stageIndexes(query: Query): number[] {
return Array.from(
{ length: stageCount(query) },
(_, stageIndex) => stageIndex,
);
}
export const hasClauses = (query: Query, stageIndex: number): boolean => {
return ML.has_clauses(query, stageIndex);
};
export function appendStage(query: Query): Query {
return ML.append_stage(query);
}
export function dropStage(query: Query): Query {
return ML.drop_stage(query);
}
export function dropEmptyStages(query: Query): Query {
return ML.drop_empty_stages(query);
}
export function ensureFilterStage(query: Query): Query {
return ML.ensure_filter_stage(query);
}
export function removeClause(
query: Query,
stageIndex: number,
targetClause: Clause | Join,
): Query {
return ML.remove_clause(query, stageIndex, targetClause);
}
export function replaceClause(
query: Query,
stageIndex: number,
targetClause: Clause | Join,
newClause: Clause | ColumnMetadata | MetricMetadata | SegmentMetadata | Join,
): Query {
return ML.replace_clause(query, stageIndex, targetClause, newClause);
}
export function swapClauses(
query: Query,
stageIndex: number,
sourceClause: Clause,
targetClause: Clause,
): Query {
return ML.swap_clauses(query, stageIndex, sourceClause, targetClause);
}
export function sourceTableOrCardId(query: Query): TableId | null {
return ML.source_table_or_card_id(query);
}
export function canRun(query: Query, cardType: CardType): boolean {
return ML.can_run(query, cardType);
}
export function canSave(query: Query, cardType: CardType): boolean {
return ML.can_save(query, cardType);
}
export function asReturned(
query: Query,
stageIndex: number,
): { query: Query; stageIndex: number } {
return ML.as_returned(query, stageIndex);
}
export function previewQuery(
query: Query,
stageIndex: number,
clauseType: ClauseType,
clauseIndex: number | null,
): Query | null {
return ML.preview_query(query, stageIndex, clauseType, clauseIndex);
}