# -*- mode: python -*-

Import("env")

env.Library(
    target='query_sbe_plan_stats',
    source=[
        'stages/plan_stats.cpp',
        ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        ]
    )

env.Library(
    target='query_sbe_values',
    source=[
        'values/bson.cpp',
        'values/value.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/fts/base_fts',
        '$BUILD_DIR/mongo/db/index/key_generator',
        '$BUILD_DIR/mongo/db/query/collation/collator_interface',
        '$BUILD_DIR/mongo/db/query/datetime/date_time_support',
        '$BUILD_DIR/mongo/db/storage/key_string',
        '$BUILD_DIR/mongo/util/regex_util',
    ]
)

sbeEnv = env.Clone()
sbeEnv.InjectThirdParty(libraries=['snappy'])
sbeEnv.Library(
    target='query_sbe',
    source=[
        'expressions/expression.cpp',
        'stages/branch.cpp',
        'stages/bson_scan.cpp',
        'stages/check_bounds.cpp',
        'stages/co_scan.cpp',
        'stages/exchange.cpp',
        'stages/hash_agg.cpp',
        'stages/hash_join.cpp',
        'stages/limit_skip.cpp',
        'stages/loop_join.cpp',
        'stages/makeobj.cpp',
        'stages/merge_join.cpp',
        'stages/project.cpp',
        'stages/sort.cpp',
        'stages/sorted_merge.cpp',
        'stages/spool.cpp',
        'stages/traverse.cpp',
        'stages/union.cpp',
        'stages/unique.cpp',
        'stages/unwind.cpp',
        'util/debug_print.cpp',
        'values/slot.cpp',
        'vm/arith.cpp',
        'vm/datetime.cpp',
        'vm/vm.cpp',
        ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/exec/js_function',
        '$BUILD_DIR/mongo/db/exec/scoped_timer',
        '$BUILD_DIR/mongo/db/query/plan_yield_policy',
        '$BUILD_DIR/mongo/db/query/query_planner',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/storage/encryption_hooks',
        '$BUILD_DIR/mongo/db/storage/index_entry_comparison',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        '$BUILD_DIR/third_party/shim_snappy',
        'query_sbe_plan_stats',
        'query_sbe_values',
        ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/sorter/sorter_idl',
         ]
    )

env.Library(
    target='query_sbe_storage',
    source=[
        'stages/collection_helpers.cpp',
        'stages/ix_scan.cpp',
        'stages/scan.cpp',
        ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/db_raii',
        '$BUILD_DIR/mongo/db/index/index_access_method',
        '$BUILD_DIR/mongo/db/storage/execution_context',
        'query_sbe'
        ]
    )

env.Library(
    target='query_sbe_parser',
    source=[
        'parser/parser.cpp',
        ],
    LIBDEPS=[
        'query_sbe',
        'query_sbe_storage'
        ]
    )

env.Library(
    target='sbe_plan_stage_test',
    source=[
        'sbe_plan_stage_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/sbe_stage_builder_helpers',
        '$BUILD_DIR/mongo/unittest/unittest',
        'query_sbe',
    ],
)

env.CppUnitTest(
    target='db_sbe_test',
    source=[
        'expressions/sbe_bson_size_test.cpp',
        'expressions/sbe_coerce_to_string_test.cpp',
        'expressions/sbe_concat_test.cpp',
        'expressions/sbe_date_add_test.cpp',
        'expressions/sbe_date_diff_test.cpp',
        'expressions/sbe_date_to_parts_test.cpp',
        'expressions/sbe_day_of_expressions_test.cpp',
        'expressions/sbe_extract_sub_array_builtin_test.cpp',
        'expressions/sbe_get_element_builtin_test.cpp',
        'expressions/sbe_index_of_test.cpp',
        'expressions/sbe_is_array_empty_builtin_test.cpp',
        'expressions/sbe_is_member_builtin_test.cpp',
        'expressions/sbe_iso_date_to_parts_test.cpp',
        'expressions/sbe_mod_expression_test.cpp',
        'expressions/sbe_regex_test.cpp',
        'expressions/sbe_replace_one_expression_test.cpp',
        'expressions/sbe_reverse_array_builtin_test.cpp',
        'expressions/sbe_set_expressions_test.cpp',
        'expressions/sbe_shard_filter_builtin_test.cpp',
        'expressions/sbe_to_upper_to_lower_test.cpp',
        'expressions/sbe_trigonometric_expressions_test.cpp',
        'expressions/sbe_trunc_builtin_test.cpp',
        'parser/sbe_parser_test.cpp',
        'sbe_filter_test.cpp',
        'sbe_hash_agg_test.cpp',
        'sbe_hash_join_test.cpp',
        'sbe_key_string_test.cpp',
        'sbe_limit_skip_test.cpp',
        'sbe_math_builtins_test.cpp',
        'sbe_merge_join_test.cpp',
        'sbe_mkobj_test.cpp',
        'sbe_numeric_convert_test.cpp',
        'sbe_sort_test.cpp',
        'sbe_sorted_merge_test.cpp',
        'sbe_spool_test.cpp',
        'sbe_test.cpp',
        'sbe_unique_test.cpp',
        'values/value_serialize_for_sorter_test.cpp',
        'values/write_value_to_stream_test.cpp'
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/query/collation/collator_interface_mock',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        'query_sbe_parser',
        'sbe_plan_stage_test',
    ],
)
