AIUI, the issue is statements like: # select numeric(6,3) '5.6';
Bison can't look far enough ahead to determine whether the numeric is a type or a function. However, the desired grammer itself is not ambgiuous, it's just that Bison is not smart enough to make it work. It works now only because we hardwire the types that are allowed to have argument. Wouldn't a way around this be that to have grammer allow a type to look like a function call but convert the FuncExpr node to a TypeName node if the grammer determines it is a type after all. Something like: SimpleTypename: type_name { $$ = $1 } | func_expr { $$ = MakeTypeFromFuncCall( $1 ) } That function could then check that only constant integer arguments have been used, and then dispatch to a type specific function to turn the arg list into a typmod. Among other things, this would allow us to produce better error messages for things like bit(6,3) and numeric(l) instead of just "syntax error". I was thinking of adding to each type a typmod_in and a typmod_out function. The first takes an array of integer in and returns an int32, the latter does the reverse. This is however quite a dramatic overhaul of the grammer and I'm not sure it's actually conflict free. But "numeric", "float", "decimal", etc would no longer need to be matched by the lexer and you could call the timestamp function without double quotes. At least in preliminary tests it seems OUT as a function name would be a casualty due to the new IO/OUT parameters: function ( field IN OUT type ) It can't determine soon enough that OUT can't be a type in this context. And with this change type/function names would be the same list. I wonder if there is a way around this. Anyway, I'll try out some more stuff. Have a nice day, On Sat, Aug 27, 2005 at 11:09:09AM -0400, Tom Lane wrote: > Martijn van Oosterhout <kleptog@svana.org> writes: > > Tom Lanes patch[2] looks like it may work, but would a mechanism to > > allow user-defined types to have a typmod function be accepted? > > [2] http://archives.postgresql.org/pgsql-hackers/2004-06/msg00932.php > > Well, the question still stands: are we going to paint ourselves into > a corner by requiring type and function names to be equivalent? > > regards, tom lane -- 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.
pgpXvQCsdbD2j.pgp
Description: PGP signature