postgresql/src/include/nodes/queryjumble.h
Michael Paquier 2ecbb0a493 Remove dependency to query text in JumbleQuery()
Since 3db72eb, the query ID of utilities is generated using the Query
structure, making the use of the query string in JumbleQuery()
unnecessary.  This commit removes the argument "querytext" from
JumbleQuery().

Reported-by: Joe Conway
Reviewed-by: Nathan Bossart
Discussion: https://postgr.es/m/ZJlQAWE4COFqHuAV@paquier.xyz
2023-06-28 08:59:36 +09:00

86 lines
2.1 KiB
C

/*-------------------------------------------------------------------------
*
* queryjumble.h
* Query normalization and fingerprinting.
*
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* src/include/nodes/queryjumble.h
*
*-------------------------------------------------------------------------
*/
#ifndef QUERYJUMBLE_H
#define QUERYJUMBLE_H
#include "nodes/parsenodes.h"
/*
* Struct for tracking locations/lengths of constants during normalization
*/
typedef struct LocationLen
{
int location; /* start offset in query text */
int length; /* length in bytes, or -1 to ignore */
} LocationLen;
/*
* Working state for computing a query jumble and producing a normalized
* query string
*/
typedef struct JumbleState
{
/* Jumble of current query tree */
unsigned char *jumble;
/* Number of bytes used in jumble[] */
Size jumble_len;
/* Array of locations of constants that should be removed */
LocationLen *clocations;
/* Allocated length of clocations array */
int clocations_buf_size;
/* Current number of valid entries in clocations array */
int clocations_count;
/* highest Param id we've seen, in order to start normalization correctly */
int highest_extern_param_id;
} JumbleState;
/* Values for the compute_query_id GUC */
enum ComputeQueryIdType
{
COMPUTE_QUERY_ID_OFF,
COMPUTE_QUERY_ID_ON,
COMPUTE_QUERY_ID_AUTO,
COMPUTE_QUERY_ID_REGRESS
};
/* GUC parameters */
extern PGDLLIMPORT int compute_query_id;
extern const char *CleanQuerytext(const char *query, int *location, int *len);
extern JumbleState *JumbleQuery(Query *query);
extern void EnableQueryId(void);
extern PGDLLIMPORT bool query_id_enabled;
/*
* Returns whether query identifier computation has been enabled, either
* directly in the GUC or by a module when the setting is 'auto'.
*/
static inline bool
IsQueryIdEnabled(void)
{
if (compute_query_id == COMPUTE_QUERY_ID_OFF)
return false;
if (compute_query_id == COMPUTE_QUERY_ID_ON)
return true;
return query_id_enabled;
}
#endif /* QUERYJUMBLE_H */