Skip to content

Commit 3d984ae

Browse files
committed
Log all queries in verbose mode
My original manual verbose logging missed quite a few queries, so I've switched to the logger provided by SOCI.
1 parent e019258 commit 3d984ae

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

sqlgrep/sqlgrep.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,21 @@ void write_error(string_view const message)
4949
cerr << termcolor::red << message << termcolor::reset << endl;
5050
}
5151

52+
class database_query_logger : public logger_impl
53+
{
54+
public:
55+
void start_query(std::string const & query) override
56+
{
57+
write_verbose("Query: "s + query);
58+
}
59+
60+
private:
61+
logger_impl* do_clone() const override
62+
{
63+
return new database_query_logger;
64+
}
65+
};
66+
5267
void write_progress(uint64_t total, uint64_t completed, chrono::duration<uint64_t, std::nano> time_taken_so_far)
5368
{
5469
uint64_t const nanoseconds_per_second = 1'000'000'000L;
@@ -126,7 +141,6 @@ vector<string> find_matches(session & sql, string_view const schema, string_view
126141
vector<string> matches(maximum_results_per_column + 1);
127142
stringstream query;
128143
query << "select cast(left(" << enquote(column) << ", " << (max_string + 1) << ") as varchar(" << (max_string + 1) << ")) from " << enquote(schema) << "." << enquote(table) << " where " << enquote(column) << " like '%" + escape_search_text(to_find) + "%' escape '\\'", into(matches);
129-
write_verbose("Executing: " + query.str());
130144
sql << query.str(), into(matches);
131145
for (vector<string>::size_type i = 0; i != matches.size(); ++i)
132146
{
@@ -175,6 +189,7 @@ void find_and_display_matches(string_view to_find, int const maximum_results_per
175189
connection_parameters parameters(odbc, string(connection_string));
176190
parameters.set_option(odbc_option_driver_complete, to_string(SQL_DRIVER_NOPROMPT));
177191
session sql(parameters);
192+
sql.set_logger(new database_query_logger);
178193
auto all_columns = get_all_string_columns(sql);
179194
cout << "Searching " << all_columns.size() << " columns for '" << to_find << "'..." << endl;
180195
uint64_t const total_rows = accumulate(begin(all_columns), end(all_columns), 0, [](int acc, column_details const & b) { return acc + b.number_of_rows; });

0 commit comments

Comments
 (0)