Skip to content

Commit d5075c9

Browse files
authored
Merge pull request #207 from Mytherin/repeatableread
Switch the main transaction to use REPEATABLE READ isolation level as well
2 parents d857039 + f88d197 commit d5075c9

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

src/storage/postgres_transaction.cpp

+11-12
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,19 @@ void PostgresTransaction::Rollback() {
3131
}
3232
}
3333

34+
static string GetBeginTransactionQuery(AccessMode access_mode) {
35+
string result = "BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ";
36+
if (access_mode == AccessMode::READ_ONLY) {
37+
result += " READ ONLY";
38+
}
39+
return result;
40+
}
41+
3442
PostgresConnection &PostgresTransaction::GetConnection() {
3543
auto &con = GetConnectionRaw();
3644
if (transaction_state == PostgresTransactionState::TRANSACTION_NOT_YET_STARTED) {
3745
transaction_state = PostgresTransactionState::TRANSACTION_STARTED;
38-
string query = "BEGIN TRANSACTION";
39-
if (access_mode == AccessMode::READ_ONLY) {
40-
query += " READ ONLY";
41-
}
46+
string query = GetBeginTransactionQuery(access_mode);
4247
con.Execute(query);
4348
}
4449
return con;
@@ -56,10 +61,7 @@ unique_ptr<PostgresResult> PostgresTransaction::Query(const string &query) {
5661
auto &con = GetConnectionRaw();
5762
if (transaction_state == PostgresTransactionState::TRANSACTION_NOT_YET_STARTED) {
5863
transaction_state = PostgresTransactionState::TRANSACTION_STARTED;
59-
string transaction_start = "BEGIN TRANSACTION";
60-
if (access_mode == AccessMode::READ_ONLY) {
61-
transaction_start += " READ ONLY";
62-
}
64+
string transaction_start = GetBeginTransactionQuery(access_mode);
6365
transaction_start += ";\n";
6466
return con.Query(transaction_start + query);
6567
}
@@ -70,10 +72,7 @@ vector<unique_ptr<PostgresResult>> PostgresTransaction::ExecuteQueries(const str
7072
auto &con = GetConnectionRaw();
7173
if (transaction_state == PostgresTransactionState::TRANSACTION_NOT_YET_STARTED) {
7274
transaction_state = PostgresTransactionState::TRANSACTION_STARTED;
73-
string transaction_start = "BEGIN TRANSACTION";
74-
if (access_mode == AccessMode::READ_ONLY) {
75-
transaction_start += " READ ONLY";
76-
}
75+
string transaction_start = GetBeginTransactionQuery(access_mode);
7776
transaction_start += ";\n";
7877
return con.ExecuteQueries(transaction_start + queries);
7978
}

0 commit comments

Comments
 (0)