# -*- mode: python -*-

Import("env")

env = env.Clone()

env.Library(
    target='write_ops',
    source=[
        'delete.cpp',
        'insert.cpp',
        'update.cpp',
        'write_ops_retryability.cpp',
        'single_write_result.idl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/introspect',
        '$BUILD_DIR/mongo/db/matcher/expressions_mongod_only',
        '$BUILD_DIR/mongo/db/mongod_options',
        '$BUILD_DIR/mongo/db/query/command_request_response',
        '$BUILD_DIR/mongo/db/query/query_stats/query_stats',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/repl/image_collection_entry',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/service_context',
        '$BUILD_DIR/mongo/db/shard_role',
        '$BUILD_DIR/mongo/db/update/update_driver',
    ],
)

env.Library(
    target='write_ops_exec_util',
    source=[
        'write_ops_exec_util.cpp',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/shard_role_api',
    ],
)

env.Library(
    target='write_ops_exec',
    source=[
        'write_ops_exec.cpp',
    ],
    LIBDEPS=[
        'write_ops_exec_util',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/catalog/catalog_helpers',
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        '$BUILD_DIR/mongo/db/catalog/collection_options',
        '$BUILD_DIR/mongo/db/concurrency/exception_util',
        '$BUILD_DIR/mongo/db/curop_metrics',
        '$BUILD_DIR/mongo/db/dbhelpers',
        '$BUILD_DIR/mongo/db/introspect',
        '$BUILD_DIR/mongo/db/query/query_settings/manager',
        '$BUILD_DIR/mongo/db/query/query_stats/query_stats',
        '$BUILD_DIR/mongo/db/record_id_helpers',
        '$BUILD_DIR/mongo/db/repl/oplog',
        '$BUILD_DIR/mongo/db/repl/repl_coordinator_interface',
        '$BUILD_DIR/mongo/db/repl/tenant_migration_access_blocker',
        '$BUILD_DIR/mongo/db/s/query_analysis_writer',
        '$BUILD_DIR/mongo/db/shard_role',
        '$BUILD_DIR/mongo/db/stats/counters',
        '$BUILD_DIR/mongo/db/stats/server_read_concern_write_concern_metrics',
        '$BUILD_DIR/mongo/db/stats/top',
        '$BUILD_DIR/mongo/db/storage/storage_options',
        '$BUILD_DIR/mongo/db/timeseries/bucket_catalog/bucket_catalog',
        '$BUILD_DIR/mongo/db/timeseries/bucket_compression',
        '$BUILD_DIR/mongo/db/timeseries/bucket_compression_failure',
        '$BUILD_DIR/mongo/db/timeseries/timeseries_conversion_util',
        '$BUILD_DIR/mongo/db/timeseries/timeseries_options',
        '$BUILD_DIR/mongo/db/timeseries/timeseries_write_util',
        '$BUILD_DIR/mongo/db/transaction/transaction',
        '$BUILD_DIR/mongo/db/transaction/transaction_api',
        '$BUILD_DIR/mongo/executor/inline_executor',
        '$BUILD_DIR/mongo/s/query_analysis_sampler',
        '$BUILD_DIR/mongo/util/fail_point',
        '$BUILD_DIR/mongo/util/log_and_backoff',
        'write_ops',
    ],
)

env.Library(
    target='write_ops_parsers',
    source=[
        'write_ops.cpp',
        'write_ops.idl',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/auth/authprivilege',
        '$BUILD_DIR/mongo/db/dbmessage',
        '$BUILD_DIR/mongo/db/pipeline/runtime_constants_idl',
        '$BUILD_DIR/mongo/db/query/hint_parser',
        '$BUILD_DIR/mongo/db/repl/optime',
        '$BUILD_DIR/mongo/idl/idl_parser',
        '$BUILD_DIR/mongo/rpc/command_status',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/crypto/encrypted_field_config',
        '$BUILD_DIR/mongo/crypto/fle_fields',
    ],
)

env.Library(
    target='write_ops_parsers_test_helpers',
    source=[
        'write_ops_parsers_test_helpers.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/db/dbmessage',
    ],
)

env.Library(
    target='parsed_update',
    source=[
        'parsed_update_array_filters.cpp',
        'parsed_update_base.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/disk_use_options_idl',
        '$BUILD_DIR/mongo/db/query_expressions',
        '$BUILD_DIR/mongo/db/shard_role_api',
        '$BUILD_DIR/mongo/db/timeseries/timeseries_conversion_util',
        '$BUILD_DIR/mongo/db/update/update_driver',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/server_base',
        '$BUILD_DIR/mongo/db/storage/storage_options',
    ],
)

env.Library(
    target='delete_request_idl',
    source='delete_request.idl',
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/pipeline/runtime_constants_idl',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/db/server_base',
    ],
)

env.CppUnitTest(
    target='db_ops_test',
    source=[
        'write_ops_exec_test.cpp',
        'write_ops_parsers_test.cpp',
        'write_ops_retryability_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/db/auth/authmocks',
        '$BUILD_DIR/mongo/db/catalog/catalog_test_fixture',
        '$BUILD_DIR/mongo/db/catalog/collection_crud',
        '$BUILD_DIR/mongo/db/op_observer/op_observer',
        '$BUILD_DIR/mongo/db/query_exec',
        '$BUILD_DIR/mongo/db/record_id_helpers',
        '$BUILD_DIR/mongo/db/repl/mock_repl_coord_server_fixture',
        '$BUILD_DIR/mongo/db/repl/oplog_entry',
        '$BUILD_DIR/mongo/db/session/session_catalog',
        '$BUILD_DIR/mongo/db/timeseries/bucket_compression',
        '$BUILD_DIR/mongo/db/transaction/transaction',
        'write_ops',
        'write_ops_exec',
        'write_ops_parsers',
        'write_ops_parsers_test_helpers',
    ],
)

env.CppIntegrationTest(
    target='db_ops_integration_test',
    source=[
        'write_ops_document_stream_integration_test.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/client/clientdriver_network',
        '$BUILD_DIR/mongo/transport/transport_layer_egress_init',
        '$BUILD_DIR/mongo/util/version_impl',
    ],
)
