Обсуждение: BUG #5757: PL/PGSQL composite variable field error reporting

Поиск
Список
Период
Сортировка

BUG #5757: PL/PGSQL composite variable field error reporting

От
"Andrey Galkin"
Дата:
The following bug has been logged online:

Bug reference:      5757
Logged by:          Andrey Galkin
Email address:      andvgal@gmail.com
PostgreSQL version: 9.0.1
Operating system:   Debian unstable
Description:        PL/PGSQL composite variable field error reporting
Details:

1. Create a variable of composite type in PL/PGSQL function
2. Try to reference not existing field of the variable in some statement,
like IF
3. Get "missing FROM-clause entry for table" error at runtime

The error is not very helpful. If it's possible please detect the
incorrectly referenced field at parsing/statement preparing time.

Re: BUG #5757: PL/PGSQL composite variable field error reporting

От
Tom Lane
Дата:
"Andrey Galkin" <andvgal@gmail.com> writes:
> The following bug has been logged online:

> Bug reference:      5757
> Logged by:          Andrey Galkin
> Email address:      andvgal@gmail.com
> PostgreSQL version: 9.0.1
> Operating system:   Debian unstable
> Description:        PL/PGSQL composite variable field error reporting
> Details:

> 1. Create a variable of composite type in PL/PGSQL function
> 2. Try to reference not existing field of the variable in some statement,
> like IF
> 3. Get "missing FROM-clause entry for table" error at runtime

Please provide a complete test-case, not a vague description.

            regards, tom lane

Re: BUG #5757: PL/PGSQL composite variable field error reporting

От
"Andrey G."
Дата:
Tm8gcHJvYmxlbSwgcGxlYXNlIGZpbmQgYSBzaW1wbGUgdGVzdCBjYXNlIHdp
dGggaXRzIGV4ZWN1dGlvbiByZXN1bHQgYmVsb3c6CgotLSA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClNUQVJUIFRSQU5TQUNUSU9OOwoKQ1JF
QVRFIFRZUEUgQ29tcG9zaXRlVHlwZSBBUyAoCsKgwqDCoCBleGlzdGluZ19m
aWVsZCBURVhUCik7CgotLQpDUkVBVEUgRlVOQ1RJT04gQnVnXzU3NTdfdGVz
dCgpCsKgwqDCoCBSRVRVUk5TIFZPSUQKQVMgJCQKREVDTEFSRQrCoMKgwqAg
dl9jb21wIENvbXBvc2l0ZVR5cGU7CkJFR0lOCsKgwqDCoCBJRiB2X2NvbXAu
bm9uX2V4aXN0aW5nX2ZpZWxkIFRIRU4KwqDCoMKgIMKgwqDCoCBOVUxMOwrC
oMKgwqAgRU5EIElGOwpFTkQ7CiQkCkxBTkdVQUdFIHBscGdzcWw7CgotLQpT
RUxFQ1QgQnVnXzU3NTdfdGVzdCgpOwoKUk9MTEJBQ0s7Ci0tID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KJCBwc3FsIC1xIDwgcGdidWc1NzU3
LnNxbApFUlJPUjogIG1pc3NpbmcgRlJPTS1jbGF1c2UgZW50cnkgZm9yIHRh
YmxlICJ2X2NvbXAiCkxJTkUgMTogU0VMRUNUIHZfY29tcC5ub25fZXhpc3Rp
bmdfZmllbGQKICAgICAgICAgICAgICAgXgpRVUVSWTogIFNFTEVDVCB2X2Nv
bXAubm9uX2V4aXN0aW5nX2ZpZWxkCkNPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5j
dGlvbiAiYnVnXzU3NTdfdGVzdCIgbGluZSA0IGF0IElGCi0tID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KCkFuZHJleQoKCjIwMTAvMTEvMTgg
VG9tIExhbmUgPHRnbEBzc3MucGdoLnBhLnVzPgo+Cj4gIkFuZHJleSBHYWxr
aW4iIDxhbmR2Z2FsQGdtYWlsLmNvbT4gd3JpdGVzOgo+ID4gVGhlIGZvbGxv
d2luZyBidWcgaGFzIGJlZW4gbG9nZ2VkIG9ubGluZToKPgo+ID4gQnVnIHJl
ZmVyZW5jZTogwqAgwqAgwqA1NzU3Cj4gPiBMb2dnZWQgYnk6IMKgIMKgIMKg
IMKgIMKgQW5kcmV5IEdhbGtpbgo+ID4gRW1haWwgYWRkcmVzczogwqAgwqAg
wqBhbmR2Z2FsQGdtYWlsLmNvbQo+ID4gUG9zdGdyZVNRTCB2ZXJzaW9uOiA5
LjAuMQo+ID4gT3BlcmF0aW5nIHN5c3RlbTogwqAgRGViaWFuIHVuc3RhYmxl
Cj4gPiBEZXNjcmlwdGlvbjogwqAgwqAgwqAgwqBQTC9QR1NRTCBjb21wb3Np
dGUgdmFyaWFibGUgZmllbGQgZXJyb3IgcmVwb3J0aW5nCj4gPiBEZXRhaWxz
Ogo+Cj4gPiAxLiBDcmVhdGUgYSB2YXJpYWJsZSBvZiBjb21wb3NpdGUgdHlw
ZSBpbiBQTC9QR1NRTCBmdW5jdGlvbgo+ID4gMi4gVHJ5IHRvIHJlZmVyZW5j
ZSBub3QgZXhpc3RpbmcgZmllbGQgb2YgdGhlIHZhcmlhYmxlIGluIHNvbWUg
c3RhdGVtZW50LAo+ID4gbGlrZSBJRgo+ID4gMy4gR2V0ICJtaXNzaW5nIEZS
T00tY2xhdXNlIGVudHJ5IGZvciB0YWJsZSIgZXJyb3IgYXQgcnVudGltZQo+
Cj4gUGxlYXNlIHByb3ZpZGUgYSBjb21wbGV0ZSB0ZXN0LWNhc2UsIG5vdCBh
IHZhZ3VlIGRlc2NyaXB0aW9uLgo+Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqByZWdhcmRzLCB0b20gbGFuZQo=

Re: BUG #5757: PL/PGSQL composite variable field error reporting

От
Tom Lane
Дата:
"Andrey G." <andvgal@gmail.com> writes:
> CREATE FUNCTION Bug_5757_test()
>     RETURNS VOID
> AS $$
> DECLARE
>     v_comp CompositeType;
> BEGIN
>     IF v_comp.non_existing_field THEN
>         NULL;
>     END IF;
> END;
> $$
> LANGUAGE plpgsql;

OK, I did something about that.  Thanks for the report!

            regards, tom lane