mirror of
https://github.com/postgres/postgres.git
synced 2026-01-05 23:38:41 +03:00
Move pgbench from contrib/ to src/bin/
Reviewed-by: Michael Paquier <michael.paquier@gmail.com>
This commit is contained in:
@@ -38,7 +38,6 @@ SUBDIRS = \
|
||||
pg_trgm \
|
||||
pg_upgrade \
|
||||
pg_upgrade_support \
|
||||
pgbench \
|
||||
pgcrypto \
|
||||
pgrowlocks \
|
||||
pgstattuple \
|
||||
|
||||
3
contrib/pgbench/.gitignore
vendored
3
contrib/pgbench/.gitignore
vendored
@@ -1,3 +0,0 @@
|
||||
/exprparse.c
|
||||
/exprscan.c
|
||||
/pgbench
|
||||
@@ -1,33 +0,0 @@
|
||||
# contrib/pgbench/Makefile
|
||||
|
||||
PGFILEDESC = "pgbench - a simple program for running benchmark tests"
|
||||
PGAPPICON = win32
|
||||
|
||||
PROGRAM = pgbench
|
||||
OBJS = pgbench.o exprparse.o $(WIN32RES)
|
||||
|
||||
PG_CPPFLAGS = -I$(libpq_srcdir)
|
||||
PG_LIBS = $(libpq_pgport) $(PTHREAD_LIBS)
|
||||
|
||||
ifdef USE_PGXS
|
||||
PG_CONFIG = pg_config
|
||||
PGXS := $(shell $(PG_CONFIG) --pgxs)
|
||||
include $(PGXS)
|
||||
else
|
||||
subdir = contrib/pgbench
|
||||
top_builddir = ../..
|
||||
include $(top_builddir)/src/Makefile.global
|
||||
include $(top_srcdir)/contrib/contrib-global.mk
|
||||
|
||||
distprep: exprparse.c exprscan.c
|
||||
endif
|
||||
|
||||
ifneq ($(PORTNAME), win32)
|
||||
override CFLAGS += $(PTHREAD_CFLAGS)
|
||||
endif
|
||||
|
||||
# exprscan is compiled as part of exprparse
|
||||
exprparse.o: exprscan.c
|
||||
|
||||
maintainer-clean:
|
||||
rm -f exprparse.c exprscan.c
|
||||
@@ -1,98 +0,0 @@
|
||||
%{
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* exprparse.y
|
||||
* bison grammar for a simple expression syntax
|
||||
*
|
||||
* Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "postgres_fe.h"
|
||||
|
||||
#include "pgbench.h"
|
||||
|
||||
PgBenchExpr *expr_parse_result;
|
||||
|
||||
static PgBenchExpr *make_integer_constant(int64 ival);
|
||||
static PgBenchExpr *make_variable(char *varname);
|
||||
static PgBenchExpr *make_op(char operator, PgBenchExpr *lexpr,
|
||||
PgBenchExpr *rexpr);
|
||||
|
||||
%}
|
||||
|
||||
%expect 0
|
||||
%name-prefix="expr_yy"
|
||||
|
||||
%union
|
||||
{
|
||||
int64 ival;
|
||||
char *str;
|
||||
PgBenchExpr *expr;
|
||||
}
|
||||
|
||||
%type <expr> expr
|
||||
%type <ival> INTEGER
|
||||
%type <str> VARIABLE
|
||||
|
||||
%token INTEGER VARIABLE
|
||||
%token CHAR_ERROR /* never used, will raise a syntax error */
|
||||
|
||||
/* Precedence: lowest to highest */
|
||||
%left '+' '-'
|
||||
%left '*' '/' '%'
|
||||
%right UMINUS
|
||||
|
||||
%%
|
||||
|
||||
result: expr { expr_parse_result = $1; }
|
||||
|
||||
expr: '(' expr ')' { $$ = $2; }
|
||||
| '+' expr %prec UMINUS { $$ = $2; }
|
||||
| '-' expr %prec UMINUS { $$ = make_op('-', make_integer_constant(0), $2); }
|
||||
| expr '+' expr { $$ = make_op('+', $1, $3); }
|
||||
| expr '-' expr { $$ = make_op('-', $1, $3); }
|
||||
| expr '*' expr { $$ = make_op('*', $1, $3); }
|
||||
| expr '/' expr { $$ = make_op('/', $1, $3); }
|
||||
| expr '%' expr { $$ = make_op('%', $1, $3); }
|
||||
| INTEGER { $$ = make_integer_constant($1); }
|
||||
| VARIABLE { $$ = make_variable($1); }
|
||||
;
|
||||
|
||||
%%
|
||||
|
||||
static PgBenchExpr *
|
||||
make_integer_constant(int64 ival)
|
||||
{
|
||||
PgBenchExpr *expr = pg_malloc(sizeof(PgBenchExpr));
|
||||
|
||||
expr->etype = ENODE_INTEGER_CONSTANT;
|
||||
expr->u.integer_constant.ival = ival;
|
||||
return expr;
|
||||
}
|
||||
|
||||
static PgBenchExpr *
|
||||
make_variable(char *varname)
|
||||
{
|
||||
PgBenchExpr *expr = pg_malloc(sizeof(PgBenchExpr));
|
||||
|
||||
expr->etype = ENODE_VARIABLE;
|
||||
expr->u.variable.varname = varname;
|
||||
return expr;
|
||||
}
|
||||
|
||||
static PgBenchExpr *
|
||||
make_op(char operator, PgBenchExpr *lexpr, PgBenchExpr *rexpr)
|
||||
{
|
||||
PgBenchExpr *expr = pg_malloc(sizeof(PgBenchExpr));
|
||||
|
||||
expr->etype = ENODE_OPERATOR;
|
||||
expr->u.operator.operator = operator;
|
||||
expr->u.operator.lexpr = lexpr;
|
||||
expr->u.operator.rexpr = rexpr;
|
||||
return expr;
|
||||
}
|
||||
|
||||
#include "exprscan.c"
|
||||
@@ -1,129 +0,0 @@
|
||||
%{
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* exprscan.l
|
||||
* a lexical scanner for a simple expression syntax
|
||||
*
|
||||
* Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* line and column number for error reporting */
|
||||
static int yyline = 0, yycol = 0;
|
||||
|
||||
/* Handles to the buffer that the lexer uses internally */
|
||||
static YY_BUFFER_STATE scanbufhandle;
|
||||
static char *scanbuf;
|
||||
static int scanbuflen;
|
||||
|
||||
/* context information for error reporting */
|
||||
static char *expr_source = NULL;
|
||||
static int expr_lineno = 0;
|
||||
static char *expr_full_line = NULL;
|
||||
static char *expr_command = NULL;
|
||||
static int expr_col = 0;
|
||||
%}
|
||||
|
||||
%option 8bit
|
||||
%option never-interactive
|
||||
%option nodefault
|
||||
%option noinput
|
||||
%option nounput
|
||||
%option noyywrap
|
||||
%option warn
|
||||
%option prefix="expr_yy"
|
||||
|
||||
space [ \t\r\f]
|
||||
|
||||
%%
|
||||
|
||||
"+" { yycol += yyleng; return '+'; }
|
||||
"-" { yycol += yyleng; return '-'; }
|
||||
"*" { yycol += yyleng; return '*'; }
|
||||
"/" { yycol += yyleng; return '/'; }
|
||||
"%" { yycol += yyleng; return '%'; }
|
||||
"(" { yycol += yyleng; return '('; }
|
||||
")" { yycol += yyleng; return ')'; }
|
||||
|
||||
:[a-zA-Z0-9_]+ {
|
||||
yycol += yyleng;
|
||||
yylval.str = pg_strdup(yytext + 1);
|
||||
return VARIABLE;
|
||||
}
|
||||
[0-9]+ {
|
||||
yycol += yyleng;
|
||||
yylval.ival = strtoint64(yytext);
|
||||
return INTEGER;
|
||||
}
|
||||
|
||||
[\n] { yycol = 0; yyline++; }
|
||||
{space}+ { yycol += yyleng; /* ignore */ }
|
||||
|
||||
. {
|
||||
yycol += yyleng;
|
||||
syntax_error(expr_source, expr_lineno, expr_full_line, expr_command,
|
||||
"unexpected character", yytext, expr_col + yycol);
|
||||
/* dead code, exit is called from syntax_error */
|
||||
return CHAR_ERROR;
|
||||
}
|
||||
%%
|
||||
|
||||
void
|
||||
yyerror(const char *message)
|
||||
{
|
||||
syntax_error(expr_source, expr_lineno, expr_full_line, expr_command,
|
||||
message, NULL, expr_col + yycol);
|
||||
}
|
||||
|
||||
/*
|
||||
* Called before any actual parsing is done
|
||||
*/
|
||||
void
|
||||
expr_scanner_init(const char *str, const char *source,
|
||||
const int lineno, const char *line,
|
||||
const char *cmd, const int ecol)
|
||||
{
|
||||
Size slen = strlen(str);
|
||||
|
||||
/* save context informations for error messages */
|
||||
expr_source = (char *) source;
|
||||
expr_lineno = (int) lineno;
|
||||
expr_full_line = (char *) line;
|
||||
expr_command = (char *) cmd;
|
||||
expr_col = (int) ecol;
|
||||
|
||||
/*
|
||||
* Might be left over after error
|
||||
*/
|
||||
if (YY_CURRENT_BUFFER)
|
||||
yy_delete_buffer(YY_CURRENT_BUFFER);
|
||||
|
||||
/*
|
||||
* Make a scan buffer with special termination needed by flex.
|
||||
*/
|
||||
scanbuflen = slen;
|
||||
scanbuf = pg_malloc(slen + 2);
|
||||
memcpy(scanbuf, str, slen);
|
||||
scanbuf[slen] = scanbuf[slen + 1] = YY_END_OF_BUFFER_CHAR;
|
||||
scanbufhandle = yy_scan_buffer(scanbuf, slen + 2);
|
||||
|
||||
BEGIN(INITIAL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Called after parsing is done to clean up after seg_scanner_init()
|
||||
*/
|
||||
void
|
||||
expr_scanner_finish(void)
|
||||
{
|
||||
yy_delete_buffer(scanbufhandle);
|
||||
pg_free(scanbuf);
|
||||
expr_source = NULL;
|
||||
expr_lineno = 0;
|
||||
expr_full_line = NULL;
|
||||
expr_command = NULL;
|
||||
expr_col = 0;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,60 +0,0 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* pgbench.h
|
||||
*
|
||||
* Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef PGBENCH_H
|
||||
#define PGBENCH_H
|
||||
|
||||
typedef enum PgBenchExprType
|
||||
{
|
||||
ENODE_INTEGER_CONSTANT,
|
||||
ENODE_VARIABLE,
|
||||
ENODE_OPERATOR
|
||||
} PgBenchExprType;
|
||||
|
||||
typedef struct PgBenchExpr PgBenchExpr;
|
||||
|
||||
struct PgBenchExpr
|
||||
{
|
||||
PgBenchExprType etype;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
int64 ival;
|
||||
} integer_constant;
|
||||
struct
|
||||
{
|
||||
char *varname;
|
||||
} variable;
|
||||
struct
|
||||
{
|
||||
char operator;
|
||||
PgBenchExpr *lexpr;
|
||||
PgBenchExpr *rexpr;
|
||||
} operator;
|
||||
} u;
|
||||
};
|
||||
|
||||
extern PgBenchExpr *expr_parse_result;
|
||||
|
||||
extern int expr_yyparse(void);
|
||||
extern int expr_yylex(void);
|
||||
extern void expr_yyerror(const char *str);
|
||||
extern void expr_scanner_init(const char *str, const char *source,
|
||||
const int lineno, const char *line,
|
||||
const char *cmd, const int ecol);
|
||||
extern void syntax_error(const char* source, const int lineno, const char* line,
|
||||
const char* cmd, const char* msg, const char* more,
|
||||
const int col);
|
||||
extern void expr_scanner_finish(void);
|
||||
|
||||
extern int64 strtoint64(const char *str);
|
||||
|
||||
#endif /* PGBENCH_H */
|
||||
Reference in New Issue
Block a user