Line data Source code
1 : /*------------------------------------------------------------------------ 2 : * 3 : * geqo_random.c 4 : * random number generator 5 : * 6 : * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group 7 : * Portions Copyright (c) 1994, Regents of the University of California 8 : * 9 : * src/backend/optimizer/geqo/geqo_random.c 10 : * 11 : *------------------------------------------------------------------------- 12 : */ 13 : 14 : #include "postgres.h" 15 : 16 : #include "optimizer/geqo_random.h" 17 : 18 : void 19 42 : geqo_set_seed(PlannerInfo *root, double seed) 20 : { 21 42 : GeqoPrivateData *private = GetGeqoPrivateData(root); 22 : 23 42 : pg_prng_fseed(&private->random_state, seed); 24 42 : } 25 : 26 : double 27 4524 : geqo_rand(PlannerInfo *root) 28 : { 29 4524 : GeqoPrivateData *private = GetGeqoPrivateData(root); 30 : 31 4524 : return pg_prng_double(&private->random_state); 32 : } 33 : 34 : int 35 5910 : geqo_randint(PlannerInfo *root, int upper, int lower) 36 : { 37 5910 : GeqoPrivateData *private = GetGeqoPrivateData(root); 38 : 39 : /* 40 : * In current usage, "lower" is never negative so we can just use 41 : * pg_prng_uint64_range directly. 42 : */ 43 5910 : return (int) pg_prng_uint64_range(&private->random_state, lower, upper); 44 : }