Class SubqueryNamespace
Object
gudusoft.gsqlparser.resolver2.namespace.AbstractNamespace
gudusoft.gsqlparser.resolver2.namespace.SubqueryNamespace
- All Implemented Interfaces:
INamespace
Namespace representing a subquery.
Provides columns from the subquery's SELECT list.
Example:
FROM (SELECT id, name FROM users) AS t
^^^^^^^^^^^^^^^^^^^^^^^^
SubqueryNamespace exposes columns: id, name
-
Field Summary
Fields inherited from class gudusoft.gsqlparser.resolver2.namespace.AbstractNamespace
columnSources, columnSourcesWithRefs, guessColumnStrategy, nameMatcher, node, referenceTraceabilityEnabled, validated -
Constructor Summary
ConstructorsConstructorDescriptionSubqueryNamespace(TSelectSqlStatement subquery, String alias) SubqueryNamespace(TSelectSqlStatement subquery, String alias, INameMatcher nameMatcher) SubqueryNamespace(TSelectSqlStatement subquery, String alias, INameMatcher nameMatcher, boolean fromTableFunction) -
Method Summary
Modifier and TypeMethodDescriptionbooleanaddInferredColumn(String columnName, double confidence, String evidence) Add an inferred column to this namespace.protected voidSubclasses override this to perform actual validation logic.Get all final physical tables this namespace depends on.Get a display name for this namespace (for debugging/error messages)Get the final physical table this namespace represents.Get all columns that were inferred (not from SELECT list directly).Get the underlying SELECT statement for this namespace.Get the TTable that this namespace is associated with.Get the TSQLEnv used for metadata lookup.Get the first star column (TResultColumn) from this subquery's SELECT list.booleanCheck if this subquery has an unqualified star with multiple tables.Check if a column exists in this namespace.booleanCheck if this namespace contains a star column (SELECT *).booleanReturns true if this namespace was created from a TABLE function's subquery.resolveColumn(String columnName) Resolve a column name to its source.resolveColumnInFromScope(String columnName) Resolve a column in the FROM scope (child namespaces).voidsetSourceTable(TTable sourceTable) Set the TTable that wraps this subquery.voidSet the TSQLEnv for metadata lookup.booleanCheck if this namespace supports dynamic column inference.toString()Methods inherited from class gudusoft.gsqlparser.resolver2.namespace.AbstractNamespace
addColumnSource, addColumnSource, enableReferenceTraceability, ensureValidated, getAllColumnSources, getAllUniqueColumns, getColumnReferences, getColumnSourceWithReferences, getGuessColumnStrategy, getNameMatcher, getNode, isReferenceTraceabilityEnabled, isValidated, setGuessColumnStrategy, validateMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface gudusoft.gsqlparser.resolver2.namespace.INamespace
resolveColumnPath
-
Constructor Details
-
SubqueryNamespace
-
SubqueryNamespace
public SubqueryNamespace(TSelectSqlStatement subquery, String alias, INameMatcher nameMatcher, boolean fromTableFunction) -
SubqueryNamespace
-
-
Method Details
-
isFromTableFunction
Returns true if this namespace was created from a TABLE function's subquery. -
setSourceTable
Set the TTable that wraps this subquery. Used by ScopeBuilder for legacy sync support.- Parameters:
sourceTable- the TTable that contains this subquery
-
getSourceTable
Description copied from interface:INamespaceGet the TTable that this namespace is associated with. Used for legacy sync to set TObjectName.sourceTable. For TableNamespace: returns the table itself For SubqueryNamespace: returns the TTable wrapping the subquery For CTENamespace: returns the CTE referencing table For others: returns null- Returns:
- The source TTable, or null if not applicable
-
setSqlEnv
Set the TSQLEnv for metadata lookup. Used when resolving star columns to find which columns exist in underlying tables.- Parameters:
sqlEnv- the SQL environment containing table metadata
-
getSqlEnv
Get the TSQLEnv used for metadata lookup.- Returns:
- the SQL environment, or null if not set
-
getDisplayName
Description copied from interface:INamespaceGet a display name for this namespace (for debugging/error messages) -
getFinalTable
Description copied from interface:INamespaceGet the final physical table this namespace represents. For tables: returns the table itself For subqueries/CTEs: recursively traces back to physical table(s)- Returns:
- Physical table, or null if not determinable
-
getAllFinalTables
Description copied from interface:INamespaceGet all final physical tables this namespace depends on. For simple table namespace: returns single table For subquery/CTE: returns all tables in the query tree- Specified by:
getAllFinalTablesin interfaceINamespace- Overrides:
getAllFinalTablesin classAbstractNamespace- Returns:
- List of all physical tables
-
doValidate
Description copied from class:AbstractNamespaceSubclasses override this to perform actual validation logic.- Specified by:
doValidatein classAbstractNamespace
-
hasColumn
Description copied from interface:INamespaceCheck if a column exists in this namespace. Returns a three-level answer: EXISTS, MAYBE, NOT_EXISTS- Specified by:
hasColumnin interfaceINamespace- Overrides:
hasColumnin classAbstractNamespace- Parameters:
columnName- Column name to check- Returns:
- Column existence level
-
getSubquery
-
getSelectStatement
Description copied from interface:INamespaceGet the underlying SELECT statement for this namespace. For CTENamespace: returns the CTE's subquery For SubqueryNamespace: returns the subquery For TableNamespace: returns null- Returns:
- the SELECT statement, or null if not applicable
-
hasStarColumn
Description copied from interface:INamespaceCheck if this namespace contains a star column (SELECT *). Used to identify namespaces that may need star column inference.- Returns:
- true if the namespace has SELECT *, false otherwise
-
getStarColumn
Get the first star column (TResultColumn) from this subquery's SELECT list. Used to track the definition node for columns inferred from the star.- Returns:
- The star column, or null if no star column exists
-
hasAmbiguousStar
Check if this subquery has an unqualified star with multiple tables. In this case, columns are ambiguous and should NOT be auto-resolved. Example: SELECT * FROM table_a, table_c -- ambiguous, columns could come from either table SELECT ta.* FROM table_a ta, table_c tc -- NOT ambiguous, star is qualified SELECT * FROM table_a JOIN table_c ON ... -- ambiguous, columns from both tables Uses getRelations() and TJoinExpr to properly count tables in JOINs. -
supportsDynamicInference
Description copied from interface:INamespaceCheck if this namespace supports dynamic column inference. DynamicStarSource and similar namespaces return true.- Returns:
- true if this namespace can have columns added dynamically
-
addInferredColumn
Description copied from interface:INamespaceAdd an inferred column to this namespace. Used by star column push-down to add columns discovered from outer queries.- Parameters:
columnName- the column name to addconfidence- the confidence score (0.0 to 1.0)evidence- description of why this column was inferred- Returns:
- true if the column was added, false if already exists
-
getInferredColumns
Description copied from interface:INamespaceGet all columns that were inferred (not from SELECT list directly). These are columns discovered through star column push-down.- Returns:
- set of inferred column names, empty if none
-
resolveColumn
Description copied from interface:INamespaceResolve a column name to its source.- Specified by:
resolveColumnin interfaceINamespace- Overrides:
resolveColumnin classAbstractNamespace- Parameters:
columnName- Column name to resolve- Returns:
- ColumnSource if found, null otherwise
-
resolveColumnInFromScope
Resolve a column in the FROM scope (child namespaces). This finds where a column originates from in the FROM clause tables/subqueries.Unlike resolveColumn() which returns columns from THIS subquery's SELECT list, this method looks into the FROM clause to find the underlying definition.
IMPORTANT: For TableNamespace, this only returns columns that exist in actual metadata (from DDL or SQLEnv). It does NOT use inferred columns. This is critical for multi-table star resolution where we need to know which table actually has the column based on metadata, not inference.
- Parameters:
columnName- The column name to find- Returns:
- ColumnSource from the FROM clause, or null if not found
-
toString
- Overrides:
toStringin classAbstractNamespace
-