Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

pqxx-object/transaction.h

Go to the documentation of this file.
00001 // database transaction convenience wrapper                      -*- C++ -*-
00002 // $Id: transaction.h,v 1.7 2004/01/28 21:21:08 roger Exp $
00003 //
00004 // Copyright (C) 2003  Roger Leigh <rleigh@debian.org>
00005 //
00006 //
00007 //  All rights reserved.
00008 //
00009 //  Redistribution and use in source and binary forms, with or without
00010 //  modification, are permitted provided that the following conditions
00011 //  are met:
00012 //
00013 //  * Redistributions of source code must retain the above copyright
00014 //    notice, this list of conditions and the following disclaimer.
00015 //  * Redistributions in binary form must reproduce the above
00016 //    copyright notice, this list of conditions and the following
00017 //    disclaimer in the documentation and/or other materials provided
00018 //    with the distribution.
00019 //  * Neither the name of the author, nor the names of other
00020 //    contributors may be used to endorse or promote products derived
00021 //    from this software without specific prior written permission.
00022 //
00023 //  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
00024 //  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
00025 //  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
00026 //  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00027 //  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
00028 //  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00029 //  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
00030 //  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00031 //  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
00032 //  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
00033 //  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
00034 //  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00035 //  SUCH DAMAGE.
00036 //
00038 
00039 #ifndef PQXX_OBJECT_TRANSACTION_H
00040 #define PQXX_OBJECT_TRANSACTION_H
00041 
00042 #include <pqxx/connection>
00043 #include <pqxx/transaction>
00044 
00045 #include <sigc++/signal.h>
00046 
00047 #include <pqxx-object/exceptions.h>
00048 
00049 namespace pqxxobject
00050 {
00083   class transaction
00084   {
00085   public:
00087     enum state
00088       {
00090         STATE_NONE,
00092         STATE_ABORTED,
00094         STATE_COMMITTED,
00096         STATE_EXECUTING,
00098         STATE_ABORTING,
00100         STATE_COMMITTING
00101       };
00102 
00110     transaction(pqxx::connection& conn,
00111                 pqxx::transaction<>*& tran);
00112 
00113 
00115     virtual ~transaction();
00116 
00127     void begin(const std::string& name);
00128 
00129   protected:
00138     void end();
00139 
00140   public:
00148     pqxx::result exec(const std::string& query);
00149 
00158     pqxx::result::size_type exec_noresult(const std::string& query);
00159 
00182     pqxx::result::size_type perform(const std::string& query,
00183                                     pqxx::result::size_type min_rows,
00184                                     pqxx::result::size_type max_rows);
00185 
00199     void commit();
00200 
00201 
00211     void abort();
00212 
00220     SigC::Signal1<void, pqxxobject::transaction&>& signal_commit();
00221 
00229     SigC::Signal1<void, pqxxobject::transaction&>& signal_abort();
00230 
00231   protected:
00239     void _begin(const std::string& name);
00240 
00245     void _end();
00246 
00252     void commit(bool refresh);
00253 
00259     void _commit(bool refresh);
00260 
00266     void abort(bool refresh);
00267 
00273     void _abort(bool refresh);
00274 
00275     // PostgreSQL connection details
00277     pqxx::connection& m_connection;
00279     pqxx::transaction<>*& m_transaction;
00280 
00282     SigC::Signal1<void, pqxxobject::transaction&> m_signal_commit;
00284     SigC::Signal1<void, pqxxobject::transaction&> m_signal_abort;
00285 
00287     state m_state;
00288 
00294     unsigned int m_recursion_level;
00295 
00296   }; // class transaction
00297 
00298 }; // namespace pqxxobject
00299 
00300 #endif // PQXX_OBJECT_TRANSACTION_H

Generated on Wed Jan 28 21:22:48 2004 for pqxx-object API Reference by doxygen 1.3.4