Small changes to facilitate Win32 port
Hi there. I'm yet another developer working full-time on a native windows
port. I'm also working closely with Jan Wieck (next office). I know there is
a reluctance to modify the code base to support native win32, and I realize
that no decision has yet been made. However, ...
A few of the identifier names used in postgres collide with WIN32 or MFC names.
To keep my working copy of the code as close to the released source as
possible, I do have some superficial changes that I would like to put in the
code base early:
1. Rename to avoid structures/functions with same name:
a. PROC => PGPROC
b. GetUserName() => GetUserNameFromId()
c. GetCurrentTime() => GetCurrentDateTime()
2. Add _P to the following lex/yacc tokens to avoid collisions
CONST, CHAR, DELETE, FLOAT, GROUP, IN, OUT
3. Rename two local macros
a. MEM_FREE => MEM_FREE_IT in backend/utils/hash/dynahash.c
b. IGNORE => IGNORE_TOK in include/utils/datetime.h &
backend/utils/adt/datetime.c
Thanks,
Katie Ward
kward6@yahoo.com
__________________________________________________
Do You Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com
It's more likely that your changes will go through if you just submit a
patch!
cvs diff -c
Chris
----- Original Message -----
From: "Katherine Ward" <kward6@yahoo.com>
To: <pgsql-hackers@postgresql.org>
Sent: Thursday, May 30, 2002 2:33 PM
Subject: [HACKERS] Small changes to facilitate Win32 port
Hi there. I'm yet another developer working full-time on a native windows
port. I'm also working closely with Jan Wieck (next office). I know
there is
a reluctance to modify the code base to support native win32, and I
realize
that no decision has yet been made. However, ...
A few of the identifier names used in postgres collide with WIN32 or MFC
names.
To keep my working copy of the code as close to the released source as
possible, I do have some superficial changes that I would like to put in
the
Show quoted text
code base early:
1. Rename to avoid structures/functions with same name:
a. PROC => PGPROC
b. GetUserName() => GetUserNameFromId()
c. GetCurrentTime() => GetCurrentDateTime()2. Add _P to the following lex/yacc tokens to avoid collisions
CONST, CHAR, DELETE, FLOAT, GROUP, IN, OUT3. Rename two local macros
a. MEM_FREE => MEM_FREE_IT in backend/utils/hash/dynahash.c
b. IGNORE => IGNORE_TOK in include/utils/datetime.h &
backend/utils/adt/datetime.cThanks,
Katie Ward
kward6@yahoo.com__________________________________________________
Do You Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?
"Christopher Kings-Lynne" <chriskl@familyhealth.com.au> writes:
It's more likely that your changes will go through if you just submit a
patch!
I think the question was more directed at "do we like these names?",
which should certainly be asked before going to the trouble of making a
patch.
2. Add _P to the following lex/yacc tokens to avoid collisions
CONST, CHAR, DELETE, FLOAT, GROUP, IN, OUT
I'm tempted to suggest that we should stick _P on *all* the lexer token
symbols, rather than having an inconsistent set of names where some of
them have _P and some do not. Or perhaps _T (for token) would be a more
sensible convention; I'm not sure why _P was used in the first place.
3. Rename two local macros
a. MEM_FREE => MEM_FREE_IT in backend/utils/hash/dynahash.c
b. IGNORE => IGNORE_TOK in include/utils/datetime.h &
backend/utils/adt/datetime.c
It's fairly amazing that IGNORE is the only one of the datetime.h field
names that's bitten anyone (so far). Macros named TZ, YEAR, MONTH, DAY,
HOUR, MINUTE, SECOND, UNITS all look like trouble waiting to happen
(and UNKNOWN_FIELD looks like someone already had to beat a retreat from
calling it UNKNOWN ;-)). I'm inclined to suggest that these names
should be uniformly changed to DTF_FOO (DTF for "datetime field").
The macro names appearing before the field name list look like trouble
as well --- anyone have an interest in changing them? Thomas, this is
pretty much your turf; what do you think?
regards, tom lane
-----Original Message-----
From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Sent: Thursday, May 30, 2002 3:25 PM
To: Christopher Kings-Lynne
Cc: Katherine Ward; Thomas Lockhart; pgsql-hackers@postgresql.org
Subject: Re: [HACKERS] Small changes to facilitate Win32 port"Christopher Kings-Lynne" <chriskl@familyhealth.com.au> writes:
It's more likely that your changes will go through if you
just submit a
patch!
I think the question was more directed at "do we like these names?",
which should certainly be asked before going to the trouble
of making a
patch.2. Add _P to the following lex/yacc tokens to avoid collisions
CONST, CHAR, DELETE, FLOAT, GROUP, IN, OUTI'm tempted to suggest that we should stick _P on *all* the
lexer token
symbols, rather than having an inconsistent set of names where some of
them have _P and some do not. Or perhaps _T (for token)
would be a more
sensible convention; I'm not sure why _P was used in the first place.
Before you do that, realize that you are violating the implementation's
namespace, and your code is therefore not legal ANSI/ISO C.
From ISO/IEC 9899:1999 (E) ©ISO/IEC:
7.1.3 Reserved identifiers
1 Each header declares or defines all identifiers listed in its
associated subclause, and
optionally declares or defines identifiers listed in its associated
future library directions
subclause and identifiers which are always reserved either for any use
or for use as file
scope identifiers.
- All identifiers that begin with an underscore and either an uppercase
letter or another
underscore are always reserved for any use.
- All identifiers that begin with an underscore are always reserved for
use as identifiers
with file scope in both the ordinary and tag name spaces.
- Each macro name in any of the following subclauses (including the
future library
directions) is reserved for use as specified if any of its associated
headers is included;
unless explicitly stated otherwise (see 7.1.4).
- All identifiers with external linkage in any of the following
subclauses (including the
future library directions) are always reserved for use as identifiers
with external
linkage.154)
- Each identifier with file scope listed in any of the following
subclauses (including the
future library directions) is reserved for use as a macro name and as an
identifier with
file scope in the same name space if any of its associated headers is
included.
Show quoted text
3. Rename two local macros
a. MEM_FREE => MEM_FREE_IT in backend/utils/hash/dynahash.c
b. IGNORE => IGNORE_TOK in include/utils/datetime.h &
backend/utils/adt/datetime.cIt's fairly amazing that IGNORE is the only one of the
datetime.h field
names that's bitten anyone (so far). Macros named TZ, YEAR,
MONTH, DAY,
HOUR, MINUTE, SECOND, UNITS all look like trouble waiting to happen
(and UNKNOWN_FIELD looks like someone already had to beat a
retreat from
calling it UNKNOWN ;-)). I'm inclined to suggest that these names
should be uniformly changed to DTF_FOO (DTF for "datetime field").
The macro names appearing before the field name list look like trouble
as well --- anyone have an interest in changing them? Thomas, this is
pretty much your turf; what do you think?regards, tom lane
---------------------------(end of
broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly
Import Notes
Resolved by subject fallback
"Dann Corbit" <DCorbit@connx.com> writes:
I'm tempted to suggest that we should stick _P on *all* the
lexer token
symbols, rather than having an inconsistent set of names where some of
them have _P and some do not. Or perhaps _T (for token)
would be a more
sensible convention; I'm not sure why _P was used in the first place.
Before you do that, realize that you are violating the implementation's
namespace, and your code is therefore not legal ANSI/ISO C.
What?
The _P or _T is a suffix, not a prefix...
regards, tom lane
Christopher Kings-Lynne wrote:
It's more likely that your changes will go through if you just submit a
patch!
I suggested to discuss it first, since it's IMHO more likely
that the changes go through if they are commonly accepted in
the first place.
Jan
cvs diff -c
Chris
----- Original Message -----
From: "Katherine Ward" <kward6@yahoo.com>
To: <pgsql-hackers@postgresql.org>
Sent: Thursday, May 30, 2002 2:33 PM
Subject: [HACKERS] Small changes to facilitate Win32 portHi there. I'm yet another developer working full-time on a native windows
port. I'm also working closely with Jan Wieck (next office). I knowthere is
a reluctance to modify the code base to support native win32, and I
realize
that no decision has yet been made. However, ...
A few of the identifier names used in postgres collide with WIN32 or MFC
names.
To keep my working copy of the code as close to the released source as
possible, I do have some superficial changes that I would like to put inthe
code base early:
1. Rename to avoid structures/functions with same name:
a. PROC => PGPROC
b. GetUserName() => GetUserNameFromId()
c. GetCurrentTime() => GetCurrentDateTime()2. Add _P to the following lex/yacc tokens to avoid collisions
CONST, CHAR, DELETE, FLOAT, GROUP, IN, OUT3. Rename two local macros
a. MEM_FREE => MEM_FREE_IT in backend/utils/hash/dynahash.c
b. IGNORE => IGNORE_TOK in include/utils/datetime.h &
backend/utils/adt/datetime.cThanks,
Katie Ward
kward6@yahoo.com__________________________________________________
Do You Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#================================================== JanWieck@Yahoo.com #
2. Add _P to the following lex/yacc tokens to avoid collisions
CONST, CHAR, DELETE, FLOAT, GROUP, IN, OUTI'm tempted to suggest that we should stick _P on *all* the lexer token
symbols, rather than having an inconsistent set of names where some of
them have _P and some do not. Or perhaps _T (for token) would be a more
sensible convention; I'm not sure why _P was used in the first place.
"P" for "Parser". The symbols are used past the lexer, but are isolated
to other places in the parser, and are (or should be) stripped out
beyond there.
3. Rename two local macros
a. MEM_FREE => MEM_FREE_IT in backend/utils/hash/dynahash.c
b. IGNORE => IGNORE_TOK in include/utils/datetime.h &
backend/utils/adt/datetime.cIt's fairly amazing that IGNORE is the only one of the datetime.h field
names that's bitten anyone (so far). Macros named TZ, YEAR, MONTH, DAY,
HOUR, MINUTE, SECOND, UNITS all look like trouble waiting to happen
(and UNKNOWN_FIELD looks like someone already had to beat a retreat from
calling it UNKNOWN ;-)). I'm inclined to suggest that these names
should be uniformly changed to DTF_FOO (DTF for "datetime field").
The macro names appearing before the field name list look like trouble
as well --- anyone have an interest in changing them? Thomas, this is
pretty much your turf; what do you think?
If the lexer/parser should have postfix qualifiers, let's use postfix
for other naming conventions too (or switch everything to prefix, but be
consistant in the conventions).
No problem with qualifying the names, though you have likely overstated
the case for it; "fairly amazing" after 6 years of use on over a dozen
platforms probably qualifies as a good test of reality and we aren't
quite to the point of having to invoke miracles and magic to explain why
it works ;)
In any case, we would certainly be open to accepting patches for the
limited number of cases Katherine has identified, and would welcome
patches which are more comprehensive if they were available.
- Thomas
Thomas Lockhart <lockhart@fourpalms.org> writes:
I'm tempted to suggest that we should stick _P on *all* the lexer token
symbols, rather than having an inconsistent set of names where some of
them have _P and some do not. Or perhaps _T (for token) would be a more
sensible convention; I'm not sure why _P was used in the first place.
"P" for "Parser".
Oh, okay. I'm not intent on changing it, just was wondering what the
motivation was. What do you think of changing all the token symbols to
be FOO_P? (Or P_FOO, per your comment, but I'd just as soon leave alone
the ones that already have a suffix.)
The symbols are used past the lexer, but are isolated
to other places in the parser, and are (or should be) stripped out
beyond there.
Right at the moment we have half a dozen cases where they leak past the
parser, e.g. TransactionStmt. I've been intending to clean that up.
I concur that we don't want anything past parse analysis to depend on
token values, since they change anytime the keyword set changes.
If the lexer/parser should have postfix qualifiers, let's use postfix
for other naming conventions too (or switch everything to prefix, but be
consistant in the conventions).
I'd settle for local consistency: if we need prefixes/suffixes on some
of the datetime field names, let's make all of them have one. But I
don't feel compelled to cause a flag day over the whole source tree ;-).
At least not all at once.
regards, tom lane
"P" for "Parser".
Oh, okay. I'm not intent on changing it, just was wondering what the
motivation was. What do you think of changing all the token symbols to
be FOO_P? (Or P_FOO, per your comment, but I'd just as soon leave alone
the ones that already have a suffix.)
No problem here. I have a mild preference for suffix notation, and the
"P_FOO" was *your* idea (or at least the "DTF_FOO" one was). Anyway,
suffixes are my preference, but not I'm not enthused enough about it to
argue hard one way or the other.
The symbols are used past the lexer, but are isolated
to other places in the parser, and are (or should be) stripped out
beyond there.Right at the moment we have half a dozen cases where they leak past the
parser, e.g. TransactionStmt. I've been intending to clean that up.
I concur that we don't want anything past parse analysis to depend on
token values, since they change anytime the keyword set changes.
Right.
If the lexer/parser should have postfix qualifiers, let's use postfix
for other naming conventions too (or switch everything to prefix, but be
consistant in the conventions).I'd settle for local consistency: if we need prefixes/suffixes on some
of the datetime field names, let's make all of them have one. But I
don't feel compelled to cause a flag day over the whole source tree ;-).
At least not all at once.
Well, this doesn't need to be an issue or argument. We have little or no
precedent for prefix notation that I can recall, we have postfix
notation in the parser, and we don't have a "namespace convention" for
other areas afaik. So if we make changes, let's do it with a convention,
and at least extend one local convention to another local area.
Question to all: Any objection to postfix? If so, why?
And to answer Katherine's original questions:
1) OK. (function renaming)
2) OK. ("_P" suffix on a few more parser tokens)
3) MEM_FREE_IT - OK, but is it a macro specific to something in dynhash?
If so, how about using something more specific than "it"?
IGNORE_TOK - How about "IGNORE_DTF" or "IGNORE_D"? Let's make it a bit
specific to date/time stuff.
- Thomas
Christopher Kings-Lynne wrote:
It's more likely that your changes will go through if you just submit a
patch!I suggested to discuss it first, since it's IMHO more likely
that the changes go through if they are commonly accepted in
the first place.
Yep - sorry, didn't pick up on that...
Chris
Thomas Lockhart <lockhart@fourpalms.org> writes:
Question to all: Any objection to postfix? If so, why?
Well, I suggested DTF_FOO by analogy to the DTK_FOO name set that appears
elsewhere in that same header. If you want to rename those to FOO_DTK
in parallel, I have no objection.
IGNORE_TOK - How about "IGNORE_DTF" or "IGNORE_D"? Let's make it a bit
specific to date/time stuff.
Agreed. That thought was what motivated me to gripe in the first place.
regards, tom lane
Katherine Ward writes:
A few of the identifier names used in postgres collide with WIN32 or MFC names.
Does Windows and/or MFC make any kind of statement about what kinds of
identifiers it reserves for its own use?
b. GetUserName() => GetUserNameFromId()
c. GetCurrentTime() => GetCurrentDateTime()
a. MEM_FREE => MEM_FREE_IT in backend/utils/hash/dynahash.c
b. IGNORE => IGNORE_TOK in include/utils/datetime.h & backend/utils/adt/datetime.c
It might be better to add PG prefixes consistently if there are clashes.
--
Peter Eisentraut peter_e@gmx.net