import { LOGICAL_DATASETS } from "./datasets.mjs"; import { LogicalDataset } from "gscdump/query/plan"; import { SQL } from "drizzle-orm"; import { Dimension, InternalFilter, Metric } from "gscdump/query"; interface SqlFragmentsConfig { schema: Record; datasetToTableKey: Record; metricCast: 'REAL' | 'DOUBLE'; regexPredicate: (expr: SQL, pattern: string, negate: boolean) => SQL; tableLabel: string; includeSiteId: boolean; includeSearchType?: boolean; urlToPathExpr?: (col: string) => string; /** * Override the FROM-clause table reference. Default emits the bound drizzle * table (e.g. `"pages"`). Parquet/R2 adapter overrides this to emit * `read_parquet({{FILES}}, ...) AS "${tk}"` so the runSQL pipeline can swap * in an object-key list while column refs (`"pages"."url"`) still resolve * against the alias. */ tableRef?: (tableKey: TableKey) => SQL; /** * Where `queryCanonical` comes from when compiling fact-table reads. * * - `queryDim` (default): LEFT JOIN a query dimension relation and derive * `COALESCE(query_dim.query_canonical, fact.query)`. * - `column`: read a `query_canonical` column from the primary relation. This * is reserved for derived canonical rollup relations, not fact tables. */ queryCanonicalSource?: 'queryDim' | 'column'; /** Relation used for the query-dimension join when `queryCanonicalSource=queryDim`. */ queryDimTableRef?: () => SQL; /** When true, also joins query_dim on site_id (SQLite/D1 dimension table). */ queryDimSiteScoped?: boolean; } interface SqlFragments { METRIC_NAMES: Metric[]; DIM_COLUMN_MAP: Record>; isMetricDimension: (dim: string) => dim is Metric; tableKeyForDataset: (dataset: LogicalDataset) => TableKey; dimColumn: (dim: Dimension, table: TableKey) => string; inferTable: (dimensions: Dimension[], filterDims?: Dimension[]) => TableKey; urlToPathExpr: (col: string) => string; colRef: (tableKey: TableKey, colName: string) => SQL; tableRef: (tableKey: TableKey) => SQL; fromSql: (tableKey: TableKey, options?: { queryCanonical?: boolean; }) => SQL; dateColRef: (tableKey: TableKey) => SQL; siteIdColRef?: (tableKey: TableKey) => SQL; searchTypeColRef?: (tableKey: TableKey) => SQL; dimExprSql: (dim: Dimension, tableKey: TableKey) => SQL; metricSql: (metric: Metric, tableKey: TableKey) => SQL; havingPredicates: (filters: InternalFilter[], tableKey: TableKey) => SQL[]; prefilterPredicates: (filters: InternalFilter[], tableKey: TableKey) => SQL[]; dimensionPredicates: (filters: InternalFilter[], tableKey: TableKey) => SQL[]; topLevelPredicate: (filters: InternalFilter[], tableKey: TableKey) => SQL | undefined; } declare function createSqlFragments(config: SqlFragmentsConfig): SqlFragments; export { SqlFragments, SqlFragmentsConfig, createSqlFragments };