PostgreSQL Source Code: src/backend/access/gist/gistvalidate.c Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

15

26

27

28

29

30

31bool

33{

34 bool result = true;

37 Oid opfamilyoid;

38 Oid opcintype;

39 Oid opckeytype;

40 char *opclassname;

41 char *opfamilyname;

43 *oprlist;

44 List *grouplist;

46 int i;

48

49

52 elog(ERROR, "cache lookup failed for operator class %u", opclassoid);

54

55 opfamilyoid = classform->opcfamily;

56 opcintype = classform->opcintype;

57 opckeytype = classform->opckeytype;

59 opckeytype = opcintype;

60 opclassname = NameStr(classform->opcname);

61

62

64

65

68

69

71 {

74 bool ok;

75

76

77

78

79

80 if (procform->amproclefttype != procform->amprocrighttype)

81 {

83 (errcode(ERRCODE_INVALID_OBJECT_DEFINITION),

84 errmsg("operator family \"%s\" of access method %s contains support function %s with different left and right input types",

85 opfamilyname, "gist",

87 result = false;

88 }

89

90

91

92

93

94 if (procform->amproclefttype != opcintype)

95 continue;

96

97

98 switch (procform->amprocnum)

99 {

102 5, 5, INTERNALOID, opcintype,

103 INT2OID, OIDOID, INTERNALOID);

104 break;

107 2, 2, INTERNALOID, INTERNALOID);

108 break;

113 1, 1, INTERNALOID);

114 break;

117 3, 3, INTERNALOID,

118 INTERNALOID, INTERNALOID);

119 break;

122 2, 2, INTERNALOID, INTERNALOID);

123 break;

126 3, 3, opckeytype, opckeytype,

127 INTERNALOID);

128 break;

131 5, 5, INTERNALOID, opcintype,

132 INT2OID, OIDOID, INTERNALOID);

133 break;

136 break;

139 1, 1, INTERNALOID);

140 break;

143 1, 1, INT4OID) &&

144 procform->amproclefttype == ANYOID &&

145 procform->amprocrighttype == ANYOID;

146 break;

147 default:

149 (errcode(ERRCODE_INVALID_OBJECT_DEFINITION),

150 errmsg("operator family \"%s\" of access method %s contains function %s with invalid support number %d",

151 opfamilyname, "gist",

153 procform->amprocnum)));

154 result = false;

155 continue;

156 }

157

158 if (!ok)

159 {

161 (errcode(ERRCODE_INVALID_OBJECT_DEFINITION),

162 errmsg("operator family \"%s\" of access method %s contains function %s with wrong signature for support number %d",

163 opfamilyname, "gist",

165 procform->amprocnum)));

166 result = false;

167 }

168 }

169

170

172 {

175 Oid op_rettype;

176

177

178 if (oprform->amopstrategy < 1)

179 {

181 (errcode(ERRCODE_INVALID_OBJECT_DEFINITION),

182 errmsg("operator family \"%s\" of access method %s contains operator %s with invalid strategy number %d",

183 opfamilyname, "gist",

185 oprform->amopstrategy)));

186 result = false;

187 }

188

189

190 if (oprform->amoppurpose != AMOP_SEARCH)

191 {

192

194 oprform->amoplefttype,

195 oprform->amoplefttype,

197 {

199 (errcode(ERRCODE_INVALID_OBJECT_DEFINITION),

200 errmsg("operator family \"%s\" of access method %s contains unsupported ORDER BY specification for operator %s",

201 opfamilyname, "gist",

203 result = false;

204 }

205

208 {

210 (errcode(ERRCODE_INVALID_OBJECT_DEFINITION),

211 errmsg("operator family \"%s\" of access method %s contains incorrect ORDER BY opfamily specification for operator %s",

212 opfamilyname, "gist",

214 result = false;

215 }

216 }

217 else

218 {

219

220 op_rettype = BOOLOID;

221 }

222

223

225 oprform->amoplefttype,

226 oprform->amoprighttype))

227 {

229 (errcode(ERRCODE_INVALID_OBJECT_DEFINITION),

230 errmsg("operator family \"%s\" of access method %s contains operator %s with wrong signature",

231 opfamilyname, "gist",

233 result = false;

234 }

235 }

236

237

239 opclassgroup = NULL;

240 foreach(lc, grouplist)

241 {

243

244

245 if (thisgroup->lefttype == opcintype &&

246 thisgroup->righttype == opcintype)

247 opclassgroup = thisgroup;

248

249

250

251

252

253

254

255

256

257 }

258

259

261 {

262 if (opclassgroup &&

264 continue;

269 continue;

271 (errcode(ERRCODE_INVALID_OBJECT_DEFINITION),

272 errmsg("operator class \"%s\" of access method %s is missing support function %d",

273 opclassname, "gist", i)));

274 result = false;

275 }

276

280

281 return result;

282}

283

284

285

286

287void

289 Oid opclassoid,

290 List *operators,

292{

294

295

296

297

298

299

300

301

302

303 foreach(lc, operators)

304 {

306

310 }

311

312

313

314

315

316

317

318

320 {

322

324 {

330

332 break;

340

344 break;

345 default:

347 (errcode(ERRCODE_INVALID_OBJECT_DEFINITION),

348 errmsg("support function number %d is invalid for access method %s",

349 op->number, "gist")));

350 break;

351 }

352 }

353}

bool check_amproc_signature(Oid funcid, Oid restype, bool exact, int minargs, int maxargs,...)

bool check_amop_signature(Oid opno, Oid restype, Oid lefttype, Oid righttype)

List * identify_opfamily_groups(CatCList *oprlist, CatCList *proclist)

bool opfamily_can_sort_type(Oid opfamilyoid, Oid datatypeoid)

bool check_amoptsproc_signature(Oid funcid)

#define OidIsValid(objectId)

void ReleaseCatCacheList(CatCList *list)

int errcode(int sqlerrcode)

int errmsg(const char *fmt,...)

#define ereport(elevel,...)

#define GIST_STRATNUM_PROC

#define GIST_DECOMPRESS_PROC

#define GIST_PICKSPLIT_PROC

#define GIST_CONSISTENT_PROC

#define GIST_SORTSUPPORT_PROC

#define GIST_COMPRESS_PROC

#define GIST_PENALTY_PROC

#define GIST_OPTIONS_PROC

#define GIST_DISTANCE_PROC

void gistadjustmembers(Oid opfamilyoid, Oid opclassoid, List *operators, List *functions)

bool gistvalidate(Oid opclassoid)

#define HeapTupleIsValid(tuple)

static void * GETSTRUCT(const HeapTupleData *tuple)

Oid get_opfamily_proc(Oid opfamily, Oid lefttype, Oid righttype, int16 procnum)

Oid get_op_rettype(Oid opno)

char * get_opfamily_name(Oid opfid, bool missing_ok)

FormData_pg_amop * Form_pg_amop

FormData_pg_amproc * Form_pg_amproc

FormData_pg_opclass * Form_pg_opclass

static Datum ObjectIdGetDatum(Oid X)

static const struct fns functions

char * format_procedure(Oid procedure_oid)

char * format_operator(Oid operator_oid)

CatCTup * members[FLEXIBLE_ARRAY_MEMBER]

void ReleaseSysCache(HeapTuple tuple)

HeapTuple SearchSysCache1(int cacheId, Datum key1)

#define SearchSysCacheList1(cacheId, key1)