Thread: Re: [HACKERS] how solve diff of API counstruct_md_array between

Re: [HACKERS] how solve diff of API counstruct_md_array between

From
Bruce Momjian
Date:
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


Re: [HACKERS] how solve diff of API counstruct_md_array between

From
Martijn van Oosterhout
Date:
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

Re: [HACKERS] how solve diff of API counstruct_md_array between

From
Bruce Momjian
Date:
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


Re: [HACKERS] how solve diff of API counstruct_md_array between

From
Peter Eisentraut
Date:
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/

Re: [HACKERS] how solve diff of API counstruct_md_array between

From
Bruce Momjian
Date:
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. +

Re: [HACKERS] how solve diff of API counstruct_md_array between

From
Tom Lane
Date:
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

Re: [HACKERS] how solve diff of API counstruct_md_array between

From
Bruce Momjian
Date:
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. +

Re: [HACKERS] how solve diff of API counstruct_md_array between

From
Tom Lane
Date:
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