Re: [HACKERS] I think we need an explicit parsetree node for CAST
От | Bruce Momjian |
---|---|
Тема | Re: [HACKERS] I think we need an explicit parsetree node for CAST |
Дата | |
Msg-id | 200001160540.AAA08675@candle.pha.pa.us обсуждение исходный текст |
Ответ на | I think we need an explicit parsetree node for CAST (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: [HACKERS] I think we need an explicit parsetree node for CAST
|
Список | pgsql-hackers |
I have applied a patch for this one. > I noticed today that the system drops any "typmod" modifier associated > with a type name being casted to. For example, > > regression=# select '1.23456'::numeric(7,2); > ?column? > ---------- > 1.23456 --- should be 1.23 > (1 row) > > regression=# select CAST ('1234567.89' AS numeric(4,1)); > ?column? > ------------ > 1234567.89 --- should raise a numeric-overflow error > (1 row) > > These particular cases can be fixed with a one-line patch, I think, > because there is storage in an A_Const node to hold a reference to > a Typename, which includes typmod. parse_expr.c is just forgetting > to pass the typmod to parser_typecast(). > > BUT: there isn't any equally simple patch when the value being casted > is not a constant. For instance > > select field1 :: numeric(7,2) from table1; > > cannot work properly now, because gram.y transforms it into > > select numeric(field1) from table; > > which (a) drops the typmod and (b) bypasses all of the intelligence > that should be used to determine how to coerce the type. > > What I think we need is to add a new parsetree node type that explicitly > represents a CAST operator, and then modify parse_expr.c to transform > that node type into an appropriate function call (or, perhaps, nothing > at all if the source value is already the right type). > > Comments? > > regards, tom lane > > ************ > -- Bruce Momjian | http://www.op.net/~candle pgman@candle.pha.pa.us | (610) 853-3000+ If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania19026
В списке pgsql-hackers по дате отправления: