Skip to content

Catalyst code review

package org.apache.spark.sql.catalyst

JoinType


/**

* Given a [[plans.logical.LogicalPlan LogicalPlan]], returns a list of `PhysicalPlan`s that can
* be used for execution. If this strategy does not apply to the give logical operation then an
* empty list should be returned.
*/

abstract class GenericStrategy[PhysicalPlan <: TreeNode[PhysicalPlan]] extends Logging {
  def apply(plan: LogicalPlan): Seq[PhysicalPlan]
}

directory structures

.
├── analysis
│   ├── AlreadyExistException.scala
│   ├── Analyzer.scala
│   ├── AnsiTypeCoercion.scala
│   ├── CannotReplaceMissingTableException.scala
│   ├── CheckAnalysis.scala
│   ├── CTESubstitution.scala
│   ├── DecimalPrecision.scala
│   ├── DeduplicateRelations.scala
│   ├── FunctionRegistry.scala
│   ├── higherOrderFunctions.scala
│   ├── HintErrorLogger.scala
│   ├── MultiInstanceRelation.scala
│   ├── NamedRelation.scala
│   ├── NoSuchItemException.scala
│   ├── package.scala
│   ├── PullOutNondeterministic.scala
│   ├── ResolveCatalogs.scala
│   ├── ResolveCommandsWithIfExists.scala
│   ├── ResolveHints.scala
│   ├── ResolveInlineTables.scala
│   ├── ResolvePartitionSpec.scala
│   ├── ResolveTableValuedFunctions.scala
│   ├── ResolveUnion.scala
│   ├── ResolveWithCTE.scala
│   ├── StreamingJoinHelper.scala
│   ├── SubstituteUnresolvedOrdinals.scala
│   ├── TableOutputResolver.scala
│   ├── timeZoneAnalysis.scala
│   ├── TypeCheckResult.scala
│   ├── TypeCoercion.scala
│   ├── unresolved.scala
│   ├── UnsupportedOperationChecker.scala
│   ├── UpdateAttributeNullability.scala
│   ├── v2ResolutionPlans.scala
│   └── view.scala
├── catalog
│   ├── events.scala
│   ├── ExternalCatalog.scala
│   ├── ExternalCatalogUtils.scala
│   ├── ExternalCatalogWithListener.scala
│   ├── functionResources.scala
│   ├── GlobalTempViewManager.scala
│   ├── InMemoryCatalog.scala
│   ├── interface.scala
│   ├── InvalidUDFClassException.scala
│   └── SessionCatalog.scala
├── CatalystTypeConverters.scala
├── csv
│   ├── CSVExprUtils.scala
│   ├── CSVHeaderChecker.scala
│   ├── CSVInferSchema.scala
│   ├── CSVOptions.scala
│   ├── UnivocityGenerator.scala
│   └── UnivocityParser.scala
├── CurrentUserContext.scala
├── DeserializerBuildHelper.scala
├── dsl
│   └── package.scala
├── encoders
│   ├── ExpressionEncoder.scala
│   ├── OuterScopes.scala
│   ├── package.scala
│   └── RowEncoder.scala
├── expressions
│   ├── aggregate
│   │   ├── ApproxCountDistinctForIntervals.scala
│   │   ├── ApproximatePercentile.scala
│   │   ├── Average.scala
│   │   ├── bitwiseAggregates.scala
│   │   ├── CentralMomentAgg.scala
│   │   ├── collect.scala
│   │   ├── Corr.scala
│   │   ├── CountIf.scala
│   │   ├── CountMinSketchAgg.scala
│   │   ├── Count.scala
│   │   ├── Covariance.scala
│   │   ├── First.scala
│   │   ├── HyperLogLogPlusPlus.scala
│   │   ├── interfaces.scala
│   │   ├── Last.scala
│   │   ├── MaxByAndMinBy.scala
│   │   ├── Max.scala
│   │   ├── Min.scala
│   │   ├── Percentile.scala
│   │   ├── PivotFirst.scala
│   │   ├── Product.scala
│   │   ├── Sum.scala
│   │   ├── UnevaluableAggs.scala
│   │   └── V2Aggregator.scala
│   ├── AliasHelper.scala
│   ├── ApplyFunctionExpression.scala
│   ├── arithmetic.scala
│   ├── AttributeSet.scala
│   ├── bitwiseExpressions.scala
│   ├── BoundAttribute.scala
│   ├── CallMethodViaReflection.scala
│   ├── Canonicalize.scala
│   ├── Cast.scala
│   ├── codegen
│   │   ├── CodeFormatter.scala
│   │   ├── CodeGenerator.scala
│   │   ├── CodegenFallback.scala
│   │   ├── GenerateMutableProjection.scala
│   │   ├── GenerateOrdering.scala
│   │   ├── GeneratePredicate.scala
│   │   ├── GenerateSafeProjection.scala
│   │   ├── GenerateUnsafeProjection.scala
│   │   ├── GenerateUnsafeRowJoiner.scala
│   │   ├── javaCode.scala
│   │   └── package.scala
│   ├── CodeGeneratorWithInterpretedFallback.scala
│   ├── collectionOperations.scala
│   ├── complexTypeCreator.scala
│   ├── complexTypeExtractors.scala
│   ├── conditionalExpressions.scala
│   ├── constraintExpressions.scala
│   ├── csvExpressions.scala
│   ├── datetimeExpressions.scala
│   ├── decimalExpressions.scala
│   ├── DynamicPruning.scala
│   ├── EquivalentExpressions.scala
│   ├── ExpectsInputTypes.scala
│   ├── Expression.scala
│   ├── ExpressionSet.scala
│   ├── ExprUtils.scala
│   ├── generators.scala
│   ├── GetStructFieldObject.scala
│   ├── grouping.scala
│   ├── hash.scala
│   ├── higherOrderFunctions.scala
│   ├── inputFileBlock.scala
│   ├── InterpretedMutableProjection.scala
│   ├── InterpretedSafeProjection.scala
│   ├── InterpretedUnsafeProjection.scala
│   ├── intervalExpressions.scala
│   ├── JoinedRow.scala
│   ├── jsonExpressions.scala
│   ├── literals.scala
│   ├── mathExpressions.scala
│   ├── misc.scala
│   ├── MonotonicallyIncreasingID.scala
│   ├── namedExpressions.scala
│   ├── nullExpressions.scala
│   ├── objects
│   │   └── objects.scala
│   ├── ordering.scala
│   ├── package.scala
│   ├── PartitionTransforms.scala
│   ├── predicates.scala
│   ├── ProjectionOverSchema.scala
│   ├── Projection.scala
│   ├── PythonUDF.scala
│   ├── randomExpressions.scala
│   ├── regexpExpressions.scala
│   ├── rows.scala
│   ├── ScalaUDF.scala
│   ├── SchemaPruning.scala
│   ├── SelectedField.scala
│   ├── SessionWindow.scala
│   ├── SortOrder.scala
│   ├── SparkPartitionID.scala
│   ├── SpecificInternalRow.scala
│   ├── stringExpressions.scala
│   ├── SubExprEvaluationRuntime.scala
│   ├── subquery.scala
│   ├── TimeWindow.scala
│   ├── TryCast.scala
│   ├── TryEval.scala
│   ├── V2ExpressionUtils.scala
│   ├── windowExpressions.scala
│   └── xml
│       └── xpath.scala
├── identifiers.scala
├── InternalRow.scala
├── JavaTypeInference.scala
├── json
│   ├── CreateJacksonParser.scala
│   ├── JacksonGenerator.scala
│   ├── JacksonParser.scala
│   ├── JacksonUtils.scala
│   ├── JsonFilters.scala
│   ├── JsonInferSchema.scala
│   └── JSONOptions.scala
├── optimizer
│   ├── ComplexTypes.scala
│   ├── CostBasedJoinReorder.scala
│   ├── DecorrelateInnerQuery.scala
│   ├── EliminateResolvedHint.scala
│   ├── expressions.scala
│   ├── finishAnalysis.scala
│   ├── InlineCTE.scala
│   ├── joins.scala
│   ├── LimitPushDownThroughWindow.scala
│   ├── NestedColumnAliasing.scala
│   ├── NormalizeFloatingNumbers.scala
│   ├── objects.scala
│   ├── OptimizeCsvJsonExprs.scala
│   ├── Optimizer.scala
│   ├── PropagateEmptyRelation.scala
│   ├── PullOutGroupingExpressions.scala
│   ├── PushDownLeftSemiAntiJoin.scala
│   ├── PushExtraPredicateThroughJoin.scala
│   ├── RemoveRedundantAggregates.scala
│   ├── ReplaceExceptWithFilter.scala
│   ├── ReplaceNullWithFalseInPredicate.scala
│   ├── RewriteDistinctAggregates.scala
│   ├── SimplifyConditionalsInPredicate.scala
│   ├── StarSchemaDetection.scala
│   ├── subquery.scala
│   ├── UnwrapCastInBinaryComparison.scala
│   └── UpdateFields.scala
├── OrderedFilters.scala
├── package.scala
├── parser
│   ├── AstBuilder.scala
│   ├── LegacyTypeStringParser.scala
│   ├── ParseDriver.scala
│   ├── ParserInterface.scala
│   └── ParserUtils.scala
├── planning
│   ├── package.scala
│   ├── patterns.scala
│   └── QueryPlanner.scala
├── plans
│   ├── DescribeCommandSchema.scala
│   ├── joinTypes.scala
│   ├── logical
│   │   ├── AnalysisHelper.scala
│   │   ├── basicLogicalOperators.scala
│   │   ├── Command.scala
│   │   ├── EventTimeWatermark.scala
│   │   ├── hints.scala
│   │   ├── IgnoreCachedData.scala
│   │   ├── LocalRelation.scala
│   │   ├── LogicalPlan.scala
│   │   ├── LogicalPlanVisitor.scala
│   │   ├── object.scala
│   │   ├── PlanHelper.scala
│   │   ├── pythonLogicalOperators.scala
│   │   ├── QueryPlanConstraints.scala
│   │   ├── ScriptTransformation.scala
│   │   ├── statements.scala
│   │   ├── Statistics.scala
│   │   ├── statsEstimation
│   │   │   ├── AggregateEstimation.scala
│   │   │   ├── BasicStatsPlanVisitor.scala
│   │   │   ├── EstimationUtils.scala
│   │   │   ├── FilterEstimation.scala
│   │   │   ├── JoinEstimation.scala
│   │   │   ├── LogicalPlanStats.scala
│   │   │   ├── ProjectEstimation.scala
│   │   │   ├── SizeInBytesOnlyStatsPlanVisitor.scala
│   │   │   ├── UnionEstimation.scala
│   │   │   └── ValueInterval.scala
│   │   ├── v2AlterTableCommands.scala
│   │   └── v2Commands.scala
│   ├── package.scala
│   ├── physical
│   │   ├── broadcastMode.scala
│   │   └── partitioning.scala
│   └── QueryPlan.scala
├── QueryPlanningTracker.scala
├── rules
│   ├── package.scala
│   ├── QueryExecutionMetering.scala
│   ├── RuleExecutor.scala
│   ├── RuleIdCollection.scala
│   └── Rule.scala
├── ScalaReflection.scala
├── SerializerBuildHelper.scala
├── SQLConfHelper.scala
├── streaming
│   ├── InternalOutputModes.scala
│   ├── StreamingRelationV2.scala
│   ├── WriteToStream.scala
│   └── WriteToStreamStatement.scala
├── StructFilters.scala
├── trees
│   ├── package.scala
│   ├── TreeNode.scala
│   ├── TreePatternBits.scala
│   └── TreePatterns.scala
├── util
│   ├── ArrayBasedMapBuilder.scala
│   ├── ArrayBasedMapData.scala
│   ├── ArrayData.scala
│   ├── BadRecordException.scala
│   ├── CharVarcharUtils.scala
│   ├── CompressionCodecs.scala
│   ├── DataTypeJsonUtils.scala
│   ├── DateFormatter.scala
│   ├── DateTimeFormatterHelper.scala
│   ├── DateTimeUtils.scala
│   ├── FailureSafeParser.scala
│   ├── GenericArrayData.scala
│   ├── HyperLogLogPlusPlusHelper.scala
│   ├── IntervalUtils.scala
│   ├── MapData.scala
│   ├── NumberConverter.scala
│   ├── package.scala
│   ├── ParseMode.scala
│   ├── QuantileSummaries.scala
│   ├── RandomIndicesGenerator.scala
│   ├── RandomUUIDGenerator.scala
│   ├── RebaseDateTime.scala
│   ├── SQLOrderingUtil.scala
│   ├── StringKeyHashMap.scala
│   ├── StringUtils.scala
│   ├── TimestampFormatter.scala
│   ├── TypeUtils.scala
│   └── UnsafeRowUtils.scala
└── WalkedTypePath.scala

22 directories, 291 files