mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 00:08:23 -05:00 
			
		
		
		
	Add pow(), aka power(), function to pgbench.
Raúl Marín Rodríguez, reviewed by Fabien Coelho and Michael Paquier, with a minor fix by me. Discussion: http://postgr.es/m/CAM6_UM4XiA14y9HnDqu9kAAOtwMhHZxW--q_ZACZW9Hsrsf-tg@mail.gmail.com
This commit is contained in:
		
							parent
							
								
									ad337c76b6
								
							
						
					
					
						commit
						7a727c180a
					
				@ -1069,6 +1069,13 @@ pgbench <optional> <replaceable>options</replaceable> </optional> <replaceable>d
 | 
			
		||||
       <entry><literal>pi()</literal></entry>
 | 
			
		||||
       <entry><literal>3.14159265358979323846</literal></entry>
 | 
			
		||||
      </row>
 | 
			
		||||
      <row>
 | 
			
		||||
       <entry><literal><function>pow(<replaceable>x</replaceable>, <replaceable>y</replaceable>)</function>, <function>power(<replaceable>x</replaceable>, <replaceable>y</replaceable>)</function></literal></entry>
 | 
			
		||||
       <entry>double</entry>
 | 
			
		||||
       <entry>exponentiation</entry>
 | 
			
		||||
       <entry><literal>pow(2.0, 10)</literal>, <literal>power(2.0, 10)</literal></entry>
 | 
			
		||||
       <entry><literal>1024.0</literal></entry>
 | 
			
		||||
      </row>
 | 
			
		||||
      <row>
 | 
			
		||||
       <entry><literal><function>random(<replaceable>lb</replaceable>, <replaceable>ub</replaceable>)</function></literal></entry>
 | 
			
		||||
       <entry>integer</entry>
 | 
			
		||||
 | 
			
		||||
@ -194,6 +194,12 @@ static const struct
 | 
			
		||||
	{
 | 
			
		||||
		"random_zipfian", 3, PGBENCH_RANDOM_ZIPFIAN
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"pow", 2, PGBENCH_POW
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"power", 2, PGBENCH_POW
 | 
			
		||||
	},
 | 
			
		||||
	/* keep as last array element */
 | 
			
		||||
	{
 | 
			
		||||
		NULL, 0, 0
 | 
			
		||||
 | 
			
		||||
@ -1850,6 +1850,24 @@ evalFunc(TState *thread, CState *st,
 | 
			
		||||
				return true;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		case PGBENCH_POW:
 | 
			
		||||
			{
 | 
			
		||||
				PgBenchValue *lval = &vargs[0];
 | 
			
		||||
				PgBenchValue *rval = &vargs[1];
 | 
			
		||||
				double		ld,
 | 
			
		||||
							rd;
 | 
			
		||||
 | 
			
		||||
				Assert(nargs == 2);
 | 
			
		||||
 | 
			
		||||
				if (!coerceToDouble(lval, &ld) ||
 | 
			
		||||
					!coerceToDouble(rval, &rd))
 | 
			
		||||
					return false;
 | 
			
		||||
 | 
			
		||||
				setDoubleValue(retval, pow(ld, rd));
 | 
			
		||||
 | 
			
		||||
				return true;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			/* cannot get here */
 | 
			
		||||
			Assert(0);
 | 
			
		||||
 | 
			
		||||
@ -76,7 +76,8 @@ typedef enum PgBenchFunction
 | 
			
		||||
	PGBENCH_RANDOM,
 | 
			
		||||
	PGBENCH_RANDOM_GAUSSIAN,
 | 
			
		||||
	PGBENCH_RANDOM_EXPONENTIAL,
 | 
			
		||||
	PGBENCH_RANDOM_ZIPFIAN
 | 
			
		||||
	PGBENCH_RANDOM_ZIPFIAN,
 | 
			
		||||
	PGBENCH_POW
 | 
			
		||||
} PgBenchFunction;
 | 
			
		||||
 | 
			
		||||
typedef struct PgBenchExpr PgBenchExpr;
 | 
			
		||||
 | 
			
		||||
@ -232,7 +232,17 @@ pgbench(
 | 
			
		||||
		qr{command=19.: double 19\b},
 | 
			
		||||
		qr{command=20.: double 20\b},
 | 
			
		||||
		qr{command=21.: int 9223372036854775807\b},
 | 
			
		||||
		qr{command=23.: int [1-9]\b}, ],
 | 
			
		||||
		qr{command=23.: int [1-9]\b},
 | 
			
		||||
		qr{command=24.: double -27\b},
 | 
			
		||||
		qr{command=25.: double 1024\b},
 | 
			
		||||
		qr{command=26.: double 1\b},
 | 
			
		||||
		qr{command=27.: double 1\b},
 | 
			
		||||
		qr{command=28.: double -0.125\b},
 | 
			
		||||
		qr{command=29.: double -0.125\b},
 | 
			
		||||
		qr{command=30.: double -0.00032\b},
 | 
			
		||||
		qr{command=31.: double 8.50705917302346e\+37\b},
 | 
			
		||||
		qr{command=32.: double 1e\+30\b},
 | 
			
		||||
	],
 | 
			
		||||
	'pgbench expressions',
 | 
			
		||||
	{   '001_pgbench_expressions' => q{-- integer functions
 | 
			
		||||
\set i1 debug(random(1, 100))
 | 
			
		||||
@ -264,6 +274,16 @@ pgbench(
 | 
			
		||||
\set i1 0
 | 
			
		||||
-- yet another integer function
 | 
			
		||||
\set id debug(random_zipfian(1, 9, 1.3))
 | 
			
		||||
--- pow and power
 | 
			
		||||
\set poweri debug(pow(-3,3))
 | 
			
		||||
\set powerd debug(pow(2.0,10))
 | 
			
		||||
\set poweriz debug(pow(0,0))
 | 
			
		||||
\set powerdz debug(pow(0.0,0.0))
 | 
			
		||||
\set powernegi debug(pow(-2,-3))
 | 
			
		||||
\set powernegd debug(pow(-2.0,-3.0))
 | 
			
		||||
\set powernegd2 debug(power(-5.0,-5.0))
 | 
			
		||||
\set powerov debug(pow(9223372036854775807, 2))
 | 
			
		||||
\set powerov2 debug(pow(10,30))
 | 
			
		||||
} });
 | 
			
		||||
 | 
			
		||||
# backslash commands
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user