#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;
ContextType context;
} SummaryFunction;
typedef struct
{
char *schema_name;
char *table_name;
char *column;
} FilterColumn;
typedef struct
{
List *tables;
List *aliases;
List *cte_names;
List *functions;
List *filter_columns;
List *statement_types;
char *truncated_query;
} Summary;
typedef struct
{
List *tables;
List *aliases;
List *functions;
List *range_vars;
List *cte_names;
List *filter_columns;
bool save_filter_columns;
} WalkState;
typedef struct
{
RangeVar *node;
ContextType context;
} RangeVarWithContext;
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);
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