Branch data Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * equalfuncs.c
4 : : * Equality functions to compare node trees.
5 : : *
6 : : * NOTE: it is intentional that parse location fields (in nodes that have
7 : : * one) are not compared. This is because we want, for example, a variable
8 : : * "x" to be considered equal() to another reference to "x" in the query.
9 : : *
10 : : *
11 : : * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
12 : : * Portions Copyright (c) 1994, Regents of the University of California
13 : : *
14 : : * IDENTIFICATION
15 : : * src/backend/nodes/equalfuncs.c
16 : : *
17 : : *-------------------------------------------------------------------------
18 : : */
19 : 441 :
20 : 441 : #include "postgres.h"
21 : :
22 : 217 : #include "miscadmin.h"
23 : 217 : #include "utils/datum.h"
24 : :
25 : 0 :
26 : 0 : /*
27 : : * Macros to simplify comparison of different kinds of fields. Use these
28 : 0 : * wherever possible to reduce the chance for silly typos. Note that these
29 : 0 : * hard-wire the convention that the local variables in an Equal routine are
30 : : * named 'a' and 'b'.
31 : 639916 : */
32 : 639916 :
33 : : /* Compare a simple scalar field (int, float, bool, enum, etc) */
34 : 22078 : #define COMPARE_SCALAR_FIELD(fldname) \
35 : 22078 : do { \
36 : : if (a->fldname != b->fldname) \
37 : 2426 : return false; \
38 : 2426 : } while (0)
39 : :
40 : 3118 : /* Compare a field that is a pointer to some kind of Node or Node tree */
41 : 3118 : #define COMPARE_NODE_FIELD(fldname) \
42 : : do { \
43 : 20 : if (!equal(a->fldname, b->fldname)) \
44 : 20 : return false; \
45 : : } while (0)
46 : 354 :
47 : 354 : /* Compare a field that is a pointer to a Bitmapset */
48 : : #define COMPARE_BITMAPSET_FIELD(fldname) \
49 : 34 : do { \
50 : 34 : if (!bms_equal(a->fldname, b->fldname)) \
51 : : return false; \
52 : 0 : } while (0)
53 : 0 :
54 : : /* Compare a field that is a pointer to a C string, or perhaps NULL */
55 : 119 : #define COMPARE_STRING_FIELD(fldname) \
56 : 119 : do { \
57 : : if (!equalstr(a->fldname, b->fldname)) \
58 : 4052 : return false; \
59 : 4052 : } while (0)
60 : :
61 : 0 : /* Macro for comparing string fields that might be NULL */
62 : 0 : #define equalstr(a, b) \
63 : : (((a) != NULL && (b) != NULL) ? (strcmp(a, b) == 0) : (a) == (b))
64 : 24503 :
65 : 24503 : /* Compare a field that is an inline array */
66 : : #define COMPARE_ARRAY_FIELD(fldname) \
67 : 0 : do { \
68 : 0 : if (memcmp(a->fldname, b->fldname, sizeof(a->fldname)) != 0) \
69 : : return false; \
70 : 9 : } while (0)
71 : 9 :
72 : : /* Compare a field that is a pointer to a simple palloc'd object of size sz */
73 : 95 : #define COMPARE_POINTER_FIELD(fldname, sz) \
74 : 95 : do { \
75 : : if (memcmp(a->fldname, b->fldname, (sz)) != 0) \
76 : 238 : return false; \
77 : 238 : } while (0)
78 : :
79 : 36 : /* Compare a parse location field (this is a no-op, per note above) */
80 : 36 : #define COMPARE_LOCATION_FIELD(fldname) \
81 : : ((void) 0)
82 : 1066 :
83 : 1066 : /* Compare a CoercionForm field (also a no-op, per comment in primnodes.h) */
84 : : #define COMPARE_COERCIONFORM_FIELD(fldname) \
85 : 0 : ((void) 0)
86 : 0 :
87 : :
88 : 3 : #include "equalfuncs.funcs.c"
89 : 3 :
90 : :
91 : 0 : /*
92 : 0 : * Support functions for nodes with custom_copy_equal attribute
93 : : */
94 : 2661 :
95 : 2661 : static bool
96 : 22078 : _equalConst(const Const *a, const Const *b)
97 : 1507 : {
98 [ + + ]: 23585 : COMPARE_SCALAR_FIELD(consttype);
99 [ + + ]: 19902 : COMPARE_SCALAR_FIELD(consttypmod);
100 [ + + ]: 19900 : COMPARE_SCALAR_FIELD(constcollid);
101 [ - + ]: 18889 : COMPARE_SCALAR_FIELD(constlen);
102 [ + + ]: 18889 : COMPARE_SCALAR_FIELD(constisnull);
103 [ - + ]: 18853 : COMPARE_SCALAR_FIELD(constbyval);
104 : 0 : COMPARE_LOCATION_FIELD(location);
105 : :
106 : 32 : /*
107 : 32 : * We treat all NULL constants of the same type as equal. Someday this
108 : : * might need to change? But datumIsEqual doesn't work on nulls, so...
109 : 1109 : */
110 [ + + ]: 19962 : if (a->constisnull)
111 : 2146 : return true;
112 : 34534 : return datumIsEqual(a->constvalue, b->constvalue,
113 : 17827 : a->constbyval, a->constlen);
114 : 22078 : }
115 : 37 :
116 : 37 : static bool
117 : 0 : _equalExtensibleNode(const ExtensibleNode *a, const ExtensibleNode *b)
118 : 3 : {
119 : 3 : const ExtensibleNodeMethods *methods;
120 : :
121 [ # # # # : 14 : COMPARE_STRING_FIELD(extnodename);
# # ]
122 : 14 :
123 : : /* At this point, we know extnodename is the same for both nodes. */
124 : 10 : methods = GetExtensibleNodeMethods(a->extnodename, false);
125 : 10 :
126 : : /* compare the private fields */
127 [ # # ]: 314 : if (!methods->nodeEqual(a, b))
128 : 314 : return false;
129 : :
130 : 5 : return true;
131 : 5 : }
132 : :
133 : 35 : static bool
134 : 62 : _equalA_Const(const A_Const *a, const A_Const *b)
135 : : {
136 [ - + ]: 27 : COMPARE_SCALAR_FIELD(isnull);
137 : 0 : /* Hack for in-line val field. Also val is not valid if isnull is true */
138 [ + - + - ]: 27 : if (!a->isnull &&
139 : 27 : !equal(&a->val, &b->val))
140 : 0 : return false;
141 : : COMPARE_LOCATION_FIELD(location);
142 : 0 :
143 : 27 : return true;
144 : 27 : }
145 : 0 :
146 : 0 : static bool
147 : 7519 : _equalBitmapset(const Bitmapset *a, const Bitmapset *b)
148 : 0 : {
149 : 7519 : return bms_equal(a, b);
150 : : }
151 : 0 :
152 : 0 : /*
153 : : * Lists are handled specially
154 : 0 : */
155 : 0 : static bool
156 : 483078 : _equalList(const List *a, const List *b)
157 : 0 : {
158 : 483078 : const ListCell *item_a;
159 : 483078 : const ListCell *item_b;
160 : 0 :
161 : 0 : /*
162 : : * Try to reject by simple scalar checks before grovelling through all the
163 : 0 : * list elements...
164 : 0 : */
165 [ - + ]: 483078 : COMPARE_SCALAR_FIELD(type);
166 [ + + ]: 483078 : COMPARE_SCALAR_FIELD(length);
167 : 0 :
168 : : /*
169 : 1297 : * We place the switch outside the loop for the sake of efficiency; this
170 : 1297 : * may not be worth doing...
171 : : */
172 [ + + + - : 463680 : switch (a->type)
- ]
173 : 4 : {
174 : : case T_List:
175 [ + - + + : 139715 : forboth(item_a, a, item_b, b)
+ - + + +
+ + + +
+ ]
176 : 0 : {
177 [ + + ]: 90422 : if (!equal(lfirst(item_a), lfirst(item_b)))
178 : 16397 : return false;
179 : 74105 : }
180 : 32936 : break;
181 : 0 : case T_IntList:
182 [ + - + + : 3605 : forboth(item_a, a, item_b, b)
+ - + + +
+ + + +
+ ]
183 : : {
184 [ + + ]: 2523 : if (lfirst_int(item_a) != lfirst_int(item_b))
185 : 2 : return false;
186 : 2521 : }
187 : 1080 : break;
188 : 0 : case T_OidList:
189 [ + - + + : 848704 : forboth(item_a, a, item_b, b)
+ - + + +
+ + + +
+ ]
190 : 0 : {
191 [ + + ]: 435403 : if (lfirst_oid(item_a) != lfirst_oid(item_b))
192 : 74552 : return false;
193 : 360851 : }
194 : 338749 : break;
195 : : case T_XidList:
196 [ # # # # : 0 : forboth(item_a, a, item_b, b)
# # # # #
# # # #
# ]
197 : 0 : {
198 [ # # ]: 0 : if (lfirst_xid(item_a) != lfirst_xid(item_b))
199 : 2059 : return false;
200 : 2059 : }
201 : 0 : break;
202 : 311 : default:
203 [ # # # # ]: 311 : elog(ERROR, "unrecognized list node type: %d",
204 : : (int) a->type);
205 : 10 : return false; /* keep compiler quiet */
206 : 10 : }
207 : :
208 : 354 : /*
209 : 354 : * If we got here, we should have run out of elements of both lists
210 : : */
211 [ + - ]: 372765 : Assert(item_a == NULL);
212 [ + - ]: 372765 : Assert(item_b == NULL);
213 : :
214 : 373135 : return true;
215 : 483448 : }
216 : :
217 : 5 :
218 : 5 : /*
219 : : * equal
220 : 108 : * returns whether two nodes are equal
221 : 108 : */
222 : : bool
223 : 1489333 : equal(const void *a, const void *b)
224 : 0 : {
225 : 1489333 : bool retval;
226 : 4 :
227 [ + + ]: 1489337 : if (a == b)
228 : 58504 : return true;
229 : 27 :
230 : 27 : /*
231 : : * note that a!=b, so only one of them can be NULL
232 : 3 : */
233 [ + + + + ]: 1430832 : if (a == NULL || b == NULL)
234 : 15839 : return false;
235 : 0 :
236 : 0 : /*
237 : : * are they the same type of nodes?
238 : 0 : */
239 [ + + ]: 1414990 : if (nodeTag(a) != nodeTag(b))
240 : 197104 : return false;
241 : 0 :
242 : 0 : /* Guard against stack overflow due to overly complex expressions */
243 : 1217886 : check_stack_depth();
244 : 0 :
245 [ + + - + : 1217886 : switch (nodeTag(a))
+ + + + +
+ - + - +
+ + + + -
+ - + + -
- + + + +
+ + + + +
+ - - - -
- - - - -
- - + + -
+ - - - -
- - + + +
+ + + - +
+ + - - -
- - - - -
- + - - -
- - - - -
+ - - - -
- - - - -
+ + + - +
+ - + - -
- - - - +
- - - - -
- - - - -
- - - - -
- - - - -
- - - - +
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - + +
- - - + -
- - + - +
- + - - +
- + + - -
+ - - - -
- ]
246 : : {
247 : 0 : #include "equalfuncs.switch.c"
248 : 0 :
249 : : case T_List:
250 : 0 : case T_IntList:
251 : 0 : case T_OidList:
252 : : case T_XidList:
253 : 483078 : retval = _equalList(a, b);
254 : 483078 : break;
255 : :
256 : 0 : default:
257 [ # # # # ]: 0 : elog(ERROR, "unrecognized node type: %d",
258 : : (int) nodeTag(a));
259 : 0 : retval = false; /* keep compiler quiet */
260 : 0 : break;
261 : : }
262 : 61 :
263 : 1217886 : return retval;
264 : 1489333 : }
265 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
266 : 0 : /* (content generated from coverage data) */
267 : : /* ... */
268 : 0 : /* ... */
269 : 0 : /* ... */
270 : : /* ... */
271 : 0 : /* ... */
272 : 0 : /* ... */
273 : : /* ... */
274 : 0 : /* ... */
275 : 0 : /* ... */
276 : : /* ... */
277 : 0 : /* ... */
278 : 0 : /* ... */
279 : : /* ... */
280 : 0 : /* ... */
281 : 0 : /* ... */
282 : : /* ... */
283 : 0 : /* ... */
284 : 0 : /* ... */
285 : : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
286 : 0 : /* (content generated from coverage data) */
287 : 0 : /* ... */
288 : : /* ... */
289 : 21 : /* ... */
290 : 21 : /* ... */
291 : : /* ... */
292 : 0 : /* ... */
293 : 0 : /* ... */
294 : : /* ... */
295 : 0 : /* ... */
296 : 0 : /* ... */
297 : : /* ... */
298 : 0 : /* ... */
299 : 0 : /* ... */
300 : : /* ... */
301 : 0 : /* ... */
302 : 0 : /* ... */
303 : : /* ... */
304 : 0 : /* ... */
305 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
306 : : /* (content generated from coverage data) */
307 : 0 : /* ... */
308 : 0 : /* ... */
309 : : /* ... */
310 : 0 : /* ... */
311 : 0 : /* ... */
312 : : /* ... */
313 : 0 : /* ... */
314 : 0 : /* ... */
315 : : /* ... */
316 : 0 : /* ... */
317 : 0 : /* ... */
318 : : /* ... */
319 : 371 : /* ... */
320 : 371 : /* ... */
321 : : /* ... */
322 : 285 : /* ... */
323 : 285 : /* ... */
324 : : /* ... */
325 : 16 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
326 : 16 : /* (content generated from coverage data) */
327 : : /* ... */
328 : 0 : /* ... */
329 : 0 : /* ... */
330 : : /* ... */
331 : 661 : /* ... */
332 : 661 : /* ... */
333 : : /* ... */
334 : 734 : /* ... */
335 : 734 : /* ... */
336 : : /* ... */
337 : 0 : /* ... */
338 : 0 : /* ... */
339 : : /* ... */
340 : 10 : /* ... */
341 : 10 : /* ... */
342 : : /* ... */
343 : 0 : /* ... */
344 : 0 : /* ... */
345 : : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
346 : 0 : /* (content generated from coverage data) */
347 : 0 : /* ... */
348 : : /* ... */
349 : 0 : /* ... */
350 : 0 : /* ... */
351 : : /* ... */
352 : 0 : /* ... */
353 : 0 : /* ... */
354 : : /* ... */
355 : 0 : /* ... */
356 : 0 : /* ... */
357 : : /* ... */
358 : 0 : /* ... */
359 : 0 : /* ... */
360 : : /* ... */
361 : 2 : /* ... */
362 : 2 : /* ... */
363 : : /* ... */
364 : 0 : /* ... */
365 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
366 : : /* (content generated from coverage data) */
367 : 0 : /* ... */
368 : 0 : /* ... */
369 : : /* ... */
370 : 0 : /* ... */
371 : 0 : /* ... */
372 : : /* ... */
373 : 0 : /* ... */
374 : 0 : /* ... */
375 : : /* ... */
376 : 0 : /* ... */
377 : 0 : /* ... */
378 : : /* ... */
379 : 0 : /* ... */
380 : 0 : /* ... */
381 : : /* ... */
382 : 0 : /* ... */
383 : 0 : /* ... */
384 : : /* ... */
385 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
386 : 0 : /* (content generated from coverage data) */
387 : : /* ... */
388 : 0 : /* ... */
389 : 0 : /* ... */
390 : : /* ... */
391 : 0 : /* ... */
392 : 0 : /* ... */
393 : : /* ... */
394 : 0 : /* ... */
395 : 0 : /* ... */
396 : : /* ... */
397 : 0 : /* ... */
398 : 0 : /* ... */
399 : : /* ... */
400 : 0 : /* ... */
401 : 0 : /* ... */
402 : : /* ... */
403 : 0 : /* ... */
404 : 0 : /* ... */
405 : : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
406 : 0 : /* (content generated from coverage data) */
407 : 0 : /* ... */
408 : : /* ... */
409 : 0 : /* ... */
410 : 0 : /* ... */
411 : : /* ... */
412 : 0 : /* ... */
413 : 0 : /* ... */
414 : : /* ... */
415 : 0 : /* ... */
416 : 0 : /* ... */
417 : : /* ... */
418 : 0 : /* ... */
419 : 0 : /* ... */
420 : : /* ... */
421 : 0 : /* ... */
422 : 0 : /* ... */
423 : : /* ... */
424 : 0 : /* ... */
425 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
426 : : /* (content generated from coverage data) */
427 : 0 : /* ... */
428 : 0 : /* ... */
429 : : /* ... */
430 : 0 : /* ... */
431 : 0 : /* ... */
432 : : /* ... */
433 : 0 : /* ... */
434 : 0 : /* ... */
435 : : /* ... */
436 : 0 : /* ... */
437 : 0 : /* ... */
438 : : /* ... */
439 : 0 : /* ... */
440 : 0 : /* ... */
441 : : /* ... */
442 : 3 : /* ... */
443 : 3 : /* ... */
444 : : /* ... */
445 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
446 : 0 : /* (content generated from coverage data) */
447 : : /* ... */
448 : 0 : /* ... */
449 : 0 : /* ... */
450 : : /* ... */
451 : 0 : /* ... */
452 : 0 : /* ... */
453 : : /* ... */
454 : 0 : /* ... */
455 : 0 : /* ... */
456 : : /* ... */
457 : 0 : /* ... */
458 : 0 : /* ... */
459 : : /* ... */
460 : 0 : /* ... */
461 : 0 : /* ... */
462 : : /* ... */
463 : 0 : /* ... */
464 : 0 : /* ... */
465 : : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
466 : 0 : /* (content generated from coverage data) */
467 : 0 : /* ... */
468 : : /* ... */
469 : 0 : /* ... */
470 : 0 : /* ... */
471 : : /* ... */
472 : 0 : /* ... */
473 : 0 : /* ... */
474 : : /* ... */
475 : 0 : /* ... */
476 : 0 : /* ... */
477 : : /* ... */
478 : 0 : /* ... */
479 : 0 : /* ... */
480 : : /* ... */
481 : 0 : /* ... */
482 : 0 : /* ... */
483 : : /* ... */
484 : 0 : /* ... */
485 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
486 : : /* (content generated from coverage data) */
487 : 0 : /* ... */
488 : 0 : /* ... */
489 : : /* ... */
490 : 0 : /* ... */
491 : 0 : /* ... */
492 : : /* ... */
493 : 0 : /* ... */
494 : 0 : /* ... */
495 : : /* ... */
496 : 0 : /* ... */
497 : 0 : /* ... */
498 : : /* ... */
499 : 0 : /* ... */
500 : 0 : /* ... */
501 : : /* ... */
502 : 0 : /* ... */
503 : 0 : /* ... */
504 : : /* ... */
505 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
506 : 0 : /* (content generated from coverage data) */
507 : : /* ... */
508 : 0 : /* ... */
509 : 0 : /* ... */
510 : : /* ... */
511 : 0 : /* ... */
512 : 0 : /* ... */
513 : : /* ... */
514 : 0 : /* ... */
515 : 0 : /* ... */
516 : : /* ... */
517 : 0 : /* ... */
518 : 0 : /* ... */
519 : : /* ... */
520 : 0 : /* ... */
521 : 0 : /* ... */
522 : : /* ... */
523 : 0 : /* ... */
524 : 0 : /* ... */
525 : : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
526 : 0 : /* (content generated from coverage data) */
527 : 0 : /* ... */
528 : : /* ... */
529 : 0 : /* ... */
530 : 0 : /* ... */
531 : : /* ... */
532 : 0 : /* ... */
533 : 0 : /* ... */
534 : : /* ... */
535 : 0 : /* ... */
536 : 0 : /* ... */
537 : : /* ... */
538 : 0 : /* ... */
539 : 0 : /* ... */
540 : : /* ... */
541 : 0 : /* ... */
542 : 0 : /* ... */
543 : : /* ... */
544 : 0 : /* ... */
545 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
546 : : /* (content generated from coverage data) */
547 : 0 : /* ... */
548 : 0 : /* ... */
549 : : /* ... */
550 : 0 : /* ... */
551 : 0 : /* ... */
552 : : /* ... */
553 : 0 : /* ... */
554 : 0 : /* ... */
555 : : /* ... */
556 : 0 : /* ... */
557 : 0 : /* ... */
558 : : /* ... */
559 : 0 : /* ... */
560 : 0 : /* ... */
561 : : /* ... */
562 : 0 : /* ... */
563 : 0 : /* ... */
564 : : /* ... */
565 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
566 : 0 : /* (content generated from coverage data) */
567 : : /* ... */
568 : 0 : /* ... */
569 : 0 : /* ... */
570 : : /* ... */
571 : 0 : /* ... */
572 : 0 : /* ... */
573 : : /* ... */
574 : 0 : /* ... */
575 : 0 : /* ... */
576 : : /* ... */
577 : 0 : /* ... */
578 : 0 : /* ... */
579 : : /* ... */
580 : 0 : /* ... */
581 : 0 : /* ... */
582 : : /* ... */
583 : 0 : /* ... */
584 : 0 : /* ... */
585 : : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
586 : 0 : /* (content generated from coverage data) */
587 : 0 : /* ... */
588 : : /* ... */
589 : 0 : /* ... */
590 : 0 : /* ... */
591 : : /* ... */
592 : 0 : /* ... */
593 : 0 : /* ... */
594 : : /* ... */
595 : 0 : /* ... */
596 : 0 : /* ... */
597 : : /* ... */
598 : 0 : /* ... */
599 : 0 : /* ... */
600 : : /* ... */
601 : 0 : /* ... */
602 : 0 : /* ... */
603 : : /* ... */
604 : 0 : /* ... */
605 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
606 : : /* (content generated from coverage data) */
607 : 0 : /* ... */
608 : 0 : /* ... */
609 : : /* ... */
610 : 0 : /* ... */
611 : 0 : /* ... */
612 : : /* ... */
613 : 0 : /* ... */
614 : 0 : /* ... */
615 : : /* ... */
616 : 0 : /* ... */
617 : 0 : /* ... */
618 : : /* ... */
619 : 0 : /* ... */
620 : 0 : /* ... */
621 : : /* ... */
622 : 0 : /* ... */
623 : 0 : /* ... */
624 : : /* ... */
625 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
626 : 0 : /* (content generated from coverage data) */
627 : : /* ... */
628 : 0 : /* ... */
629 : 0 : /* ... */
630 : : /* ... */
631 : 0 : /* ... */
632 : 0 : /* ... */
633 : : /* ... */
634 : 0 : /* ... */
635 : 0 : /* ... */
636 : : /* ... */
637 : 0 : /* ... */
638 : 0 : /* ... */
639 : : /* ... */
640 : 0 : /* ... */
641 : 0 : /* ... */
642 : : /* ... */
643 : 0 : /* ... */
644 : 0 : /* ... */
645 : : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
646 : 0 : /* (content generated from coverage data) */
647 : 0 : /* ... */
648 : : /* ... */
649 : 0 : /* ... */
650 : 0 : /* ... */
651 : : /* ... */
652 : 0 : /* ... */
653 : 0 : /* ... */
654 : : /* ... */
655 : 0 : /* ... */
656 : 0 : /* ... */
657 : : /* ... */
658 : 0 : /* ... */
659 : 0 : /* ... */
660 : : /* ... */
661 : 0 : /* ... */
662 : 0 : /* ... */
663 : : /* ... */
664 : 0 : /* ... */
665 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
666 : : /* (content generated from coverage data) */
667 : 0 : /* ... */
668 : 0 : /* ... */
669 : : /* ... */
670 : 0 : /* ... */
671 : 0 : /* ... */
672 : : /* ... */
673 : 0 : /* ... */
674 : 0 : /* ... */
675 : : /* ... */
676 : 0 : /* ... */
677 : 0 : /* ... */
678 : : /* ... */
679 : 0 : /* ... */
680 : 0 : /* ... */
681 : : /* ... */
682 : 0 : /* ... */
683 : 0 : /* ... */
684 : : /* ... */
685 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
686 : 0 : /* (content generated from coverage data) */
687 : : /* ... */
688 : 0 : /* ... */
689 : 0 : /* ... */
690 : : /* ... */
691 : 0 : /* ... */
692 : 0 : /* ... */
693 : : /* ... */
694 : 0 : /* ... */
695 : 0 : /* ... */
696 : : /* ... */
697 : 0 : /* ... */
698 : 0 : /* ... */
699 : : /* ... */
700 : 0 : /* ... */
701 : 0 : /* ... */
702 : : /* ... */
703 : 0 : /* ... */
704 : 0 : /* ... */
705 : : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
706 : 0 : /* (content generated from coverage data) */
707 : 0 : /* ... */
708 : : /* ... */
709 : 0 : /* ... */
710 : 0 : /* ... */
711 : : /* ... */
712 : 0 : /* ... */
713 : 0 : /* ... */
714 : : /* ... */
715 : 0 : /* ... */
716 : 0 : /* ... */
717 : : /* ... */
718 : 0 : /* ... */
719 : 0 : /* ... */
720 : : /* ... */
721 : 0 : /* ... */
722 : 0 : /* ... */
723 : : /* ... */
724 : 0 : /* ... */
725 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
726 : : /* (content generated from coverage data) */
727 : 0 : /* ... */
728 : 0 : /* ... */
729 : : /* ... */
730 : 0 : /* ... */
731 : 0 : /* ... */
732 : : /* ... */
733 : 0 : /* ... */
734 : 0 : /* ... */
735 : : /* ... */
736 : 0 : /* ... */
737 : 0 : /* ... */
738 : : /* ... */
739 : 0 : /* ... */
740 : 0 : /* ... */
741 : : /* ... */
742 : 0 : /* ... */
743 : 0 : /* ... */
744 : : /* ... */
745 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
746 : 0 : /* (content generated from coverage data) */
747 : : /* ... */
748 : 0 : /* ... */
749 : 0 : /* ... */
750 : : /* ... */
751 : 0 : /* ... */
752 : 0 : /* ... */
753 : : /* ... */
754 : 0 : /* ... */
755 : 0 : /* ... */
756 : : /* ... */
757 : 0 : /* ... */
758 : 0 : /* ... */
759 : : /* ... */
760 : 0 : /* ... */
761 : 0 : /* ... */
762 : : /* ... */
763 : 0 : /* ... */
764 : 0 : /* ... */
765 : : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
766 : 0 : /* (content generated from coverage data) */
767 : 0 : /* ... */
768 : : /* ... */
769 : 0 : /* ... */
770 : 0 : /* ... */
771 : : /* ... */
772 : 0 : /* ... */
773 : 0 : /* ... */
774 : : /* ... */
775 : 0 : /* ... */
776 : 0 : /* ... */
777 : : /* ... */
778 : 0 : /* ... */
779 : 0 : /* ... */
780 : : /* ... */
781 : 0 : /* ... */
782 : 0 : /* ... */
783 : : /* ... */
784 : 0 : /* ... */
785 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
786 : : /* (content generated from coverage data) */
787 : 0 : /* ... */
788 : 0 : /* ... */
789 : : /* ... */
790 : 0 : /* ... */
791 : 0 : /* ... */
792 : : /* ... */
793 : 0 : /* ... */
794 : 0 : /* ... */
795 : : /* ... */
796 : 0 : /* ... */
797 : 0 : /* ... */
798 : : /* ... */
799 : 0 : /* ... */
800 : 0 : /* ... */
801 : : /* ... */
802 : 0 : /* ... */
803 : 0 : /* ... */
804 : : /* ... */
805 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
806 : 0 : /* (content generated from coverage data) */
807 : : /* ... */
808 : 0 : /* ... */
809 : 0 : /* ... */
810 : : /* ... */
811 : 0 : /* ... */
812 : 0 : /* ... */
813 : : /* ... */
814 : 0 : /* ... */
815 : 0 : /* ... */
816 : : /* ... */
817 : 0 : /* ... */
818 : 0 : /* ... */
819 : : /* ... */
820 : 88 : /* ... */
821 : 88 : /* ... */
822 : : /* ... */
823 : 1122 : /* ... */
824 : 1122 : /* ... */
825 : : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
826 : 0 : /* (content generated from coverage data) */
827 : 0 : /* ... */
828 : : /* ... */
829 : 0 : /* ... */
830 : 0 : /* ... */
831 : : /* ... */
832 : 0 : /* ... */
833 : 0 : /* ... */
834 : : /* ... */
835 : 32 : /* ... */
836 : 32 : /* ... */
837 : : /* ... */
838 : 0 : /* ... */
839 : 0 : /* ... */
840 : : /* ... */
841 : 0 : /* ... */
842 : 0 : /* ... */
843 : : /* ... */
844 : 0 : /* ... */
845 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
846 : : /* (content generated from coverage data) */
847 : 7519 : /* ... */
848 : 7519 : /* ... */
849 : : /* ... */
850 : 0 : /* ... */
851 : 0 : /* ... */
852 : : /* ... */
853 : 24 : /* ... */
854 : 24 : /* ... */
855 : : /* ... */
856 : 0 : /* ... */
857 : 0 : /* ... */
858 : : /* ... */
859 : 0 : /* ... */
860 : 0 : /* ... */
861 : : /* ... */
862 : 13695 : /* ... */
863 : 13695 : /* ... */
864 : : /* ... */
865 : 0 : /* /Users/rhaas/pgsql/src/backend/nodes/equalfuncs.c not long enough */
866 : 0 : /* END: function "equal" */
|