Class CTEScope

All Implemented Interfaces:
IScope

public class CTEScope extends ListBasedScope
Scope for Common Table Expressions (WITH clause). Manages visibility of CTEs defined in a WITH clause.

Example:

 WITH
   cte1 AS (SELECT id, name FROM users),
   cte2 AS (SELECT * FROM cte1 WHERE id > 100)  -- can reference cte1
 SELECT * FROM cte2;  -- can reference both cte1 and cte2
 

Key features: - Multiple CTEs in same WITH clause - CTEs can reference earlier CTEs in the same WITH clause - Recursive CTE support (same CTE references itself) - CTEs are visible to the main query and to later CTEs

  • Constructor Details

  • Method Details

    • addCTE

      public void addCTE(String cteName, CTENamespace cteNamespace)
      Add a CTE to this scope. CTEs are added in order, allowing later CTEs to reference earlier ones.
      Parameters:
      cteName - the CTE name (alias)
      cteNamespace - the CTE namespace
    • hasCTE

      public boolean hasCTE(String cteName)
      Check if a CTE with the given name exists in this scope.
      Parameters:
      cteName - the CTE name to check
      Returns:
      true if CTE exists, false otherwise
    • getCTE

      public CTENamespace getCTE(String cteName)
      Get a CTE namespace by name.
      Parameters:
      cteName - the CTE name
      Returns:
      the CTENamespace, or null if not found
    • getAllCTEs

      Get all CTEs in this scope.
      Returns:
      list of all CTE namespaces in definition order
    • getCTECount

      public int getCTECount()
      Get the number of CTEs in this scope.
      Returns:
      CTE count
    • resolveTable

      public INamespace resolveTable(String tableName)
      Resolve a table name, checking CTEs first before delegating to parent. This allows CTEs to shadow real tables.
      Specified by:
      resolveTable in interface IScope
      Overrides:
      resolveTable in class ListBasedScope
      Parameters:
      tableName - the table name to resolve
      Returns:
      the namespace for the CTE or table, or null if not found
    • hasRecursiveCTE

      public boolean hasRecursiveCTE()
      Check if this scope contains a recursive CTE. A recursive CTE is one that references itself in its definition.
      Returns:
      true if any CTE in this scope is recursive
    • getRecursiveCTEs

      Get all recursive CTEs in this scope.
      Returns:
      list of recursive CTE namespaces
    • getCTEList

      public TCTEList getCTEList()
    • toString

      public String toString()
      Overrides:
      toString in class ListBasedScope