This file is indexed.

/usr/include/Poco/Data/Transaction.h is in libpoco-dev 1.8.0.1-1ubuntu4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
//
// Transaction.h
//
// Library: Data
// Package: DataCore
// Module:  Transaction
//
// Definition of the Transaction class.
//
// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier:	BSL-1.0
//



#ifndef Data_Transaction_INCLUDED
#define Data_Transaction_INCLUDED


#include "Poco/Data/Data.h"
#include "Poco/Data/Session.h"
#include "Poco/Logger.h"


namespace Poco {
namespace Data {


class Data_API Transaction
	/// Transaction helps with transactions in domain logic.
	/// When an Transaction object is created, it first checks whether a
	/// transaction is in progress. If not, a new transaction is created.
	/// When the Transaction is destroyed, and commit() has been called,
	/// nothing is done. Otherwise, the current transaction is rolled back.
	/// See Transaction for more details and purpose of this template.
{
public:
	Transaction(Poco::Data::Session& session, Poco::Logger* pLogger = 0);
		/// Creates the Transaction and starts it, using the given database session and logger.

	Transaction(Poco::Data::Session& session, bool start);
		/// Creates the Transaction, using the given database session.
		/// If start is true, transaction is started, otherwise begin() must be called
		/// to start the transaction.
		
	template <typename T>
	Transaction(Poco::Data::Session& rSession, T& t, Poco::Logger* pLogger = 0): 
		_rSession(rSession),
		_pLogger(pLogger)
		/// Creates the Transaction, using the given database session, transactor and logger.
		/// The transactor type must provide operator () overload taking non-const Session 
		/// reference as an argument.
		///
		/// When transaction is created using this constructor, it is executed and
		/// commited automatically. If no error occurs, rollback is disabled and does
		/// not occur at destruction time. If an error occurs resulting in exception being
		/// thrown, the transaction is rolled back and exception propagated to calling code.
		/// 
		/// Example usage:
		/// 
		/// struct Transactor
		/// {
		///		void operator () (Session& session) const
		///		{
		///			// do something ...
		///		}
		/// };
		/// 
		/// Transactor tr;
		/// Transaction tn(session, tr); 
	{
		try { transact(t); }
		catch (...)
		{
			if (_pLogger) _pLogger->error("Error executing transaction.");
			rollback();
			throw;
		}
	}

	~Transaction();
		/// Destroys the Transaction.
		/// Rolls back the current database transaction if it has not been commited
		/// (by calling commit()), or rolled back (by calling rollback()).
		///
		/// If an exception is thrown during rollback, the exception is logged
		/// and no further action is taken. 

	void setIsolation(Poco::UInt32 ti);
		/// Sets the transaction isolation level.

	Poco::UInt32 getIsolation();
		/// Returns the transaction isolation level.

	bool hasIsolation(Poco::UInt32 ti);
		/// Returns true iff the transaction isolation level corresponding
		/// to the supplied bitmask is supported.

	bool isIsolation(Poco::UInt32 ti);
		/// Returns true iff the transaction isolation level corresponds
		/// to the supplied bitmask.

	void execute(const std::string& sql, bool doCommit = true);
		/// Executes and, if doCommit is true, commits the transaction.
		/// Passing true value for commit disables rollback during destruction
		/// of this Transaction object.

	void execute(const std::vector<std::string>& sql);
		/// Executes all the SQL statements supplied in the vector and, after the last
		/// one is sucesfully executed, commits the transaction.
		/// If an error occurs during execution, transaction is rolled back.
		/// Passing true value for commit disables rollback during destruction
		/// of this Transaction object.

	template <typename T>
	void transact(T& t)
		/// Executes the transactor and, unless transactor throws an exception, 
		/// commits the transaction.
	{
		if (!isActive()) begin();
		t(_rSession);
		commit();
	}

	void commit();
		/// Commits the current transaction.
		
	void rollback();
		/// Rolls back the current transaction.
		
	bool isActive();
		/// Returns false after the transaction has been committed or rolled back,
		/// true if the transaction is ongoing.

	void setLogger(Poco::Logger* pLogger);
		/// Sets the logger for this transaction.
		/// Transaction does not take the ownership of the pointer.

private:
	Transaction();
	Transaction(const Transaction&);
	Transaction& operator = (const Transaction&);
	
	void begin();
		/// Begins the transaction if the session is already not in transaction.
		/// Otherwise does nothing.

	Session _rSession;
	Logger* _pLogger;
};


inline bool Transaction::isActive()
{
	return _rSession.isTransaction();
}


inline void Transaction::setIsolation(Poco::UInt32 ti)
{
	_rSession.setTransactionIsolation(ti);
}


inline Poco::UInt32 Transaction::getIsolation()
{
	return _rSession.getTransactionIsolation();
}


inline bool Transaction::hasIsolation(Poco::UInt32 ti)
{
	return _rSession.isTransactionIsolation(ti);
}


inline bool Transaction::isIsolation(Poco::UInt32 ti)
{
	return _rSession.isTransactionIsolation(ti);
}


inline void Transaction::setLogger(Poco::Logger* pLogger)
{
	_pLogger = pLogger;
}


} } // namespace Poco::Data


#endif // Data_Transaction_INCLUDED