6f3820f37 adjusted the assert-enabled validation of the CompactAttribute
to call a new external function to perform the validation. That commit
made it so the function was only available when building with
USE_ASSERT_CHECKING, and because TupleDescCompactAttr() is a static
inline function, the call to verify_compact_attribute() was compiled
into any extension which uses TupleDescCompactAttr(). This caused issues
for such extensions when loading the assert-enabled extension into
PostgreSQL versions without asserts enabled due to that function being
unavailable in core.
To fix this, make verify_compact_attribute() available unconditionally,
but make it do nothing unless building with USE_ASSERT_CHECKING.
Author: Andrew Kane <
[email protected]>
Reviewed-by: David Rowley <[email protected]>Reviewed-by: Tom Lane <[email protected]>Discussion: https://postgr.es/m/CAOdR5yHfMEMW00XGo=v1zCVUS6Huq2UehXdvKnwtXPTcZwXhmg@mail.gmail.com
populate_compact_attribute_internal(src, dst);
}
-#ifdef USE_ASSERT_CHECKING
/*
* verify_compact_attribute
* In Assert enabled builds, we verify that the CompactAttribute is
void
verify_compact_attribute(TupleDesc tupdesc, int attnum)
{
+#ifdef USE_ASSERT_CHECKING
CompactAttribute *cattr = &tupdesc->compact_attrs[attnum];
Form_pg_attribute attr = TupleDescAttr(tupdesc, attnum);
CompactAttribute tmp;
/* Check the freshly populated CompactAttribute matches the TupleDesc's */
Assert(memcmp(&tmp, cattr, sizeof(CompactAttribute)) == 0);
-}
#endif
-
+}
/*
* CreateTemplateTupleDesc
#undef TupleDescAttrAddress
-#ifdef USE_ASSERT_CHECKING
extern void verify_compact_attribute(TupleDesc, int attnum);
-#endif
/*
* Accessor for the i'th CompactAttribute element of tupdesc.