# -*- mode: python -*- Import("env") env = env.Clone() env.SConscript( dirs=[ "algebra", ], exports=[ 'env', ], ) # Core definitions: ABT, Logical and physical properties, Metadata, and core utilities. env.Library( target="optimizer_base", source=[ "defs.cpp", "explain.cpp", "index_bounds.cpp", "metadata.cpp", "node.cpp", "partial_schema_requirements.cpp", "props.cpp", "reference_tracker.cpp", "syntax/expr.cpp", "utils/abt_compare.cpp", "utils/abt_hash.cpp", "utils/ce_math.cpp", "utils/interval_utils.cpp", "utils/path_utils.cpp", "utils/reftracker_utils.cpp", "utils/utils.cpp", ], LIBDEPS=[ # We should only depend on SBE for value representation and basic arithmetic for constant folding. "$BUILD_DIR/mongo/db/exec/sbe/query_sbe_values", ], ) # Memo, and related utilities. env.Library( target="optimizer_memo", source=[ "cascades/memo.cpp", "cascades/memo_defs.cpp", "cascades/rewrite_queues.cpp", "utils/memo_utils.cpp", ], LIBDEPS=[ "optimizer_base", ], ) # Cascades rewrites. env.Library( target="optimizer_cascades", source=[ "cascades/enforcers.cpp", "cascades/logical_props_derivation.cpp", "cascades/implementers.cpp", "cascades/logical_rewriter.cpp", "cascades/physical_rewriter.cpp", ], LIBDEPS=[ "optimizer_memo", ], ) # Rewrites which manipulate the ABT directly. env.Library( target="optimizer_rewrites", source=[ "rewrites/const_eval.cpp", "rewrites/path.cpp", "rewrites/path_lower.cpp", ], LIBDEPS=[ "optimizer_base", ], ) # Main optimizer target. env.Library( target="optimizer", source=[ "metadata_factory.cpp", "opt_phase_manager.cpp", ], LIBDEPS=[ "optimizer_cascades", "optimizer_rewrites", ], ) # Lightweight test utils. env.Library( target="unit_test_utils", source=[ "utils/unit_test_utils.cpp", ], LIBDEPS=[ # We do not depend on the entire pipeline target. "$BUILD_DIR/mongo/db/pipeline/abt_utils", "$BUILD_DIR/mongo/db/query/ce/query_ce_heuristic", "$BUILD_DIR/mongo/db/query/ce/query_ce_hinted", "$BUILD_DIR/mongo/db/query/cost_model/query_cost_model", "$BUILD_DIR/mongo/db/query/optimizer/optimizer", "$BUILD_DIR/mongo/unittest/unittest", ], ) # Heavyweight test utils (depend on pipeline). env.Library( target="unit_test_pipeline_utils", source=[ "utils/unit_test_pipeline_utils.cpp", ], LIBDEPS=[ "$BUILD_DIR/mongo/db/pipeline/abt_translation", "$BUILD_DIR/mongo/db/pipeline/pipeline", "$BUILD_DIR/mongo/db/query/query_test_service_context", "unit_test_utils", ], ) env.CppUnitTest( target='optimizer_test', source=[ "bool_expression_test.cpp", "index_union_optimizer_test.cpp", "logical_rewriter_optimizer_test.cpp", "optimizer_test.cpp", "physical_rewriter_optimizer_test.cpp", "physical_rewriter_parallelism_test.cpp", "reference_tracker_test.cpp", "rewrites/path_optimizer_test.cpp", "unit_test_infra_test.cpp", ], LIBDEPS=[ "unit_test_utils", ], ) env.CppUnitTest( target='interval_simplify_test', source=[ "interval_simplify_test.cpp", ], LIBDEPS=[ "$BUILD_DIR/mongo/db/service_context_test_fixture", "optimizer", "unit_test_pipeline_utils", ], ) env.CppUnitTest( target='optimizer_failure_test', source=[ "optimizer_failure_test.cpp", ], LIBDEPS=[ "unit_test_utils", ], ) env.Benchmark( target='path_lower_bm', source=[ 'rewrites/path_lower_bm.cpp', ], LIBDEPS=[ '$BUILD_DIR/mongo/unittest/unittest', 'optimizer_rewrites', 'unit_test_utils', ], )