@startuml package "(model)\ndbschema" { interface DBParameters { quotedIDFactory: QuotedIDFactory DBTypeFactory: DBTypeFactory driverName: String driverVersion: String dbmsProductName: String dbmsVersion: String } } package "(rdb)\ngeneration.normalization" { interface DialectExtraNormalizer { transform(IQTree, VariableGenerator): IQTree } } package "(reformulation-core)\nanswering.reformulation\n.generation" { interface NativeQueryGenerator { generateSourceQuery(IQ): IQ } interface PostProcessingProjectionSplitter <<DIP>> { split(IQ): PostProcessingSplit } } package "" as settings <<Rectangle>> { package "(reformulation-sql)\nanswering.reformulation\n.generation.impl" #FFFFEE { class SQLGeneratorImpl { ctor(DBParameters,\n IntermediateQueryFactory,\n UnionFlattener,\n OptimizerFactory,\n PostProcessingProjectionSplitter,\n TermTypeTermLifter,\n PostProcessableFunctionLifter,\n IQTree2NativeNodeGenerator,\n DialectExtraNormalizer,\n BooleanExpressionPushDownTransformer) } NativeQueryGenerator <|.. SQLGeneratorImpl SQLGeneratorImpl ..> DBParameters SQLGeneratorImpl .> DialectExtraNormalizer PostProcessingProjectionSplitter <.. SQLGeneratorImpl } } package "(reformulation-core)\ninjection" { interface TranslationFactory <<DIF>> { create(DBParameters): NativeQueryGenerator\n... } TranslationFactory ..> NativeQueryGenerator: <<creates>> } @enduml