Thread: Re: [HACKERS] how solve diff of API counstruct_md_array between
I have developed a patch which creates a new pg_config.h define called PG_VERSION_NUM, which is a number like 80200, with no beta/devel designation. I think this will be helpful (eventually) for people writing plug-ins. Attached. --------------------------------------------------------------------------- Martijn van Oosterhout wrote: -- Start of PGP signed section. > On Fri, Feb 24, 2006 at 02:57:19PM -0500, Bruce Momjian wrote: > > Yea, that is probably the best you can do currently, but it is pretty > > ugly. We have PQserverVersion() in libpq for use by clients, which > > does: > > > > conn->sversion = (100 * vmaj + vmin) * 100 + vrev; > > > > Perhaps we should have a function in the server that has this. > > PG_VERSION isn't easy to use because it is a string, and changes during > > minor versions. > > We don't need a function to do it, because none of that can be used by > a compiler. If a structure gains or loses a member, the only way you > can do it portibly is if the compiler can determine which version to > use. The only thing the preprocessor can use is: > > - Is a (preprocessor) symbol defined > - Is it numerically greater equal or less than another number > > So the only solution would be something like: > > #define POSTGRESQL_MAJOR 8 > #define POSTGRESQL_MINOR 1 > #define POSTGRESQL_RELEASE 1 > > Or > > #define POSTGRESQL_VERSION 80101 > > Maybe something to indicate beta or CVS. Anything else is not likely to > be an improvement on what we have now. Besides, adding stuff now is not > terribly useful since people want to support back to 7.3/7.4 and until > a new scheme is old enough that 8.2 is ancient (first release it could > possibly appear in) it won't get a lot of usage. > > Have a nice day, > -- > Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > > Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a > > tool for doing 5% of the work and then sitting around waiting for someone > > else to do the other 95% so you can sue them. -- End of PGP section, PGP failed! -- Bruce Momjian http://candle.pha.pa.us SRA OSS, Inc. http://www.sraoss.com + If your life is a hard drive, Christ can be your backup. + Index: configure =================================================================== RCS file: /cvsroot/pgsql/configure,v retrieving revision 1.480 diff -c -c -r1.480 configure *** configure 21 Feb 2006 06:06:44 -0000 1.480 --- configure 28 Feb 2006 05:43:36 -0000 *************** *** 4742,4747 **** --- 4742,4755 ---- fi + # Supply a numeric version string for use by 3rd party add-ons + PG_VERSION_NUM="`echo "$PACKAGE_VERSION" | sed 's/A-Za-z.*$//' | + $AWK -F'\.' '{printf \"%d%02d\", $1, $2; printf \"%02d\", (NF == 2) ? 0 : $3}'`" + + cat >>confdefs.h <<_ACEOF + #define PG_VERSION_NUM $PG_VERSION_NUM + _ACEOF + ## ## Libraries Index: configure.in =================================================================== RCS file: /cvsroot/pgsql/configure.in,v retrieving revision 1.450 diff -c -c -r1.450 configure.in *** configure.in 21 Feb 2006 06:06:50 -0000 1.450 --- configure.in 28 Feb 2006 05:43:36 -0000 *************** *** 26,32 **** AC_PREFIX_DEFAULT(/usr/local/pgsql) AC_SUBST(configure_args, [$ac_configure_args]) ! AC_DEFINE_UNQUOTED(PG_VERSION, "$PACKAGE_VERSION", [PostgreSQL version]) AC_CANONICAL_HOST --- 26,32 ---- AC_PREFIX_DEFAULT(/usr/local/pgsql) AC_SUBST(configure_args, [$ac_configure_args]) ! AC_DEFINE_UNQUOTED(PG_VERSION, "$PACKAGE_VERSION", [PostgreSQL version as a string]) AC_CANONICAL_HOST *************** *** 585,590 **** --- 585,594 ---- PGAC_CHECK_PYTHON_EMBED_SETUP fi + # Supply a numeric version string for use by 3rd party add-ons + PG_VERSION_NUM="`echo "$PACKAGE_VERSION" | sed 's/[A-Za-z].*$//' | + $AWK -F'\.' '{printf \"%d%02d\", $1, $2; printf \"%02d\", (NF == 2) ? 0 : $3}'`" + AC_DEFINE_UNQUOTED(PG_VERSION_NUM, $PG_VERSION_NUM, [PostgreSQL version as a number]) ## ## Libraries Index: src/include/pg_config.h.in =================================================================== RCS file: /cvsroot/pgsql/src/include/pg_config.h.in,v retrieving revision 1.93 diff -c -c -r1.93 pg_config.h.in *** src/include/pg_config.h.in 21 Feb 2006 06:06:50 -0000 1.93 --- src/include/pg_config.h.in 28 Feb 2006 05:43:42 -0000 *************** *** 547,555 **** (--with-krb-srvnam=NAME) */ #undef PG_KRB_SRVNAM ! /* PostgreSQL version */ #undef PG_VERSION /* A string containing the version number, platform, and C compiler */ #undef PG_VERSION_STR --- 547,558 ---- (--with-krb-srvnam=NAME) */ #undef PG_KRB_SRVNAM ! /* PostgreSQL version as a string */ #undef PG_VERSION + /* PostgreSQL version as a number */ + #undef PG_VERSION_NUM + /* A string containing the version number, platform, and C compiler */ #undef PG_VERSION_STR
On Tue, Feb 28, 2006 at 12:45:18AM -0500, Bruce Momjian wrote: > > I have developed a patch which creates a new pg_config.h define called > PG_VERSION_NUM, which is a number like 80200, with no beta/devel > designation. I think this will be helpful (eventually) for people > writing plug-ins. Attached. I like it. Arguably the development period between 8.1 and 8.2 could be designated 80190 (8.1.90) with various betas being 80191-80199. But hey, having any symbol define the current version is better than nothing at all. Thanks for this, -- Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a > tool for doing 5% of the work and then sitting around waiting for someone > else to do the other 95% so you can sue them.
Attachment
Martijn van Oosterhout wrote: -- Start of PGP signed section. > On Tue, Feb 28, 2006 at 12:45:18AM -0500, Bruce Momjian wrote: > > > > I have developed a patch which creates a new pg_config.h define called > > PG_VERSION_NUM, which is a number like 80200, with no beta/devel > > designation. I think this will be helpful (eventually) for people > > writing plug-ins. Attached. > > I like it. Arguably the development period between 8.1 and 8.2 could be > designated 80190 (8.1.90) with various betas being 80191-80199. But > hey, having any symbol define the current version is better than > nothing at all. > > Thanks for this, > -- > Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > > Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a > > tool for doing 5% of the work and then sitting around waiting for someone > > else to do the other 95% so you can sue them. OK, updated version of the patch attached and applied. -- Bruce Momjian http://candle.pha.pa.us SRA OSS, Inc. http://www.sraoss.com + If your life is a hard drive, Christ can be your backup. + Index: configure =================================================================== RCS file: /cvsroot/pgsql/configure,v retrieving revision 1.480 diff -c -c -r1.480 configure *** configure 21 Feb 2006 06:06:44 -0000 1.480 --- configure 28 Feb 2006 16:39:09 -0000 *************** *** 4742,4747 **** --- 4742,4755 ---- fi + # Supply a numeric version string for use by 3rd party add-ons + PG_VERSION_NUM="`echo "$PACKAGE_VERSION" | sed 's/A-Za-z.*$//' | + $AWK -F'\.' '{printf \"%d%02d%02d\", $1, $2, (NF >= 3) ? $3 : 0}'`" + + cat >>confdefs.h <<_ACEOF + #define PG_VERSION_NUM $PG_VERSION_NUM + _ACEOF + ## ## Libraries Index: configure.in =================================================================== RCS file: /cvsroot/pgsql/configure.in,v retrieving revision 1.450 diff -c -c -r1.450 configure.in *** configure.in 21 Feb 2006 06:06:50 -0000 1.450 --- configure.in 28 Feb 2006 16:39:10 -0000 *************** *** 26,32 **** AC_PREFIX_DEFAULT(/usr/local/pgsql) AC_SUBST(configure_args, [$ac_configure_args]) ! AC_DEFINE_UNQUOTED(PG_VERSION, "$PACKAGE_VERSION", [PostgreSQL version]) AC_CANONICAL_HOST --- 26,32 ---- AC_PREFIX_DEFAULT(/usr/local/pgsql) AC_SUBST(configure_args, [$ac_configure_args]) ! AC_DEFINE_UNQUOTED(PG_VERSION, "$PACKAGE_VERSION", [PostgreSQL version as a string]) AC_CANONICAL_HOST *************** *** 585,590 **** --- 585,594 ---- PGAC_CHECK_PYTHON_EMBED_SETUP fi + # Supply a numeric version string for use by 3rd party add-ons + PG_VERSION_NUM="`echo "$PACKAGE_VERSION" | sed 's/[A-Za-z].*$//' | + $AWK -F'\.' '{printf \"%d%02d%02d\", $1, $2, (NF >= 3) ? $3 : 0}'`" + AC_DEFINE_UNQUOTED(PG_VERSION_NUM, $PG_VERSION_NUM, [PostgreSQL version as a number]) ## ## Libraries Index: src/include/pg_config.h.in =================================================================== RCS file: /cvsroot/pgsql/src/include/pg_config.h.in,v retrieving revision 1.93 diff -c -c -r1.93 pg_config.h.in *** src/include/pg_config.h.in 21 Feb 2006 06:06:50 -0000 1.93 --- src/include/pg_config.h.in 28 Feb 2006 16:39:19 -0000 *************** *** 547,555 **** (--with-krb-srvnam=NAME) */ #undef PG_KRB_SRVNAM ! /* PostgreSQL version */ #undef PG_VERSION /* A string containing the version number, platform, and C compiler */ #undef PG_VERSION_STR --- 547,558 ---- (--with-krb-srvnam=NAME) */ #undef PG_KRB_SRVNAM ! /* PostgreSQL version as a string */ #undef PG_VERSION + /* PostgreSQL version as a number */ + #undef PG_VERSION_NUM + /* A string containing the version number, platform, and C compiler */ #undef PG_VERSION_STR
Bruce Momjian wrote: > Martijn van Oosterhout wrote: > -- Start of PGP signed section. > > > On Tue, Feb 28, 2006 at 12:45:18AM -0500, Bruce Momjian wrote: > > > I have developed a patch which creates a new pg_config.h define > > > called PG_VERSION_NUM, which is a number like 80200, with no > > > beta/devel designation. I think this will be helpful > > > (eventually) for people writing plug-ins. Attached. > > > > I like it. Arguably the development period between 8.1 and 8.2 > > could be designated 80190 (8.1.90) with various betas being > > 80191-80199. But hey, having any symbol define the current version > > is better than nothing at all. > > > > Thanks for this, > > -- > > Martijn van Oosterhout <kleptog@svana.org> > > http://svana.org/kleptog/ > > > > > Patent. n. Genius is 5% inspiration and 95% perspiration. A > > > patent is a tool for doing 5% of the work and then sitting around > > > waiting for someone else to do the other 95% so you can sue them. > > OK, updated version of the patch attached and applied. I still object to this. What is wrong with using the catalog version number? -- Peter Eisentraut http://developer.postgresql.org/~petere/
Peter Eisentraut wrote: > Bruce Momjian wrote: > > Martijn van Oosterhout wrote: > > -- Start of PGP signed section. > > > > > On Tue, Feb 28, 2006 at 12:45:18AM -0500, Bruce Momjian wrote: > > > > I have developed a patch which creates a new pg_config.h define > > > > called PG_VERSION_NUM, which is a number like 80200, with no > > > > beta/devel designation. I think this will be helpful > > > > (eventually) for people writing plug-ins. Attached. > > > > > > I like it. Arguably the development period between 8.1 and 8.2 > > > could be designated 80190 (8.1.90) with various betas being > > > 80191-80199. But hey, having any symbol define the current version > > > is better than nothing at all. > > > > > > Thanks for this, > > > -- > > > Martijn van Oosterhout <kleptog@svana.org> > > > http://svana.org/kleptog/ > > > > > > > Patent. n. Genius is 5% inspiration and 95% perspiration. A > > > > patent is a tool for doing 5% of the work and then sitting around > > > > waiting for someone else to do the other 95% so you can sue them. > > > > OK, updated version of the patch attached and applied. > > I still object to this. What is wrong with using the catalog version > number? It is pretty obscure to use a date stamp like that, rather than a number just like PQserverVersion(). Also, it gives minor version information that the catalog version does not. -- Bruce Momjian http://candle.pha.pa.us SRA OSS, Inc. http://www.sraoss.com + If your life is a hard drive, Christ can be your backup. +
Peter Eisentraut <peter_e@gmx.net> writes: > Bruce Momjian wrote: >> OK, updated version of the patch attached and applied. > I still object to this. What is wrong with using the catalog version > number? It's partially redundant, but only partially, and I agree that it'll probably be easier for people to use than the catversion number. The case where it's not redundant would be if an add-on needs to deal with an internal API change made in a sub-release, e.g. 8.1.4, where the catversion number is not going to change. We've certainly done that before and will do so again, when there's no other way to fix a bug. regards, tom lane
Tom Lane wrote: > Peter Eisentraut <peter_e@gmx.net> writes: > > Bruce Momjian wrote: > >> OK, updated version of the patch attached and applied. > > > I still object to this. What is wrong with using the catalog version > > number? > > It's partially redundant, but only partially, and I agree that it'll > probably be easier for people to use than the catversion number. > > The case where it's not redundant would be if an add-on needs to deal > with an internal API change made in a sub-release, e.g. 8.1.4, where > the catversion number is not going to change. We've certainly done that > before and will do so again, when there's no other way to fix a bug. Also, that macro block where Joe Conway compared catalog version numbers and defined understandable macro names cried out for a solution. -- Bruce Momjian http://candle.pha.pa.us SRA OSS, Inc. http://www.sraoss.com + If your life is a hard drive, Christ can be your backup. +
Bruce Momjian <pgman@candle.pha.pa.us> writes: > Tom Lane wrote: >> It's partially redundant, but only partially, and I agree that it'll >> probably be easier for people to use than the catversion number. > Also, that macro block where Joe Conway compared catalog version numbers > and defined understandable macro names cried out for a solution. It's worth pointing out here that catversion was only intended to be useful within a development cycle, ie, to prevent developers from wasting time chasing pseudo-bugs that were really due to mismatch of their newly compiled backend executable with not-so-new system catalog contents. We never intended any code to depend on its specific value, else we'd have used a definition with more mnemonic content than a date-stamp. regards, tom lane