postgresql/src/bin/pgbench/pgbench.h

116 lines
2.9 KiB
C

/*-------------------------------------------------------------------------
*
* pgbench.h
*
* Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
*-------------------------------------------------------------------------
*/
#ifndef PGBENCH_H
#define PGBENCH_H
#include "fe_utils/psqlscan.h"
/*
* This file is included outside exprscan.l, in places where we can't see
* flex's definition of typedef yyscan_t. Fortunately, it's documented as
* being "void *", so we can use a macro to keep the function declarations
* here looking like the definitions in exprscan.l. exprparse.y and
* pgbench.c also use this to be able to declare things as "yyscan_t".
*/
#define yyscan_t void *
/*
* Likewise, we can't see exprparse.y's definition of union YYSTYPE here,
* but for now there's no need to know what the union contents are.
*/
union YYSTYPE;
/* Types of expression nodes */
typedef enum PgBenchExprType
{
ENODE_INTEGER_CONSTANT,
ENODE_VARIABLE,
ENODE_FUNCTION
} PgBenchExprType;
/* List of operators and callable functions */
typedef enum PgBenchFunction
{
PGBENCH_ADD,
PGBENCH_SUB,
PGBENCH_MUL,
PGBENCH_DIV,
PGBENCH_MOD,
PGBENCH_DEBUG,
PGBENCH_ABS,
PGBENCH_MIN,
PGBENCH_MAX,
} PgBenchFunction;
typedef struct PgBenchExpr PgBenchExpr;
typedef struct PgBenchExprLink PgBenchExprLink;
typedef struct PgBenchExprList PgBenchExprList;
struct PgBenchExpr
{
PgBenchExprType etype;
union
{
struct
{
int64 ival;
} integer_constant;
struct
{
char *varname;
} variable;
struct
{
PgBenchFunction function;
PgBenchExprLink *args;
} function;
} u;
};
/* List of expression nodes */
struct PgBenchExprLink
{
PgBenchExpr *expr;
PgBenchExprLink *next;
};
struct PgBenchExprList
{
PgBenchExprLink *head;
PgBenchExprLink *tail;
};
extern PgBenchExpr *expr_parse_result;
extern int expr_yyparse(yyscan_t yyscanner);
extern int expr_yylex(union YYSTYPE *lvalp, yyscan_t yyscanner);
extern void expr_yyerror(yyscan_t yyscanner, const char *str) pg_attribute_noreturn();
extern void expr_yyerror_more(yyscan_t yyscanner, const char *str,
const char *more) pg_attribute_noreturn();
extern bool expr_lex_one_word(PsqlScanState state, PQExpBuffer word_buf,
int *offset);
extern yyscan_t expr_scanner_init(PsqlScanState state,
const char *source, int lineno, int start_offset,
const char *command);
extern void expr_scanner_finish(yyscan_t yyscanner);
extern int expr_scanner_offset(PsqlScanState state);
extern char *expr_scanner_get_substring(PsqlScanState state,
int start_offset, int end_offset);
extern int expr_scanner_get_lineno(PsqlScanState state, int offset);
extern void syntax_error(const char *source, int lineno, const char *line,
const char *cmd, const char *msg,
const char *more, int col) pg_attribute_noreturn();
extern int64 strtoint64(const char *str);
#endif /* PGBENCH_H */