import type { DialectFieldList } from '../dialect'; import type { TurtleDef, QueryResultDef, ResultStructMetadataDef, ResultMetadataDef, PipeSegment, QuerySegment, QueryFieldDef, SegmentFieldDef } from './malloy_types'; import { AndChain } from './utils'; import type { JoinInstance } from './join_instance'; import { QueryStruct, QueryField } from './query_node'; import { StageWriter } from './stage_writer'; import type { FieldInstance } from './field_instance'; import { FieldInstanceResult, FieldInstanceResultRoot } from './field_instance'; interface OutputPipelinedSQL { sqlFieldName: string; pipelineSQL: string; } type StageGroupMaping = { fromGroup: number; toGroup: number; }; type StageOutputContext = { sql: string[]; lateralJoinSQLExpressions: string[]; dimensionIndexes: number[]; fieldIndex: number; groupsAggregated: StageGroupMaping[]; outputPipelinedSQL: OutputPipelinedSQL[]; }; /** Query builder object. */ export declare class QueryQuery extends QueryField { fieldDef: TurtleDef; firstSegment: PipeSegment; prepared: boolean; maxDepth: number; maxGroupSet: number; rootResult: FieldInstanceResultRoot; resultStage: string | undefined; stageWriter: StageWriter | undefined; isJoinedSubquery: boolean; protected structRefToQueryStruct: (name: string) => QueryStruct | undefined; constructor(fieldDef: TurtleDef, parent: QueryStruct, stageWriter: StageWriter | undefined, isJoinedSubquery: boolean, lookupStruct: (name: string) => QueryStruct | undefined); static makeQuery(fieldDef: TurtleDef, parentStruct: QueryStruct, stageWriter: StageWriter | undefined, isJoinedSubquery: boolean, lookupStruct: (name: string) => QueryStruct | undefined): QueryQuery; inNestedPipeline(): boolean; expandField(f: QueryFieldDef): { as: string; field: QueryField; }; private addDependantPath; private dependenciesFromFieldUsage; getSegmentFields(resultStruct: FieldInstanceResult): SegmentFieldDef[]; private getDrillExpression; expandFields(resultStruct: FieldInstanceResult): void; /** * Recursively walks the input QueryStruct tree and sets up lazy expression * compilation for all records with computed expressions, so that records with * expression values have the correct context for evaluating them if needed. * * @param resultStruct - The FieldInstanceResult containing compilation context * @param source - The QueryStruct to traverse (initially the query's parent/input) */ expandRecordExpressions(resultStruct: FieldInstanceResult, source: QueryStruct): void; generateSQLFilters(resultStruct: FieldInstanceResult, which: 'where' | 'having'): AndChain; prepare(_stageWriter: StageWriter | undefined): void; private findJoins; addAlwaysJoins(): void; getResultMetadata(fi: FieldInstance): ResultStructMetadataDef | ResultMetadataDef | undefined; /** returns a fields and primary key of a struct for this query */ getResultStructDef(resultStruct?: FieldInstanceResult, isRoot?: boolean): QueryResultDef; getStructSourceSQL(qs: QueryStruct, stageWriter: StageWriter): string; generateSQLJoinBlock(stageWriter: StageWriter, ji: JoinInstance, depth: number): string; generateSQLPassthroughKeys(qs: QueryStruct): string; generateSQLJoins(stageWriter: StageWriter): string; genereateSQLOrderBy(queryDef: QuerySegment, resultStruct: FieldInstanceResult): string; generateSimpleSQL(stageWriter: StageWriter): string; generatePipelinedStages(outputPipelinedSQL: OutputPipelinedSQL[], lastStageName: string, stageWriter: StageWriter): string; generateStage0Fields(resultSet: FieldInstanceResult, output: StageOutputContext, stageWriter: StageWriter): void; generateSQLWhereChildren(resultStruct: FieldInstanceResult): AndChain; generateSQLWhereTurtled(): string; generateSQLHavingLimit(stageWriter: StageWriter, lastStageName: string): string; generateSQLStage0(stageWriter: StageWriter): string; generateDepthNFields(depth: number, resultSet: FieldInstanceResult, output: StageOutputContext, stageWriter: StageWriter): void; generateSQLDepthN(depth: number, stageWriter: StageWriter, stageName: string): string; genereateSQLCombineTurtles(stageWriter: StageWriter, stage0Name: string): string; buildDialectFieldList(resultStruct: FieldInstanceResult): DialectFieldList; generateTurtleSQL(resultStruct: FieldInstanceResult, stageWriter: StageWriter, sqlFieldName: string, outputPipelinedSQL: OutputPipelinedSQL[]): string; generateTurtlePipelineSQL(fi: FieldInstanceResult, stageWriter: StageWriter, sourceSQLExpression: string): { structDef: QueryResultDef; pipeOut: any; repeatedResultType: "nested" | "inline_all_numbers" | "inline"; }; generateComplexSQL(stageWriter: StageWriter): string; generateSQL(stageWriter: StageWriter): string; generateSQLFromPipeline(stageWriter: StageWriter): { lastStageName: string; outputStruct: QueryResultDef; }; } export {};