Re: [HACKERS] pgbench more operators & functions - Mailing list pgsql-hackers

From Fabien COELHO
Subject Re: [HACKERS] pgbench more operators & functions
Date
Msg-id alpine.DEB.2.20.1702040914330.20076@lancre
Whole thread Raw
In response to Re: [HACKERS] pgbench more operators & functions  (Stephen Frost <sfrost@snowman.net>)
Responses Re: [HACKERS] pgbench more operators & functions
Re: [HACKERS] pgbench more operators & functions
List pgsql-hackers
Hello,

> For my 2c, at least, while I'm definitely interested in this, it's not
> nearly high enough on my plate with everything else going on to get any
> attention in the next few weeks, at least.
>
> I do think that, perhaps, this patch may deserve a bit of a break, to
> allow people to come back to it with a fresh perspective, so perhaps
> moving it to the next commitfest would be a good idea, in a Needs Review
> state.

So, let's try again for the next CF...

Here is a v9 which includes some more cleanup, hopefully in the expected 
direction which is to make pgbench expressions behave as SQL expressions, 
and I hope taking into account all other feedback as well.


CONTEXT

Pgbench has been given an expression parser (878fdcb8) which allows to use 
full expressions instead of doing one-at-a-time operations. This parser 
has been extended with functions (7e137f84) & double type (86c43f4e). The 
first batch of functions was essentially a poc about how to add new 
functions with various requirements. Pgbench default "tpcb-like" test 
takes advantage of these additions to reduce the number of lines it needs.


MOTIVATION

This patch aims at providing actually useful functions for benchmarking. 
The functions and operators provided here are usual basic operations. They 
are not chosen randomly, but are simply taken from existing benchmarks:

In TPC-B 2.0.0 section 5.3.5 and TPC-C 5.11 section 2.5.1.2, the selection 
of accounts uses a test (if ...), logical conditions (AND, OR) and 
comparisons (<, =, >=, >).

In TPC-C 5.11 section 2.1.6, a bitwise or (|) is used to skew a 
distribution based on two uniform distributions.

In TPC-C 5.11 section 5.2.5.4, a log function is used to determine "think 
time", which can be truncated (i.e. "least" function, already in pgbench).


CONTENTS

The attached patch provides a consistent set of functions and operators 
based on the above examples, with operator precedence taken from postgres 
SQL parser:

- "boolean" type support is added, because it has been requested that 
pgbench should be as close as SQL expressions as possible. This induced 
some renaming as some functions & struct fields where named "num" because 
they where expecting an int or a double, but a boolean is not really a 
numeral.

- SQL comparisons (= <> < > <= >=) plus pg SQL "!=", which result in a 
boolean.

- SQL logical operators (and or not) on booleans.

- SQL bitwise operators taken from pg: | & # << >> ~.

- mod SQL function as a synonymous for %.

- ln and exp SQL functions.

- SQL CASE/END conditional structure.

The patch also includes documentation and additional tap tests.
A test script is also provided.

This version is strict about typing, mimicking postgres behavior. For 
instance, using an int as a boolean results in a error. It is easy to make 
it more tolerant to types, which was the previous behavior before it was 
suggested to follow SQL behavior.

Together with another submitted patch about retrieving query results, the 
added capabilities allow to implement strictly conforming TPC-B 
transactions.

-- 
Fabien.
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Attachment

pgsql-hackers by date:

Previous
From: Boris Muratshin
Date:
Subject: [HACKERS] 3D Z-curve spatial index
Next
From: Ashutosh Sharma
Date:
Subject: Re: [HACKERS] pageinspect: Hash index support