Current section
Files
Jump to
Current section
Files
c_src/libpg_query/src/pg_query_summary.h
#ifndef PG_QUERY_SUMMARY_H
#define PG_QUERY_SUMMARY_H
#include "pg_query.h"
#include "pg_query_internal.h"
#include "nodes/primnodes.h"
#include <unistd.h>
typedef enum
{
CONTEXT_NONE = 0,
CONTEXT_SELECT = 1,
CONTEXT_DML = 2,
CONTEXT_DDL = 3,
CONTEXT_CALL = 4,
} ContextType;
typedef struct
{
char *name;
char *schema_name;
char *table_name;
ContextType context;
} SummaryTable;
typedef struct
{
char *key;
char *value;
} SummaryAlias;
typedef struct
{
char *name;
char *function_name;
char *schema_name; /* optional */
ContextType context;
} SummaryFunction;
typedef struct
{
char *schema_name;
char *table_name;
char *column;
} FilterColumn;
typedef struct
{
List *tables; /* List of SummaryTable */
List *aliases; /* List of SummaryAlias */
List *cte_names; /* List of char */
List *functions; /* List of SummaryFunction */
List *filter_columns; /* List of FilterColumn */
List *statement_types; /* List of char * */
char *truncated_query;
} Summary;
typedef struct
{
List *tables; /* List of Table * */
List *aliases; /* List of SummaryAlias * */
List *functions; /* List of Function * */
List *range_vars; /* List of RangeVarWithContext * */
List *cte_names; /* list of CommonTableExpr */
List *filter_columns; /* List of FilterColumn * */
bool save_filter_columns; /* If true, we should be adding to
* filter columns. */
} WalkState;
typedef struct
{
RangeVar *node;
ContextType context;
} RangeVarWithContext;
/*
* This is like PgQuerySummaryParseResult, but the summary is not wrapped
* up in protobuf.
*/
typedef struct
{
Summary summary;
char *stderr_buffer;
PgQueryError *error;
} PgQuerySummaryParseResultInternal;
extern bool pg_query_raw_tree_walker_supports(Node *node);
extern void pg_query_summary_statement_walk(Summary * summary, Node *node);
extern void pg_query_summary_truncate(Summary * summary, Node *node, int truncate_limit);
/*
* This is like pg_query_summary(), but returns a (non-protobuf)
* PgQuerySummaryParseResultInternal instead of the usual
* PgQuerySummaryParseResult which converts the summary to protobuf.
*
* This is used for tests, to avoid having to process protobuf in C.
*/
extern PgQuerySummaryParseResultInternal pg_query_summary_internal(const char *input, int parser_options, int truncate_limit);
extern void pg_query_free_summary_parse_result_internal(PgQuerySummaryParseResultInternal result);
#endif