Conjunto de mudanças 5529 no repositório publico


Ignorar:
Timestamp:
09/11/2011 17:32:42 (8 anos atrás)
Autor:
fabianosantos
Mensagem:

Esse hack é maligno. Para todas as tabelas que nao tem chave primaria como um id autoinc é necessario calcular explicitamente a versao do registro no momento de inserir para deixar o sistema de versionamento do banco de dados consistente. Isso é importante na situacao onde um registro é removido e outro identico é cadastrado, com a mesma chave.

Arquivo:
1 editado

Legenda:

Não Modificado
Adicionado
Removido
  • il.spdo/trunk/il/spdo/db.py

    r5526 r5529  
    1313import math
    1414import sys
     15from zExceptions import Forbidden
    1516
    1617Base = declarative_base(metaclass=VersionedMeta)
     
    1920    engine = create_engine(DEFAULT_DSN)
    2021    Session = sessionmaker(bind=engine, extension=VersionedListener())
     22
     23def nextVersion(tabela, **kw):
     24    session = Session()
     25    clausula_where = ''
     26    if kw:
     27        # Xiru: proteção contra SQL Injection
     28        for v in kw.values():
     29            try:
     30                int(v)
     31            except ValueError:
     32                raise Forbidden
     33        clausula_where = 'where ' + " and ".join(["%s=%s" % (k, str(v)) for k, v in kw.items()])
     34    max_version = session.bind.execute('SELECT max(version) from %s_history %s' % (tabela, clausula_where)).fetchone()[0]
     35    return max_version is None and 1 or (max_version + 1)
    2136
    2237class Area(Base):
Note: Veja TracChangeset para ajuda no uso do visualizador de conjunto de mudanças.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.