This repository was archived by the owner on Sep 27, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 618
/
Copy pathquery_logger.cpp
52 lines (42 loc) · 1.51 KB
/
query_logger.cpp
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
//===----------------------------------------------------------------------===//
//
// Peloton
//
// query_logger.cpp
//
// Identification: src/brain/query_logger.cpp
//
// Copyright (c) 2015-2018, Carnegie Mellon University Database Group
//
//===----------------------------------------------------------------------===//
#include "brain/query_logger.h"
#include "catalog/query_history_catalog.h"
#include "concurrency/transaction_context.h"
#include "concurrency/transaction_manager_factory.h"
namespace peloton {
namespace brain {
QueryLogger::Fingerprint::Fingerprint(const std::string &query)
: query_(query),
fingerprint_(""),
fingerprint_result_(pg_query_fingerprint(query.c_str())) {
if (fingerprint_result_.hexdigest != nullptr) {
fingerprint_ = fingerprint_result_.hexdigest;
}
}
QueryLogger::Fingerprint::~Fingerprint() {
pg_query_free_fingerprint_result(fingerprint_result_);
}
void QueryLogger::LogQuery(std::string query_string, uint64_t timestamp) {
auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance();
auto *txn = txn_manager.BeginTransaction();
// Perform fingerprint
Fingerprint fingerprint{query_string};
// Log query + fingerprint
auto &query_history_catalog = catalog::QueryHistoryCatalog::GetInstance(txn);
query_history_catalog.InsertQueryHistory(
query_string, fingerprint.GetFingerprint(), timestamp, nullptr, txn);
// We're done
txn_manager.CommitTransaction(txn);
}
} // namespace brain
} // namespace peloton