Esempio n. 1
0
    def __parse_table(self, table_config):
        table_strategy = TableStrategyTypes.from_value(
            table_config.pop("type"))

        try:
            if table_strategy == TableStrategyTypes.TRUNCATE:
                return TruncateTableStrategy(**table_config)
            elif table_strategy == TableStrategyTypes.DELETE:
                return DeleteTableStrategy(**table_config)
            elif table_strategy == TableStrategyTypes.UPDATE_COLUMNS:
                # update columns supports dict and list columns, so this has to be normalized again during parsing.
                normalized_columns = StrategyParser.__normalize_update_columns_list(
                    table_config.pop("columns"))
                parsed_columns = [
                    self.__parse_update_column(column)
                    for column in normalized_columns
                ]

                return UpdateColumnsTableStrategy(
                    column_strategies=parsed_columns, **table_config)
            else:
                raise UnknownTableStrategyError(table_config)

        except TypeError as error:
            # TypeError can be thrown when the dict args dont match the constructors for the types. We need to re-throw
            raise ConfigSyntaxError()
Esempio n. 2
0
def simple_strategy_update(simple_strategy_update_fake_column):
    return UpdateColumnsTableStrategy("update_table_where_3", [
        UniqueEmailUpdateColumnStrategy("column1", where="BANANAS < 5"),
        UniqueLoginUpdateColumnStrategy("column2", where="BANANAS < 5"),
        simple_strategy_update_fake_column,
        EmptyUpdateColumnStrategy("column4")
    ])
Esempio n. 3
0
def test_get_update_table_literal(literal_strategy):

    result_queries = query_factory.get_update_table("seed_table", UpdateColumnsTableStrategy("anon_table", [
        LiteralUpdateColumnStrategy("literal_column", "RANDOM()")
    ]))

    assert result_queries == [
        "UPDATE anon_table AS \"updatetarget\" SET \"literal_column\" = RANDOM();"
    ]
Esempio n. 4
0
def test_get_update_table_literal(literal_strategy):

    result_queries = query_factory.get_update_table(
        "seed_table",
        UpdateColumnsTableStrategy(
            "anon_table",
            [LiteralUpdateColumnStrategy("literal_column", "RAND()")]))

    assert result_queries == [
        "UPDATE `anon_table` SET `literal_column` = RAND();"
    ]
Esempio n. 5
0
def test_get_update_table_literal(literal_strategy):

    result_queries = query_factory.get_update_table(
        "seed_table",
        UpdateColumnsTableStrategy(
            "anon_table", [LiteralUpdateColumnStrategy("literal_column", "RANDOM()")]
        ),
    )

    assert result_queries == [
        'UPDATE "anon_table" AS "updatetarget" SET "literal_column" = RANDOM();'
    ]
Esempio n. 6
0
def test_get_update_table_fake_column(column_strategy_list):
    update_table_all = query_factory.get_update_table("seed_table", UpdateColumnsTableStrategy("anon_table", column_strategy_list))

    assert update_table_all == [
            "UPDATE anon_table AS \"updatetarget\" SET "
            "\"test_column1\" = ( SELECT first_name FROM seed_table ORDER BY RANDOM(), MD5(\"updatetarget\"::text) LIMIT 1),"
            "\"test_column2\" = ( SELECT last_name FROM seed_table ORDER BY RANDOM(), MD5(\"updatetarget\"::text) LIMIT 1),"
            "\"test_column7\" = ( SELECT user_id::UUID FROM seed_table ORDER BY RANDOM(), MD5(\"updatetarget\"::text) LIMIT 1),"
            "\"test_column3\" = (''),"
            "\"test_column4\" = ( SELECT md5(random()::text) ORDER BY MD5(\"updatetarget\"::text) LIMIT 1),"
            "\"test_column5\" = ( SELECT CONCAT(md5(random()::text), '@', md5(random()::text), '.com') ORDER BY MD5(\"updatetarget\"::text) LIMIT 1),"
            "\"test_column6\" = RANDOM();"
            ]
def test_get_update_table_fake_column(column_strategy_list):
    update_table_all = query_factory.get_update_table(
        "seed_table",
        UpdateColumnsTableStrategy("anon_table", column_strategy_list))

    assert update_table_all == [
        "UPDATE anon_table AS \"updatetarget\" SET "
        "test_column1 = ( SELECT first_name FROM seed_table WHERE \"updatetarget\"=\"updatetarget\" ORDER BY RANDOM() LIMIT 1),"
        "test_column2 = ( SELECT last_name FROM seed_table WHERE \"updatetarget\"=\"updatetarget\" ORDER BY RANDOM() LIMIT 1),"
        "test_column3 = (''),"
        "test_column4 = ( SELECT md5(random()::text) WHERE \"updatetarget\"=\"updatetarget\" ),"
        "test_column5 = ( SELECT CONCAT(md5(random()::text), '@', md5(random()::text), '.com') WHERE \"updatetarget\"=\"updatetarget\" ),"
        "test_column6 = RANDOM();"
    ]
Esempio n. 8
0
def test_get_update_table_fake_column(column_strategy_list):
    update_table_all = query_factory.get_update_table(
        "seed_table",
        UpdateColumnsTableStrategy("anon_table", column_strategy_list))

    assert update_table_all == [
        "UPDATE `anon_table` SET "
        "`test_column1` = ( SELECT `first_name` FROM `seed_table` ORDER BY RAND() LIMIT 1),"
        "`test_column2` = ( SELECT `last_name` FROM `seed_table` ORDER BY RAND() LIMIT 1),"
        "`test_column3` = (''),"
        "`test_column4` = ( SELECT MD5(FLOOR((NOW() + RAND()) * (RAND() * RAND() / RAND()) + RAND())) ),"
        "`test_column5` = ( SELECT CONCAT(MD5(FLOOR((NOW() + RAND()) * (RAND() * RAND() / RAND()) + RAND())), '@', MD5(FLOOR((NOW() + RAND()) * (RAND() * RAND() / RAND()) + RAND())), '.com') ),"
        "`test_column6` = RAND();"
    ]
Esempio n. 9
0
def test_get_update_table_fake_column(column_strategy_list):
    update_table_all = query_factory.get_update_table(
        "seed_table", UpdateColumnsTableStrategy("anon_table", column_strategy_list)
    )

    assert update_table_all == [
        'UPDATE "anon_table" AS "updatetarget" SET '
        '"test_column1" = ( SELECT "first_name" FROM "seed_table" ORDER BY RANDOM(), MD5("updatetarget"::text) LIMIT 1),'
        '"test_column2" = ( SELECT "last_name" FROM "seed_table" ORDER BY RANDOM(), MD5("updatetarget"::text) LIMIT 1),'
        '"test_column7" = ( SELECT "user_id"::UUID FROM "seed_table" ORDER BY RANDOM(), MD5("updatetarget"::text) LIMIT 1),'
        "\"test_column3\" = (''),"
        '"test_column4" = ( SELECT md5(random()::text) ORDER BY MD5("updatetarget"::text) LIMIT 1),'
        "\"test_column5\" = ( SELECT CONCAT(md5(random()::text), '@', md5(random()::text), '.com') ORDER BY MD5(\"updatetarget\"::text) LIMIT 1),"
        '"test_column6" = RANDOM();'
    ]
Esempio n. 10
0
def update_table_strategy_unknown(unsupported_column_strategy):
    return UpdateColumnsTableStrategy("invalid_table",
                                      [unsupported_column_strategy])
Esempio n. 11
0
def update_table_strategy(column_strategy_list):
    return UpdateColumnsTableStrategy("table_name", column_strategy_list)