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

96 tsm->EndSampleScan = NULL;

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 {

309 c = a;

310 a = b % a;

311 b = c;

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)