mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-13 20:19:44 +02:00
20ab467d76
during parse analysis, not only errors detected in the flex/bison stages. This is per my earlier proposal. This commit includes all the basic infrastructure, but locations are only tracked and reported for errors involving column references, function calls, and operators. More could be done later but this seems like a good set to start with. I've also moved the ReportSyntaxErrorPosition logic out of psql and into libpq, which should make it available to more people --- even within psql this is an improvement because warnings weren't handled by ReportSyntaxErrorPosition.
103 lines
3.2 KiB
Plaintext
103 lines
3.2 KiB
Plaintext
--
|
|
-- WITHOUT OID
|
|
--
|
|
--
|
|
-- This test tries to verify that WITHOUT OIDS actually saves space.
|
|
-- On machines where MAXALIGN is 8, WITHOUT OIDS may or may not save any
|
|
-- space, depending on the size of the tuple header + null bitmap.
|
|
-- As of 8.0 we need a 9-bit null bitmap to force the difference to appear.
|
|
--
|
|
CREATE TABLE wi (i INT,
|
|
n1 int, n2 int, n3 int, n4 int,
|
|
n5 int, n6 int, n7 int, n8 int) WITH OIDS;
|
|
CREATE TABLE wo (i INT,
|
|
n1 int, n2 int, n3 int, n4 int,
|
|
n5 int, n6 int, n7 int, n8 int) WITHOUT OIDS;
|
|
INSERT INTO wi VALUES (1); -- 1
|
|
INSERT INTO wo SELECT i FROM wi; -- 1
|
|
INSERT INTO wo SELECT i+1 FROM wi; -- 1+1=2
|
|
INSERT INTO wi SELECT i+1 FROM wo; -- 1+2=3
|
|
INSERT INTO wi SELECT i+3 FROM wi; -- 3+3=6
|
|
INSERT INTO wo SELECT i+2 FROM wi; -- 2+6=8
|
|
INSERT INTO wo SELECT i+8 FROM wo; -- 8+8=16
|
|
INSERT INTO wi SELECT i+6 FROM wo; -- 6+16=22
|
|
INSERT INTO wi SELECT i+22 FROM wi; -- 22+22=44
|
|
INSERT INTO wo SELECT i+16 FROM wi; -- 16+44=60
|
|
INSERT INTO wo SELECT i+60 FROM wo; -- 60+60=120
|
|
INSERT INTO wi SELECT i+44 FROM wo; -- 44+120=164
|
|
INSERT INTO wi SELECT i+164 FROM wi; -- 164+164=328
|
|
INSERT INTO wo SELECT i+120 FROM wi; -- 120+328=448
|
|
INSERT INTO wo SELECT i+448 FROM wo; -- 448+448=896
|
|
INSERT INTO wi SELECT i+328 FROM wo; -- 328+896=1224
|
|
INSERT INTO wi SELECT i+1224 FROM wi; -- 1224+1224=2448
|
|
INSERT INTO wo SELECT i+896 FROM wi; -- 896+2448=3344
|
|
INSERT INTO wo SELECT i+3344 FROM wo; -- 3344+3344=6688
|
|
INSERT INTO wi SELECT i+2448 FROM wo; -- 2448+6688=9136
|
|
INSERT INTO wo SELECT i+6688 FROM wi WHERE i<=2448; -- 6688+2448=9136
|
|
SELECT count(oid) FROM wi;
|
|
count
|
|
-------
|
|
9136
|
|
(1 row)
|
|
|
|
-- should fail
|
|
SELECT count(oid) FROM wo;
|
|
ERROR: column "oid" does not exist
|
|
LINE 1: SELECT count(oid) FROM wo;
|
|
^
|
|
VACUUM ANALYZE wi;
|
|
VACUUM ANALYZE wo;
|
|
SELECT min(relpages) < max(relpages), min(reltuples) - max(reltuples)
|
|
FROM pg_class
|
|
WHERE relname IN ('wi', 'wo');
|
|
?column? | ?column?
|
|
----------+----------
|
|
t | 0
|
|
(1 row)
|
|
|
|
DROP TABLE wi;
|
|
DROP TABLE wo;
|
|
--
|
|
-- WITH / WITHOUT OIDS in CREATE TABLE AS
|
|
--
|
|
CREATE TABLE create_table_test (
|
|
a int,
|
|
b int
|
|
);
|
|
COPY create_table_test FROM stdin;
|
|
CREATE TABLE create_table_test2 WITH OIDS AS
|
|
SELECT a + b AS c1, a - b AS c2 FROM create_table_test;
|
|
CREATE TABLE create_table_test3 WITHOUT OIDS AS
|
|
SELECT a + b AS c1, a - b AS c2 FROM create_table_test;
|
|
SELECT count(oid) FROM create_table_test2;
|
|
count
|
|
-------
|
|
2
|
|
(1 row)
|
|
|
|
-- should fail
|
|
SELECT count(oid) FROM create_table_test3;
|
|
ERROR: column "oid" does not exist
|
|
LINE 1: SELECT count(oid) FROM create_table_test3;
|
|
^
|
|
PREPARE table_source(int) AS
|
|
SELECT a + b AS c1, a - b AS c2, $1 AS c3 FROM create_table_test;
|
|
CREATE TABLE execute_with WITH OIDS AS EXECUTE table_source(1);
|
|
CREATE TABLE execute_without WITHOUT OIDS AS EXECUTE table_source(2);
|
|
SELECT count(oid) FROM execute_with;
|
|
count
|
|
-------
|
|
2
|
|
(1 row)
|
|
|
|
-- should fail
|
|
SELECT count(oid) FROM execute_without;
|
|
ERROR: column "oid" does not exist
|
|
LINE 1: SELECT count(oid) FROM execute_without;
|
|
^
|
|
DROP TABLE create_table_test;
|
|
DROP TABLE create_table_test2;
|
|
DROP TABLE create_table_test3;
|
|
DROP TABLE execute_with;
|
|
DROP TABLE execute_without;
|