Hi list,

I'm trying to create a varchar clone (called varcharci). I have defined 
new functions called "varcharciin", "varcharciout", "varcharcisend" and 
"recv", using the "varcharin" etc. definitions (i.e. - builtin 
functions). I defined the type. Everything works, except that when I try 
to create a table it fails. This only happens when I try to give maximum 
length to the type. So the command:
create table foo ( bar varcharci );
succeeds, but
create table foo (bar varcharci(12) );
fails.

What do I need to do in order to get the width specifier into my type? 
I'm not even sure what function is called in order to say that the type 
needs a width specifier.

Many thanks
             Shachar

-- 
Shachar Shemesh
Lingnu Open Source Consulting ltd.
http://www.lingnu.com/


Sun, 27 Jun 2004 17:25:43 +0300
Shachar Shemesh <psql@shemesh.biz>
Custom type with width specifier
Shachar Shemesh <psql@shemesh.biz> writes:
> What do I need to do in order to get the width specifier into my type? 

Rewrite the grammar.  Width modifiers are only supported on types that
are hard-wired into the grammar, mainly because they look way too much
like function calls to be distinguished without special hacking.

Consider for example the implications of the fact that this works:

regression=# select numeric(17,10) '1.23';
   numeric
--------------
 1.2300000000
(1 row)
 
bison has to decide *before scanning beyond the left parenthesis*
whether "numeric" is a function name or a type name.

If you can think of a more general solution, I'm all ears, but it looks
like a hard problem that would require considerable rethinking of the
present grammar for these things.

			regards, tom lane

Sun, 27 Jun 2004 10:53:19 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: Custom type with width specifier 
Shachar Shemesh wrote:
> What do I need to do in order to get the width specifier into my
> type?

This is not possible with user-defined types.


Sun, 27 Jun 2004 16:56:32 +0200
Peter Eisentraut <peter_e@gmx.net>
Re: Custom type with width specifier
On P, 2004-06-27 at 17:53, Tom Lane wrote:
> Shachar Shemesh <psql@shemesh.biz> writes:
> > What do I need to do in order to get the width specifier into my type? 
> 
> Rewrite the grammar.  Width modifiers are only supported on types that
> are hard-wired into the grammar, mainly because they look way too much
> like function calls to be distinguished without special hacking.
> 
> Consider for example the implications of the fact that this works:
> 
> regression=# select numeric(17,10) '1.23';
>    numeric
> --------------
>  1.2300000000
> (1 row)
>  
> bison has to decide *before scanning beyond the left parenthesis*
> whether "numeric" is a function name or a type name.
> 
> If you can think of a more general solution, I'm all ears, but it looks
> like a hard problem that would require considerable rethinking of the
> present grammar for these things.

can't we make type(width) an actual function which returns another type
?

this would make it even possible to add support for things like
NUMBER(17,10) as an alias for NUMERIC(17,10) as an user-level addon.

---------------
Hannu

Tue, 29 Jun 2004 13:19:36 +0300
Hannu Krosing <hannu@tm.ee>
Re: Custom type with width specifier