def scenario_66_delete_and_entire_incremetal_last_15_no_autocheckpoint(td):

    td.monitor_pipe.send(
        result.Title(
            "Delete Last 15 Rows, Entire Incremental Vacuum, Manual Checkpoint (S.66)"
        ))

    ##################################################
    # Disable auto checkpoint
    ##################################################
    _set_auto_checkpoint(td, 0)

    ##################################################
    # Write data
    ##################################################
    _write_data(td, True, config.NUM_ROWS_IN_DB)
    _get_pages_usage(td)
    _checkpoint_passive_and_log_pages(td)
    _checkpoint_truncate(td)

    ##################################################
    # Delete some data
    ##################################################
    _delete_data(td, True, 85, config.NUM_ROWS_IN_DB)
    _get_pages_usage(td)
    _checkpoint_passive_and_log_pages(td)
    _checkpoint_truncate(td)

    ##################################################
    # Try and shrink the DB with incremental_vacuum
    ##################################################
    _get_pages_usage(td)
    _incremental_vacuum(td, 0)
    _checkpoint_passive_and_log_pages(td)
    _get_pages_usage(td)
def scenario_42_delete_and_granular_incremental_vacuum_first_60(td):

    td.monitor_pipe.send(
        result.Title(
            "Delete First 60 Rows and Granular Incremental Vacuum (S.42)"))

    ##################################################
    # Write data
    ##################################################
    _write_data(td, True, config.NUM_ROWS_IN_DB)

    ##################################################
    # Delete some data
    ##################################################
    _delete_data(td, True, 0, 60)
    _checkpoint_truncate(td)

    ##################################################
    # Try and shrink the DB with incremental_vacuum
    ##################################################
    for i in range(1000):
        (_, freelist_count) = _get_pages_usage(td)
        if freelist_count == 0:
            break
        _incremental_vacuum(td, twoish_mb_of_pages)
def scenario_65_delete_and_granular_incremental_vacuum_last_15_200(td):

    td.monitor_pipe.send(
        result.Title(
            "Delete Last 15 Rows, Granular Incr Vacuum 200, Checkpoint (S.65)")
    )

    ##################################################
    # Write data
    ##################################################
    _write_data(td, True, config.NUM_ROWS_IN_DB)

    ##################################################
    # Delete some data
    ##################################################
    _delete_data(td, True, 85, config.NUM_ROWS_IN_DB)
    _checkpoint_truncate(td)

    ##################################################
    # Try and shrink the DB with incremental_vacuum
    ##################################################
    (_, pages_to_vacuum) = _get_pages_usage(td)

    step_size = 200

    for i in range(int(pages_to_vacuum / step_size + 1)):
        _incremental_vacuum(td, step_size)
        _checkpoint_passive_and_log_pages(td)

    _get_pages_usage(td)
def scenario_45_delete_and_granular_incremental_vacuum_last_15_checkpoint(td):

    td.monitor_pipe.send(
        result.Title(
            "Delete Last 15 Rows, Granular Incremental Vacuum And Checkpoint (S.45)"
        ))

    ##################################################
    # Write data
    ##################################################
    _write_data(td, True, config.NUM_ROWS_IN_DB)

    ##################################################
    # Delete some data
    ##################################################
    _delete_data(td, True, 85, config.NUM_ROWS_IN_DB)
    _checkpoint_truncate(td)

    ##################################################
    # Try and shrink the DB with incremental_vacuum
    ##################################################
    for i in range(1000):
        (_, free_count) = _get_pages_usage(td)
        if free_count == 0:
            break
        _incremental_vacuum(td, twoish_mb_of_pages)
        _checkpoint_passive(td)
def scenario_11_small_transaction_vacuum_populated_db(td):

    td.monitor_pipe.send(
        result.Title("Small Write Transactions Then Vacuum (S.11)"))

    _write_data(td, True, config.NUM_ROWS_IN_DB)
    _vacuum(td)
def scenario_35_delete_and_entire_incremental_vacuum_last_3_checkpoint(td):

    td.monitor_pipe.send(
        result.Title(
            "Delete Last 3 Rows, Entire Incremental Vacuum, Checkpoint (S.35)")
    )

    ##################################################
    # Write data
    ##################################################
    _write_data(td, True, config.NUM_ROWS_IN_DB)

    ##################################################
    # Delete some data
    ##################################################
    _delete_data(td, True, 97, config.NUM_ROWS_IN_DB)
    _checkpoint_truncate(td)

    ##################################################
    # Try and shrink the DB with incremental _vacuum
    ##################################################
    _get_pages_usage(td)
    _incremental_vacuum(td, 0)
    _get_pages_usage(td)
    _checkpoint_passive(td)
def scenario_21_vacuum_and_checkpoint_previously_populated_db(td):

    td.monitor_pipe.send(result.Title("Vacuum, Checkpoint An Empty DB (S.21)"))

    ##################################################
    # Write data
    ##################################################
    _write_data(td, True, config.NUM_ROWS_IN_DB)
    _checkpoint_truncate(td)

    ##################################################
    # Delete all data
    ##################################################
    _delete_data(td, True, 0, config.NUM_ROWS_IN_DB)
    _checkpoint_truncate(td)

    ##################################################
    # Try and shrink the DB with a vacuum
    ##################################################
    _get_pages_usage(td)
    _vacuum(td)
    _get_pages_usage(td)
    # DB will only shrink here if a checkpoint of some description is ran
    # Vacuum is "stuck" in WAL
    _checkpoint_passive(td)
    _get_pages_usage(td)
def scenario_10_large_transaction_vacuum_populated_db(td):

    td.monitor_pipe.send(
        result.Title("Large Write Transaction Then Vacuum (S.10)"))

    _write_data(td, False, config.NUM_ROWS_IN_DB)
    _vacuum(td)
def scenario_02_large_write_single_commit_checkpoint_tuncate(td):

    td.monitor_pipe.send(
        result.Title("Large Write Transaction and Checkpoint Trucate (S.02)"))

    _write_data(td, False, config.NUM_ROWS_IN_DB)
    _checkpoint_truncate(td)
def scenario_03_small_write_large_delete_transaction(td):

    td.monitor_pipe.send(
        result.Title(
            "Small Write Transactions, Large Delete Transaction (S.03)"))

    _write_data(td, True, config.NUM_ROWS_IN_DB)
    _delete_data(td, False, 0, config.NUM_ROWS_IN_DB)
def scenario_12_small_transaction_vacuum_populated_checkpoint_db(td):

    td.monitor_pipe.send(
        result.Title(
            "Small Write Transactions Then Vacuum And Checkpoint Truncate (S.12)"
        ))

    _write_data(td, True, config.NUM_ROWS_IN_DB)
    _checkpoint_truncate(td)
    _vacuum(td)
    _checkpoint_truncate(td)
def scenario_51_delete_last_15(td):

    td.monitor_pipe.send(result.Title("Delete Last 15 Rows (S.51)"))

    ##################################################
    # Write data
    ##################################################
    _write_data(td, True, config.NUM_ROWS_IN_DB)
    _checkpoint_truncate(td)

    ##################################################
    # Delete some data
    ##################################################
    _delete_data(td, True, 85, config.NUM_ROWS_IN_DB)
    _get_pages_usage(td)
    _checkpoint_truncate(td)
def scenario_34_delete_and_entire_incremental_vacuum_all_100(td):

    td.monitor_pipe.send(
        result.Title("Delete All Rows and Entire Incremental Vacuum (S.34)"))

    ##################################################
    # Write data
    ##################################################
    _write_data(td, True, config.NUM_ROWS_IN_DB)

    ##################################################
    # Delete some data
    ##################################################
    _delete_data(td, True, 0, config.NUM_ROWS_IN_DB)
    _checkpoint_truncate(td)

    ##################################################
    # Try and shrink the DB with incremental _vacuum
    ##################################################
    _get_pages_usage(td)
    _incremental_vacuum(td, 0)
    _get_pages_usage(td)
def scenario_20_vacuum_previously_populated_db(td):

    td.monitor_pipe.send(result.Title("Vacuum An Empty DB (S.20)"))

    ##################################################
    # Write data
    ##################################################
    _write_data(td, True, config.NUM_ROWS_IN_DB)
    _checkpoint_truncate(td)

    ##################################################
    # Delete all data
    ##################################################
    _delete_data(td, True, 0, config.NUM_ROWS_IN_DB)
    _checkpoint_truncate(td)

    ##################################################
    # Try and shrink the DB with a vacuum
    ##################################################
    _get_pages_usage(td)

    _vacuum(td)

    _get_pages_usage(td)
def scenario_01_large_write_multiple_commits(td):

    td.monitor_pipe.send(result.Title("Small Write Transactions (S.01)"))

    _write_data(td, True, config.NUM_ROWS_IN_DB)
def scenario_00_large_write_single_commit(td):

    td.monitor_pipe.send(result.Title("Large Write Transaction (S.00)"))

    _write_data(td, False, config.NUM_ROWS_IN_DB)