# -*- 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_makeobj_spec',
    source=[
        'makeobj_spec.cpp',
        'size_estimator.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/sbe_values',
        '$BUILD_DIR/mongo/util/field_set',
    ],
)

sbeEnv = env.Clone()
sbeEnv.InjectThirdParty(libraries=['snappy'])
sbeEnv.Library(
    target='query_sbe',
    source=[
        'column_store_encoder.cpp',
        'columnar.cpp',
        'expressions/compile_ctx.cpp',
        'expressions/expression.cpp',
        'expressions/runtime_environment.cpp',
        'extended_types.cpp',
        'sbe_pattern_value_cmp.cpp',
        'sort_spec.cpp',
        'util/debug_print.cpp',
        'util/pcre.cpp',
        'util/spilling.cpp',
        'util/stage_results_printer.cpp',
        'vm/arith.cpp',
        'vm/datetime.cpp',
        'vm/makeobj.cpp',
        'vm/vm.cpp',
        'vm/vm_block.cpp',
        'vm/vm_date_ops.cpp',
        'vm/vm_printer.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/exec/sbe/query_sbe_makeobj_spec',
        '$BUILD_DIR/mongo/db/fts/base_fts',
        '$BUILD_DIR/mongo/db/index/index_access_method',
        '$BUILD_DIR/mongo/db/mongohasher',
        '$BUILD_DIR/mongo/db/query/query_index_bounds',
        '$BUILD_DIR/mongo/db/sbe_values',
        '$BUILD_DIR/mongo/db/storage/record_store_base',
        '$BUILD_DIR/mongo/util/field_set',
        '$BUILD_DIR/third_party/shim_snappy',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/bson/dotted_path_support',
        '$BUILD_DIR/mongo/db/query/sort_pattern',
        '$BUILD_DIR/mongo/db/query/spill_util',
        '$BUILD_DIR/mongo/db/query/str_trim_utils',
        '$BUILD_DIR/mongo/db/shard_role_api',
        '$BUILD_DIR/mongo/db/sorter/sorter_base',
        '$BUILD_DIR/mongo/db/sorter/sorter_stats',
    ],
)

sbeEnv.Library(
    target='query_sbe_stages',
    source=[
        'stages/agg_project.cpp',
        'stages/branch.cpp',
        'stages/bson_scan.cpp',
        'stages/block_hashagg.cpp',
        'stages/block_to_row.cpp',
        'stages/co_scan.cpp',
        'stages/exchange.cpp',
        'stages/hashagg_base.cpp',
        'stages/hash_agg.cpp',
        'stages/hash_join.cpp',
        'stages/hash_lookup.cpp',
        'stages/hash_lookup_unwind.cpp',
        'stages/limit_skip.cpp',
        'stages/lookup_hash_table.cpp',
        'stages/loop_join.cpp',
        'stages/makeobj.cpp',
        'stages/merge_join.cpp',
        'stages/project.cpp',
        'stages/search_cursor.cpp',
        'stages/sort.cpp',
        'stages/sorted_merge.cpp',
        'stages/spool.cpp',
        'stages/traverse.cpp',
        'stages/ts_bucket_to_cell_block.cpp',
        'stages/union.cpp',
        'stages/unique.cpp',
        'stages/unwind.cpp',
        'stages/window.cpp',
    ],
    LIBDEPS=[
        '$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_index_bounds',
        '$BUILD_DIR/mongo/db/sbe_values',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/stats/resource_consumption_metrics',
        '$BUILD_DIR/mongo/db/storage/encryption_hooks',
        '$BUILD_DIR/mongo/db/storage/index_entry_comparison',
        '$BUILD_DIR/mongo/executor/task_executor_cursor',
        '$BUILD_DIR/mongo/util/concurrency/thread_pool',
        '$BUILD_DIR/third_party/shim_snappy',
        'query_sbe_plan_stats',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/bson/dotted_path_support',
        '$BUILD_DIR/mongo/db/concurrency/lock_manager',
        '$BUILD_DIR/mongo/db/pipeline/pipeline',
        '$BUILD_DIR/mongo/db/query/spill_util',
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/sorter/sorter_base',
        '$BUILD_DIR/mongo/db/sorter/sorter_stats',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        'query_sbe',
        'query_sbe_storage',
    ],
)

env.Library(
    target='query_sbe_storage',
    source=[
        'stages/collection_helpers.cpp',
        'stages/column_scan.cpp',
        'stages/ix_scan.cpp',
        'stages/scan.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/exec/scoped_timer',
        '$BUILD_DIR/mongo/db/index/index_access_method',
        '$BUILD_DIR/mongo/db/query/query_index_bounds',
        '$BUILD_DIR/mongo/db/shard_role',
        '$BUILD_DIR/mongo/db/storage/execution_context',
        '$BUILD_DIR/mongo/db/storage/index_entry_comparison',
        'query_sbe',
    ],
)

env.Library(
    target='query_sbe_abt',
    source=[
        'abt/abt_lower.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/optimizer/optimizer_base',
        'query_sbe',
        'query_sbe_stages',
        'query_sbe_storage',
    ],
)

env.Library(
    target='sbe_plan_stage_test',
    source=[
        'sbe_plan_stage_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/catalog/catalog_test_fixture',
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/executor/network_interface_mock',
        '$BUILD_DIR/mongo/executor/task_executor_cursor',
        '$BUILD_DIR/mongo/executor/task_executor_interface',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor',
        '$BUILD_DIR/mongo/executor/thread_pool_task_executor_test_fixture',
        '$BUILD_DIR/mongo/unittest/unittest',
        'query_sbe',
        'query_sbe_stages',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
    ],
)

env.CppUnitTest(
    target='db_sbe_test',
    source=[
        'column_store_encoder_test.cpp',
        'columnar_test.cpp',
        'expressions/sbe_block_expr_test.cpp',
        'expressions/sbe_block_top_bottom_test.cpp',
        'expressions/sbe_bson_size_test.cpp',
        'expressions/sbe_coerce_to_string_test.cpp',
        'expressions/sbe_concat_test.cpp',
        'expressions/sbe_constant_test.cpp',
        'expressions/sbe_covariance_test.cpp',
        'expressions/sbe_date_add_test.cpp',
        'expressions/sbe_date_diff_test.cpp',
        'expressions/sbe_date_expression_accepting_timezone_test.cpp',
        'expressions/sbe_date_from_string_test.cpp',
        'expressions/sbe_date_to_parts_test.cpp',
        'expressions/sbe_date_to_string_test.cpp',
        'expressions/sbe_date_trunc_test.cpp',
        'expressions/sbe_derivative_test.cpp',
        'expressions/sbe_exp_moving_avg_test.cpp',
        'expressions/sbe_extract_sub_array_builtin_test.cpp',
        'expressions/sbe_fail_test.cpp',
        'expressions/sbe_firstn_lastn_test.cpp',
        'expressions/sbe_get_element_builtin_test.cpp',
        'expressions/sbe_if_test.cpp',
        'expressions/sbe_index_of_test.cpp',
        'expressions/sbe_integral_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_ks_builtin_test.cpp',
        'expressions/sbe_lambda_test.cpp',
        'expressions/sbe_linearfill_test.cpp',
        'expressions/sbe_local_bind_test.cpp',
        'expressions/sbe_mod_expression_test.cpp',
        'expressions/sbe_new_array_from_range_builtin_test.cpp',
        'expressions/sbe_object_array_conversion_test.cpp',
        'expressions/sbe_prim_binary_test.cpp',
        'expressions/sbe_prim_unary_test.cpp',
        'expressions/sbe_rank_test.cpp',
        'expressions/sbe_regex_test.cpp',
        'expressions/sbe_removable_push_test.cpp',
        'expressions/sbe_removable_stddev_test.cpp',
        'expressions/sbe_removable_sum_test.cpp',
        'expressions/sbe_removable_avg_test.cpp',
        'expressions/sbe_removable_min_max_test.cpp',
        'expressions/sbe_removable_minn_maxn_test.cpp',
        'expressions/sbe_replace_one_expression_test.cpp',
        'expressions/sbe_reverse_array_builtin_test.cpp',
        'expressions/sbe_round_builtin_test.cpp',
        'expressions/sbe_runtime_environment_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_topn_bottomn_test.cpp',
        'expressions/sbe_trigonometric_expressions_test.cpp',
        'expressions/sbe_trunc_builtin_test.cpp',
        'expressions/sbe_ts_second_ts_increment_test.cpp',
        'expressions/sbe_variable_test.cpp',
        'expressions/sbe_fill_type_test.cpp',
        'sbe_agg_project_test.cpp',
        'sbe_block_hashagg_test.cpp',
        'sbe_block_stages_test.cpp',
        'sbe_code_fragment_test.cpp',
        'sbe_column_scan_test.cpp',
        'sbe_filter_test.cpp',
        'sbe_hash_agg_test.cpp',
        'sbe_hash_join_test.cpp',
        'sbe_hash_lookup_shared_test.cpp',
        'sbe_hash_lookup_test.cpp',
        'sbe_hash_lookup_unwind_test.cpp',
        'sbe_key_string_test.cpp',
        'sbe_limit_skip_test.cpp',
        'sbe_loop_join_test.cpp',
        'sbe_math_builtins_test.cpp',
        'sbe_merge_join_test.cpp',
        'sbe_mkobj_test.cpp',
        'sbe_numeric_convert_test.cpp',
        'sbe_pattern_value_cmp_test.cpp',
        'sbe_plan_size_test.cpp',
        'sbe_search_cursor_test.cpp',
        'sbe_sort_test.cpp',
        'sbe_sorted_merge_test.cpp',
        'sbe_spool_test.cpp',
        'sbe_test.cpp',
        'sbe_trial_run_tracker_test.cpp',
        'sbe_unique_test.cpp',
        'sbe_unittest.cpp',
        'sbe_window_test.cpp',
        'util/stage_results_printer_test.cpp',
        "values/block_test.cpp",
        "values/bsoncolumn_materializer_test.cpp",
        'values/slot_printer_test.cpp',
        'values/slot_test.cpp',
        'values/row_test.cpp',
        "values/ts_block_test.cpp",
        'values/value_serialization_test.cpp',
        "values/value_test.cpp",
        'write_value_to_stream_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/index/column_store_index',
        '$BUILD_DIR/mongo/db/query/collation/collator_interface_mock',
        '$BUILD_DIR/mongo/db/service_context_d_test_fixture',
        "$BUILD_DIR/mongo/db/timeseries/bucket_compression",
        '$BUILD_DIR/mongo/util/pcre_wrapper',
        'sbe_plan_stage_test',
    ],
)

env.Library(
    target='sbe_abt_test_util',
    source=[
        'abt/sbe_abt_test_util.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/pipeline/abt_translation',
        '$BUILD_DIR/mongo/db/query/optimizer/unit_test_utils',
        '$BUILD_DIR/mongo/db/query/query_test_service_context',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/service_context_test_fixture',
        'query_sbe_abt',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/service_context_non_d',
    ],
)

env.CppUnitTest(
    target='sbe_abt_test',
    source=[
        'abt/sbe_abt_diff_test.cpp',
        'abt/sbe_abt_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/ce/query_ce_sampling',
        'sbe_abt_test_util',
    ],
)

env.CppUnitTest(
    target='makeobj_spec_hash_test',
    source=[
        'makeobj_spec_hash_test.cpp',
    ],
    LIBDEPS=[
        'query_sbe_makeobj_spec',
        'sbe_abt_test_util',
    ],
)

env.CppUnitTest(
    target='abt_lowering_test',
    source=[
        'abt/abt_lower_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/optimizer/optimizer_rewrites',
        '$BUILD_DIR/mongo/db/query/optimizer/unit_test_utils',
        '$BUILD_DIR/mongo/unittest/unittest',
        'query_sbe_abt',
    ],
)

env.Benchmark(
    target='abt_lowering_bm',
    source=[
        'abt/abt_lower_bm.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/optimizer/optimizer_rewrites',
        '$BUILD_DIR/mongo/db/query/optimizer/unit_test_utils',
        '$BUILD_DIR/mongo/unittest/unittest',
        'query_sbe_abt',
    ],
)

env.Benchmark(
    target='sbe_vm_bm',
    source=[
        'vm/vm_bm.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/query/collation/collator_icu',
        '$BUILD_DIR/mongo/unittest/unittest',
        'query_sbe',
    ],
)
