Example #1
0
def vacuum(session, model):
    """
    When making structural changes to version tables (for example dropping
    columns) there are sometimes situations where some old version records
    become futile.

    Vacuum deletes all futile version rows which had no changes compared to
    previous version.


    ::


        from sqlalchemy_continuum import vacuum


        vacuum(session, User)  # vacuums user version


    :param session: SQLAlchemy session object
    :param model: SQLAlchemy declarative model class
    """
    version_cls = version_class(model)
    versions = defaultdict(list)

    query = (session.query(version_cls).order_by(
        option(version_cls, 'transaction_column_name')))

    for version in query:
        if versions[version.id]:
            prev_version = versions[version.id][-1]
            if naturally_equivalent(prev_version, version):
                session.delete(version)
        else:
            versions[version.id].append(version)
Example #2
0
def vacuum(session, model, yield_per=1000):
    """
    When making structural changes to version tables (for example dropping
    columns) there are sometimes situations where some old version records
    become futile.

    Vacuum deletes all futile version rows which had no changes compared to
    previous version.


    ::


        from sqlalchemy_continuum import vacuum


        vacuum(session, User)  # vacuums user version


    :param session: SQLAlchemy session object
    :param model: SQLAlchemy declarative model class
    :param yield_per: how many rows to process at a time
    """
    version_cls = version_class(model)
    versions = defaultdict(list)

    query = (
        session.query(version_cls)
        .order_by(option(version_cls, 'transaction_column_name'))
    ).yield_per(yield_per)

    primary_key_col = sa.inspection.inspect(model).primary_key[0].name

    for version in query:
        version_id = getattr(version, primary_key_col)
        if versions[version_id]:
            prev_version = versions[version_id][-1]
            if naturally_equivalent(prev_version, version):
                session.delete(version)
        else:
            versions[version_id].append(version)
Example #3
0
def vacuum(session, model, yield_per=1000):
    """
    When making structural changes to version tables (for example dropping
    columns) there are sometimes situations where some old version records
    become futile.

    Vacuum deletes all futile version rows which had no changes compared to
    previous version.


    ::


        from sqlalchemy_continuum_vendored import vacuum


        vacuum(session, User)  # vacuums user version


    :param session: SQLAlchemy session object
    :param model: SQLAlchemy declarative model class
    :param yield_per: how many rows to process at a time
    """
    version_cls = version_class(model)
    versions = defaultdict(list)

    query = (
        session.query(version_cls)
        .order_by(option(version_cls, 'transaction_column_name'))
    ).yield_per(yield_per)

    primary_key_col = sa.inspection.inspect(model).primary_key[0].name

    for version in query:
        version_id = getattr(version, primary_key_col)
        if versions[version_id]:
            prev_version = versions[version_id][-1]
            if naturally_equivalent(prev_version, version):
                session.delete(version)
        else:
            versions[version_id].append(version)
def vacuum(session, model):
    """
    When making structural changes to history tables (for example dropping
    columns) there are sometimes situations where some old history records
    become futile.

    Vacuum deletes all futile history rows which had no changes compared to
    previous version.


    ::


        from sqlalchemy_continuum import vacuum


        vacuum(session, User)  # vacuums user history


    :param session: SQLAlchemy session object
    :param model: SQLAlchemy declarative model class
    """
    history_class = model.__versioned__['class']
    manager = model.__versioned__['manager']
    versions = defaultdict(list)

    query = (
        session.query(history_class)
        .order_by(manager.option(history_class, 'transaction_column_name'))
    )

    for version in query:
        if versions[version.id]:
            prev_version = versions[version.id][-1]
            if naturally_equivalent(prev_version, version):
                session.delete(version)
        else:
            versions[version.id].append(version)
 def test_returns_true_when_properties_match(self):
     assert naturally_equivalent(
         self.User(name=u'someone'), self.User(name=u'someone')
     )
 def test_skips_primary_keys(self):
     assert naturally_equivalent(
         self.User(id=1, name=u'someone'), self.User(id=2, name=u'someone')
     )
Example #7
0
 def test_skips_primary_keys(self, User):
     assert naturally_equivalent(User(id=1, name=u'someone'),
                                 User(id=2, name=u'someone'))
Example #8
0
 def test_returns_true_when_properties_match(self, User):
     assert naturally_equivalent(User(name=u'someone'),
                                 User(name=u'someone'))