Source code for relstorage.adapters.oracle.txncontrol

##############################################################################
#
# Copyright (c) 2009 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""TransactionControl implementations"""

from __future__ import absolute_import

import logging

from ..txncontrol import GenericTransactionControl
from ..txncontrol import noop_when_history_free

log = logging.getLogger(__name__)


[docs] class OracleTransactionControl(GenericTransactionControl): def __init__(self, connmanager, poller, keep_history, Binary, twophase): GenericTransactionControl.__init__(self, connmanager, poller, keep_history, Binary) self.twophase = twophase
[docs] def commit_phase1(self, store_connection, tid): """Begin a commit. Returns the transaction name. The transaction name must not be None. This method should guarantee that commit_phase2() will succeed, meaning that if commit_phase2() would raise any error, the error should be raised in commit_phase1() instead. """ if self.twophase: store_connection.connection.prepare() return '-'
[docs] @noop_when_history_free def add_transaction(self, cursor, tid, username, description, extension, packed=False): stmt = """ INSERT INTO transaction (tid, packed, username, description, extension) VALUES (:1, :2, :3, :4, :5) """ max_desc_len = 2000 if len(description) > max_desc_len: log.warning('Trimming description of transaction %s ' 'to %d characters', tid, max_desc_len) description = description[:max_desc_len] cursor.execute(stmt, ( tid, packed and 'Y' or 'N', self.Binary(username), self.Binary(description), self.Binary(extension)))