Skip to content
# Class: CTEComposer

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:

  1. Use CTEQueryDecomposer to break down complex CTEs
  2. Edit individual CTEs to fix issues
  3. Use CTEComposer to reconstruct the unified query

Example ​

typescript
// 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:

  1. Extracts pure SELECT queries from edited CTEs (removes any WITH clauses)
  2. Builds a temporary query to analyze dependencies automatically
  3. Sorts CTEs by dependency order using topological sort
  4. Validates schema if options.validateSchema is enabled
  5. Applies formatter options for consistent output
  6. Constructs the final WITH clause with proper recursive handling

Parameters ​

editedCTEs ​

EditedCTE[]

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 ​

typescript
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"

Released under the MIT License.