Thread: Schemas not available for pl/pgsql %TYPE....
Call me crazy, but shouldn't the following work? :~| CREATE FUNCTION t() RETURNS TEXT AS ' DECLARE col_name pg_catalog.pg_attribute.attname%TYPE; BEGIN col_name :=3D ''uga''; RETURN col_name; END; ' LANGUAGE 'plpgsql'; CREATE FUNCTION SELECT t(); WARNING: plpgsql: ERROR during compile of t near line 2 ERROR: Invalid type name 'pg_catalog.pg_attribute.attname % TYPE' -sc --=20 Sean Chittenden
Sean Chittenden <sean@chittenden.org> writes: > Call me crazy, but shouldn't the following work? :~| Sure should. Want to fix plpgsql's parser? regards, tom lane
> Sean Chittenden <sean@chittenden.org> writes: > > Call me crazy, but shouldn't the following work? :~| > > Sure should. Want to fix plpgsql's parser? Why not: I've never been one to avoid strapping on 4tons in rocks and jumping into the deep end. ::sigh:: Is it me or does it look like all of pl/pgsql is schema un-aware (ie, all of the declarations). -sc -- Sean Chittenden
Sean Chittenden <sean@chittenden.org> writes: > ::sigh:: Is it me or does it look like all > of pl/pgsql is schema un-aware (ie, all of the declarations). -sc Yeah. The group of routines parse_word, parse_dblword, etc that are called by the lexer certainly all need work. There are some definitional issues to think about, too --- plpgsql presently relies on the number of names to give it some idea of what to look for, and those rules are probably all toast now. Please come up with a sketch of what you think the behavior should be before you start hacking code. regards, tom lane
Tom Lane wrote: > Sean Chittenden <sean@chittenden.org> writes: > > ::sigh:: Is it me or does it look like all > > of pl/pgsql is schema un-aware (ie, all of the declarations). -sc > > Yeah. The group of routines parse_word, parse_dblword, etc that are > called by the lexer certainly all need work. There are some > definitional issues to think about, too --- plpgsql presently relies on > the number of names to give it some idea of what to look for, and those > rules are probably all toast now. Please come up with a sketch of what > you think the behavior should be before you start hacking code. Added to TODO: o Make PL/PgSQL %TYPE schema-aware -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073
> > ::sigh:: Is it me or does it look like all > > of pl/pgsql is schema un-aware (ie, all of the declarations). -sc > > Yeah. The group of routines parse_word, parse_dblword, etc that are > called by the lexer certainly all need work. There are some > definitional issues to think about, too --- plpgsql presently relies > on the number of names to give it some idea of what to look for, and > those rules are probably all toast now. Please come up with a > sketch of what you think the behavior should be before you start > hacking code. Not a problem there. I walked around the code for a bit, made a few hacks to see how things are working, and I can tell you strait up that if you'd like this by 7.3, it won't be happening from me. <:~) I'm stretched kinda thin as is and don't think I'll be able to get this working correctly with time to test by release. I can send you the patch I've got for the lexer, but that was chump. What I was going to do could be totally wrong, but... * Change the lexer to recognize schema.table.column%TYPE as a token and was going to create parse_tripwordtype() that'd look up the table and column in the appropriate schema and would return the appropriate type. If I were lazy, I'd just unshift the schema off of the token and return what comes back from parse_dblwordtype(), but that doesn't strike me as correct for something that's performance sensitive. Beyond doing that, I'm at a loss. :-/ Thoughts? -sc -- Sean Chittenden
Sean Chittenden wrote: > Not a problem there. I walked around the code for a bit, made a few > hacks to see how things are working, and I can tell you strait up that > if you'd like this by 7.3, it won't be happening from me. <:~) I'm > stretched kinda thin as is and don't think I'll be able to get this > working correctly with time to test by release. I can send you the > patch I've got for the lexer, but that was chump. If you want to send me what you've done so far, I'll take a look and see if I can figure it out. I think this is probably a must do item for 7.3. Any further guidance or thoughts? Thanks, Joe