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"