|
|
|
|
@ -179,12 +179,37 @@ public:
|
|
|
|
|
void end();
|
|
|
|
|
char* get_digest_text();
|
|
|
|
|
bool is_select_NOT_for_update();
|
|
|
|
|
void set_end_time(unsigned long long time);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
void reset_extended_query_info();
|
|
|
|
|
void init(unsigned char* _p, int len, bool header = false);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Assigns query end time.
|
|
|
|
|
* @details In addition to being a setter for end_time member variable, this
|
|
|
|
|
* method ensures that end_time is always greater than or equal to start_time.
|
|
|
|
|
* Refer https://github.com/sysown/proxysql/issues/4950 for more details.
|
|
|
|
|
* @param time query end time
|
|
|
|
|
*/
|
|
|
|
|
inline void PgSQL_Query_Info::set_end_time(unsigned long long time) {
|
|
|
|
|
end_time = time;
|
|
|
|
|
|
|
|
|
|
#ifndef CLOCK_MONOTONIC_RAW
|
|
|
|
|
if (start_time <= end_time)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
// If start_time is greater than end_time, assign current monotonic time
|
|
|
|
|
end_time = monotonic_time();
|
|
|
|
|
if (start_time <= end_time)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
// If start_time is still greater than end_time, set the difference to 0
|
|
|
|
|
end_time = start_time;
|
|
|
|
|
#endif // CLOCK_MONOTONIC_RAW
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class PgSQL_Session : public Base_Session<PgSQL_Session, PgSQL_Data_Stream, PgSQL_Backend, PgSQL_Thread> {
|
|
|
|
|
private:
|
|
|
|
|
using PktType = std::variant<std::unique_ptr<PgSQL_Parse_Message>,std::unique_ptr<PgSQL_Describe_Message>,
|
|
|
|
|
|