@@ -249,6 +249,57 @@ bool launch_agent(void)
249
249
return true;
250
250
}
251
251
252
+ /* PGPRO 10-13 check to be "(certified)", with exceptional case PGPRO_11 conforming to "(standard certified)" */
253
+ static bool check_certified ()
254
+ {
255
+ #ifdef PGPRO_VERSION_STR
256
+ return strstr (PGPRO_VERSION_STR , "(certified)" ) ||
257
+ strstr (PGPRO_VERSION_STR , ("(standard certified)" ));
258
+ #endif
259
+ return false;
260
+ }
261
+
262
+ //TODO REVIEW review coding standard https://jira.postgrespro.ru/browse/PBCKP-251 with @funny_falcon, newlines, braces etc
263
+ static char * extract_pg_edition_str ()
264
+ {
265
+ static char * vanilla = "vanilla" ;
266
+ static char * std = "standard" ;
267
+ static char * ent = "enterprise" ;
268
+ static char * std_cert = "standard-certified" ;
269
+ static char * ent_cert = "enterprise-certified" ;
270
+
271
+ #ifdef PGPRO_EDITION
272
+ if (strcasecmp (PGPRO_EDITION , "1C" ) == 0 )
273
+ return vanilla ;
274
+
275
+ /* these "certified" checks are applicable to PGPRO from 9.6 up to 12 versions.
276
+ * 13+ certified versions are compatible to non-certified ones */
277
+ if (PG_VERSION_NUM < 100000 )
278
+ {
279
+ if (strcmp (PGPRO_EDITION , "standard-certified" ) == 0 )
280
+ return std_cert ;
281
+ else if (strcmp (PGPRO_EDITION , "enterprise-certified" ))
282
+ return ent_cert ;
283
+ else
284
+ Assert ("Bad #define PGPRO_EDITION value" == 0 );
285
+ }
286
+
287
+ if (check_certified ())
288
+ {
289
+ if (strcmp (PGPRO_EDITION , "standard" ))
290
+ return std_cert ;
291
+ else if (strcmp (PGPRO_EDITION , "enterprise" ) == 0 )
292
+ return ent_cert ;
293
+ else
294
+ Assert ("Bad #define PGPRO_EDITION value" == 0 );
295
+ }
296
+
297
+ return PGPRO_EDITION ;
298
+ #else
299
+ return vanilla ;
300
+ #endif
301
+ }
302
+
252
303
#define COMPATIBILITY_VAL_STR (macro ) #macro, macro
253
304
#define COMPATIBILITY_VAL_INT_HELPER (macro , helper_buf , buf_size ) (snprintf(helper_buf, buf_size, "%d", macro), helper_buf)
254
305
#define COMPATIBILITY_VAL_INT (macro , helper_buf , buf_size ) #macro, COMPATIBILITY_VAL_INT_HELPER(macro, helper_buf, buf_size)
@@ -267,11 +318,8 @@ size_t prepare_compatibility_str(char* compatibility_buf, size_t compatibility_b
267
318
char compatibility_val_int_macro_helper_buf [32 ];
268
319
char * compatibility_params [] = {
269
320
COMPATIBILITY_VAL_STR (PG_MAJORVERSION ),
270
- #ifdef PGPRO_EDN
271
- //TODO REVIEW can use edition.h/extract_pgpro_edition() or similar
272
- COMPATIBILITY_VAL_STR (PGPRO_EDN ),
273
- #endif
274
- //TODO REVIEW remove? no difference between 32/64 in global/pg_control.
321
+ "edition" , extract_pg_edition_str (),
322
+ /* 32/64 bits compatibility */
275
323
COMPATIBILITY_VAL_INT (SIZEOF_VOID_P ,
276
324
compatibility_val_int_macro_helper_buf , sizeof compatibility_val_int_macro_helper_buf ),
277
325
};
0 commit comments