PostgreSQL Source Code: contrib/tsm_system_rows/tsm_system_rows.c Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
30
36
38 .name = "tsm_system_rows",
40);
41
43
44
45
58
63 double *tuples);
65 int eflags);
68 int nparams,
75
76
77
78
79
82{
84
86
87
88 tsm->repeatable_across_queries = false;
89 tsm->repeatable_across_scans = true;
90
97
99}
100
101
102
103
104static void
109 double *tuples)
110{
113 double npages;
114
115
118
121 {
123 if (ntuples < 0)
124 {
125
126 ntuples = 1000;
127 }
128 }
129 else
130 {
131
132 ntuples = 1000;
133 }
134
135
136 if (ntuples > baserel->tuples)
139
141 {
142
144
145 npages = ntuples / density;
146 }
147 else
148 {
149
150 npages = ntuples;
151 }
152
153
155
156 *pages = npages;
157 *tuples = ntuples;
158}
159
160
161
162
163static void
169
170
171
172
173static void
176 int nparams,
178{
181
182 if (ntuples < 0)
185 errmsg("sample size must not be negative")));
186
188 sampler->ntuples = ntuples;
191
192
193
194
195
196
197
199}
200
201
202
203
204
205
208{
210
211
212 if (sampler->doneblocks == 0)
213 {
214
216 {
217
219
220
221 if (nblocks == 0)
223
224
226
227
228 sampler->nblocks = nblocks;
229
230
231
234
235
237 }
238
239
241 }
242
243
247
248
249
250
251
252
253
254 do
255 {
256
258 } while (sampler->lb >= nblocks);
259
261}
262
263
264
265
266
267
268
269
270
271
276{
279
280
283
284
287 else
289
290
293
295
297}
298
299
300
301
304{
306
307 while (a != 0)
308 {
312 }
313
314 return b;
315}
316
317
318
319
320
323{
325
326
327 if (n <= 1)
328 return 1;
329
330
331
332
333
334
335 do
336 {
339 } while (r == 0 || gcd(r, n) > 1);
340
341 return r;
342}
#define InvalidBlockNumber
Node * estimate_expression_value(PlannerInfo *root, Node *node)
double clamp_row_est(double nrows)
int errcode(int sqlerrcode)
#define ereport(elevel,...)
#define palloc0_object(type)
#define PG_MODULE_MAGIC_EXT(...)
#define PG_FUNCTION_INFO_V1(funcname)
#define PG_RETURN_POINTER(x)
#define CHECK_FOR_INTERRUPTS()
#define IsA(nodeptr, _type_)
#define InvalidOffsetNumber
#define FirstOffsetNumber
#define list_make1_oid(x1)
static int64 DatumGetInt64(Datum X)
double sampler_random_fract(pg_prng_state *randstate)
void sampler_random_init_state(uint32 seed, pg_prng_state *randstate)
static void system_rows_samplescangetsamplesize(PlannerInfo *root, RelOptInfo *baserel, List *paramexprs, BlockNumber *pages, double *tuples)
static void system_rows_initsamplescan(SampleScanState *node, int eflags)
static uint32 random_relative_prime(uint32 n, pg_prng_state *randstate)
static BlockNumber system_rows_nextsampleblock(SampleScanState *node, BlockNumber nblocks)
static uint32 gcd(uint32 a, uint32 b)
static void system_rows_beginsamplescan(SampleScanState *node, Datum *params, int nparams, uint32 seed)
Datum tsm_system_rows_handler(PG_FUNCTION_ARGS)
static OffsetNumber system_rows_nextsampletuple(SampleScanState *node, BlockNumber blockno, OffsetNumber maxoffset)