Class UnnestNamespace
Object
gudusoft.gsqlparser.resolver2.namespace.AbstractNamespace
gudusoft.gsqlparser.resolver2.namespace.UnnestNamespace
- All Implemented Interfaces:
INamespace
Namespace representing an UNNEST table expression in BigQuery.
UNNEST flattens an array into rows. For example:
- UNNEST(['a', 'b', 'c']) creates a virtual table with rows 'a', 'b', 'c'
- SELECT value FROM UNNEST(array_column) - 'value' is an implicit column name
The UNNEST namespace provides:
1. An implicit column for the unnested elements (named by alias or 'value')
2. Support for WITH OFFSET which adds an 'offset' column
3. Support for STRUCT arrays which expose struct field names
-
Field Summary
Fields inherited from class gudusoft.gsqlparser.resolver2.namespace.AbstractNamespace
columnSources, columnSourcesWithRefs, guessColumnStrategy, nameMatcher, node, referenceTraceabilityEnabled, validated -
Constructor Summary
ConstructorsConstructorDescriptionUnnestNamespace(TTable unnestTable, String alias) UnnestNamespace(TTable unnestTable, String alias, INameMatcher nameMatcher) -
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 the array expression being unnested.Get a display name for this namespace (for debugging/error messages)Get the final physical table this namespace represents.Get the implicit column name for the unnested elements.Get all columns that were inferred (not from SELECT list directly).Get the offset column name if WITH OFFSET is present.Get the TTable that this namespace is associated with.Check if a column exists in this namespace.booleanCheck if this namespace contains a star column (SELECT *).resolveColumn(String columnName) Resolve a column name to its source.resolveQualifiedStructField(String columnName) Resolve a qualified struct field reference (e.g., "alias.field").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
getSelectStatement, getStarColumn, resolveColumnPath
-
Constructor Details
-
UnnestNamespace
-
UnnestNamespace
-
-
Method Details
-
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
-
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
-
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
-
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
-
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
-
resolveQualifiedStructField
Resolve a qualified struct field reference (e.g., "alias.field"). This method infers struct fields when no metadata is available.Use this method when resolving qualified column references like "x.field" where "x" is the UNNEST alias. This is appropriate for UNNEST of STRUCT arrays where the struct fields are accessed via the alias.
For unqualified column references, use
resolveColumn(String)which does NOT infer columns and returns null for unknown columns.- Parameters:
columnName- the column/field name (without the table qualifier)- Returns:
- ColumnSource for the inferred struct field
-
getArrayExpression
Get the array expression being unnested. This is used to track the source of the unnested data. -
getImplicitColumnName
Get the implicit column name for the unnested elements. -
getOffsetColumnName
Get the offset column name if WITH OFFSET is present. -
getUnnestTable
-
getSourceTable
Get 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 For UnnestNamespace, returns the TTable representing the UNNEST expression. This is the immediate source table for columns resolved through this UNNEST.- Returns:
- The source TTable, or null if not applicable
-
toString
- Overrides:
toStringin classAbstractNamespace
-