Defined in: packages/core/src/transformers/CTEComposer.ts:61
Composes edited CTEs back into a unified SQL query
Takes CTEs that were individually edited after decomposition and reconstructs them into a proper WITH clause structure. This completes the CTE debugging workflow:
- Use CTEQueryDecomposer to break down complex CTEs
- Edit individual CTEs to fix issues
- Use CTEComposer to reconstruct the unified query
Example
// After decomposing and editing CTEs
const composer = new CTEComposer({
preset: 'postgres',
validateSchema: true,
schema: { users: ['id', 'name', 'active'] }
});
const editedCTEs = [
{ name: 'base_data', query: 'select * from users where active = true' },
{ name: 'filtered_data', query: 'select * from base_data where region = "US"' }
];
const composedSQL = composer.compose(editedCTEs, 'select * from filtered_data');
// Dependencies are automatically analyzed and sorted
// Result: "with base_data as (...), filtered_data as (...) select * from filtered_data"
Constructors
Constructor
new CTEComposer(
options
):CTEComposer
Defined in: packages/core/src/transformers/CTEComposer.ts:71
Creates a new CTEComposer instance
Parameters
options
CTEComposerOptions
= {}
Configuration options extending SqlFormatterOptions
Returns
CTEComposer
Methods
compose()
compose(
editedCTEs
,rootQuery
):string
Defined in: packages/core/src/transformers/CTEComposer.ts:105
Compose edited CTEs and root query into a unified SQL query
This method:
- Extracts pure SELECT queries from edited CTEs (removes any WITH clauses)
- Builds a temporary query to analyze dependencies automatically
- Sorts CTEs by dependency order using topological sort
- Validates schema if options.validateSchema is enabled
- Applies formatter options for consistent output
- Constructs the final WITH clause with proper recursive handling
Parameters
editedCTEs
Array of edited CTEs with name and query only
rootQuery
string
The main query that uses the CTEs (without WITH clause)
Returns
string
Composed SQL query with properly structured WITH clause
Throws
Error if schema validation fails or circular dependencies are detected
Example
const editedCTEs = [
{ name: 'base_data', query: 'select * from users where active = true' },
{ name: 'filtered_data', query: 'select * from base_data where region = "US"' }
];
const result = composer.compose(editedCTEs, 'select count(*) from filtered_data');
// Dependencies automatically analyzed and sorted
// Result: "with base_data as (...), filtered_data as (...) select count(*) from filtered_data"