Files
neon/patches/i1.patch
Alexey Masterov 418ccba23b First attempt
2024-08-09 15:51:16 +02:00

501 lines
15 KiB
Diff

commit f45d0f6bc62369bd1b217c01121e51df439e514d
Author: Alexey Masterov <alexeymasterov@neon.tech>
Date: Thu Aug 8 10:54:10 2024 +0200
i1
diff --git a/src/test/regress/expected/test_setup_1.out b/src/test/regress/expected/test_setup_1.out
new file mode 100644
index 0000000000..1b1efa3ecf
--- /dev/null
+++ b/src/test/regress/expected/test_setup_1.out
@@ -0,0 +1,255 @@
+--
+-- TEST_SETUP --- prepare environment expected by regression test scripts
+--
+-- directory paths and dlsuffix are passed to us in environment variables
+\getenv abs_srcdir PG_ABS_SRCDIR
+\getenv libdir PG_LIBDIR
+\getenv dlsuffix PG_DLSUFFIX
+\set regresslib :libdir '/regress' :dlsuffix
+--
+-- synchronous_commit=off delays when hint bits may be set. Some plans change
+-- depending on the number of all-visible pages, which in turn can be
+-- influenced by the delayed hint bits. Force synchronous_commit=on to avoid
+-- that source of variability.
+--
+SET synchronous_commit = on;
+--
+-- Postgres formerly made the public schema read/write by default,
+-- and most of the core regression tests still expect that.
+--
+GRANT ALL ON SCHEMA public TO public;
+-- Create a tablespace we can use in tests.
+SET allow_in_place_tablespaces = true;
+CREATE TABLESPACE regress_tblspace LOCATION '';
+--
+-- These tables have traditionally been referenced by many tests,
+-- so create and populate them. Insert only non-error values here.
+-- (Some subsequent tests try to insert erroneous values. That's okay
+-- because the table won't actually change. Do not change the contents
+-- of these tables in later tests, as it may affect other tests.)
+--
+CREATE TABLE CHAR_TBL(f1 char(4));
+INSERT INTO CHAR_TBL (f1) VALUES
+ ('a'),
+ ('ab'),
+ ('abcd'),
+ ('abcd ');
+VACUUM CHAR_TBL;
+CREATE TABLE FLOAT8_TBL(f1 float8);
+INSERT INTO FLOAT8_TBL(f1) VALUES
+ ('0.0'),
+ ('-34.84'),
+ ('-1004.30'),
+ ('-1.2345678901234e+200'),
+ ('-1.2345678901234e-200');
+VACUUM FLOAT8_TBL;
+CREATE TABLE INT2_TBL(f1 int2);
+INSERT INTO INT2_TBL(f1) VALUES
+ ('0 '),
+ (' 1234 '),
+ (' -1234'),
+ ('32767'), -- largest and smallest values
+ ('-32767');
+VACUUM INT2_TBL;
+CREATE TABLE INT4_TBL(f1 int4);
+INSERT INTO INT4_TBL(f1) VALUES
+ (' 0 '),
+ ('123456 '),
+ (' -123456'),
+ ('2147483647'), -- largest and smallest values
+ ('-2147483647');
+VACUUM INT4_TBL;
+CREATE TABLE INT8_TBL(q1 int8, q2 int8);
+INSERT INTO INT8_TBL VALUES
+ (' 123 ',' 456'),
+ ('123 ','4567890123456789'),
+ ('4567890123456789','123'),
+ (+4567890123456789,'4567890123456789'),
+ ('+4567890123456789','-4567890123456789');
+VACUUM INT8_TBL;
+CREATE TABLE POINT_TBL(f1 point);
+INSERT INTO POINT_TBL(f1) VALUES
+ ('(0.0,0.0)'),
+ ('(-10.0,0.0)'),
+ ('(-3.0,4.0)'),
+ ('(5.1, 34.5)'),
+ ('(-5.0,-12.0)'),
+ ('(1e-300,-1e-300)'), -- To underflow
+ ('(1e+300,Inf)'), -- To overflow
+ ('(Inf,1e+300)'), -- Transposed
+ (' ( Nan , NaN ) '),
+ ('10.0,10.0');
+-- We intentionally don't vacuum point_tbl here; geometry depends on that
+CREATE TABLE TEXT_TBL (f1 text);
+INSERT INTO TEXT_TBL VALUES
+ ('doh!'),
+ ('hi de ho neighbor');
+VACUUM TEXT_TBL;
+CREATE TABLE VARCHAR_TBL(f1 varchar(4));
+INSERT INTO VARCHAR_TBL (f1) VALUES
+ ('a'),
+ ('ab'),
+ ('abcd'),
+ ('abcd ');
+VACUUM VARCHAR_TBL;
+CREATE TABLE onek (
+ unique1 int4,
+ unique2 int4,
+ two int4,
+ four int4,
+ ten int4,
+ twenty int4,
+ hundred int4,
+ thousand int4,
+ twothousand int4,
+ fivethous int4,
+ tenthous int4,
+ odd int4,
+ even int4,
+ stringu1 name,
+ stringu2 name,
+ string4 name
+);
+\set filename :abs_srcdir '/data/onek.data'
+\set command '\\copy onek FROM ' :'filename';
+:command
+VACUUM ANALYZE onek;
+CREATE TABLE onek2 AS SELECT * FROM onek;
+VACUUM ANALYZE onek2;
+CREATE TABLE tenk1 (
+ unique1 int4,
+ unique2 int4,
+ two int4,
+ four int4,
+ ten int4,
+ twenty int4,
+ hundred int4,
+ thousand int4,
+ twothousand int4,
+ fivethous int4,
+ tenthous int4,
+ odd int4,
+ even int4,
+ stringu1 name,
+ stringu2 name,
+ string4 name
+);
+\set filename :abs_srcdir '/data/tenk.data'
+\set command '\\copy tenk1 FROM ' :'filename';
+:command
+VACUUM ANALYZE tenk1;
+CREATE TABLE tenk2 AS SELECT * FROM tenk1;
+VACUUM ANALYZE tenk2;
+CREATE TABLE person (
+ name text,
+ age int4,
+ location point
+);
+\set filename :abs_srcdir '/data/person.data'
+\set command '\\copy person FROM ' :'filename';
+:command
+VACUUM ANALYZE person;
+CREATE TABLE emp (
+ salary int4,
+ manager name
+) INHERITS (person);
+\set filename :abs_srcdir '/data/emp.data'
+\set command '\\copy emp FROM ' :'filename';
+:command
+VACUUM ANALYZE emp;
+CREATE TABLE student (
+ gpa float8
+) INHERITS (person);
+\set filename :abs_srcdir '/data/student.data'
+\set command '\\copy student FROM ' :'filename';
+:command
+VACUUM ANALYZE student;
+CREATE TABLE stud_emp (
+ percent int4
+) INHERITS (emp, student);
+NOTICE: merging multiple inherited definitions of column "name"
+NOTICE: merging multiple inherited definitions of column "age"
+NOTICE: merging multiple inherited definitions of column "location"
+\set filename :abs_srcdir '/data/stud_emp.data'
+\set command '\\copy stud_emp FROM ' :'filename';
+:command
+VACUUM ANALYZE stud_emp;
+CREATE TABLE road (
+ name text,
+ thepath path
+);
+\set filename :abs_srcdir '/data/streets.data'
+\set command '\\copy road FROM ' :'filename';
+:command
+VACUUM ANALYZE road;
+CREATE TABLE ihighway () INHERITS (road);
+INSERT INTO ihighway
+ SELECT *
+ FROM ONLY road
+ WHERE name ~ 'I- .*';
+VACUUM ANALYZE ihighway;
+CREATE TABLE shighway (
+ surface text
+) INHERITS (road);
+INSERT INTO shighway
+ SELECT *, 'asphalt'
+ FROM ONLY road
+ WHERE name ~ 'State Hwy.*';
+VACUUM ANALYZE shighway;
+--
+-- We must have some enum type in the database for opr_sanity and type_sanity.
+--
+create type stoplight as enum ('red', 'yellow', 'green');
+--
+-- Also create some non-built-in range types.
+--
+create type float8range as range (subtype = float8, subtype_diff = float8mi);
+create type textrange as range (subtype = text, collation = "C");
+--
+-- Create some C functions that will be used by various tests.
+--
+CREATE FUNCTION binary_coercible(oid, oid)
+ RETURNS bool
+ AS :'regresslib', 'binary_coercible'
+ LANGUAGE C STRICT STABLE PARALLEL SAFE;
+ERROR: unexpected path in dynamic library name: /home/alex/neon/vendor/postgres-v16/src/test/regress/regress.so
+CREATE FUNCTION ttdummy ()
+ RETURNS trigger
+ AS :'regresslib'
+ LANGUAGE C;
+ERROR: unexpected path in dynamic library name: /home/alex/neon/vendor/postgres-v16/src/test/regress/regress.so
+CREATE FUNCTION get_columns_length(oid[])
+ RETURNS int
+ AS :'regresslib'
+ LANGUAGE C STRICT STABLE PARALLEL SAFE;
+ERROR: unexpected path in dynamic library name: /home/alex/neon/vendor/postgres-v16/src/test/regress/regress.so
+-- Use hand-rolled hash functions and operator classes to get predictable
+-- result on different machines. The hash function for int4 simply returns
+-- the sum of the values passed to it and the one for text returns the length
+-- of the non-empty string value passed to it or 0.
+create function part_hashint4_noop(value int4, seed int8)
+ returns int8 as $$
+ select value + seed;
+ $$ language sql strict immutable parallel safe;
+create operator class part_test_int4_ops for type int4 using hash as
+ operator 1 =,
+ function 2 part_hashint4_noop(int4, int8);
+create function part_hashtext_length(value text, seed int8)
+ returns int8 as $$
+ select length(coalesce(value, ''))::int8
+ $$ language sql strict immutable parallel safe;
+create operator class part_test_text_ops for type text using hash as
+ operator 1 =,
+ function 2 part_hashtext_length(text, int8);
+--
+-- These functions are used in tests that used to use md5(), which we now
+-- mostly avoid so that the tests will pass in FIPS mode.
+--
+create function fipshash(bytea)
+ returns text
+ strict immutable parallel safe leakproof
+ return substr(encode(sha256($1), 'hex'), 1, 32);
+create function fipshash(text)
+ returns text
+ strict immutable parallel safe leakproof
+ return substr(encode(sha256($1::bytea), 'hex'), 1, 32);
diff --git a/src/test/regress/sql/aggregates.sql b/src/test/regress/sql/aggregates.sql
index 758ad90651..897334aac9 100644
--- a/src/test/regress/sql/aggregates.sql
+++ b/src/test/regress/sql/aggregates.sql
@@ -15,7 +15,8 @@ CREATE TABLE aggtest (
);
\set filename :abs_srcdir '/data/agg.data'
-COPY aggtest FROM :'filename';
+\set command '\\copy aggtest FROM ' :'filename';
+:command
ANALYZE aggtest;
diff --git a/src/test/regress/sql/arrays.sql b/src/test/regress/sql/arrays.sql
index daf805c382..c791f52cd9 100644
--- a/src/test/regress/sql/arrays.sql
+++ b/src/test/regress/sql/arrays.sql
@@ -22,7 +22,8 @@ CREATE TABLE array_op_test (
);
\set filename :abs_srcdir '/data/array.data'
-COPY array_op_test FROM :'filename';
+\set command '\\copy array_op_test FROM ' :'filename';
+:command
ANALYZE array_op_test;
--
diff --git a/src/test/regress/sql/copy.sql b/src/test/regress/sql/copy.sql
index 43d2e906dd..3fa3b4a837 100644
--- a/src/test/regress/sql/copy.sql
+++ b/src/test/regress/sql/copy.sql
@@ -20,11 +20,13 @@ insert into copytest values('Mac',E'abc\rdef',3);
insert into copytest values(E'esc\\ape',E'a\\r\\\r\\\n\\nb',4);
\set filename :abs_builddir '/results/copytest.csv'
-copy copytest to :'filename' csv;
+\set command '\\copy copytest to ' :'filename' csv;
+:command
create temp table copytest2 (like copytest);
-copy copytest2 from :'filename' csv;
+\set command '\\copy copytest2 from ' :'filename' csv;
+:command
select * from copytest except select * from copytest2;
@@ -32,9 +34,11 @@ truncate copytest2;
--- same test but with an escape char different from quote char
-copy copytest to :'filename' csv quote '''' escape E'\\';
+\set command '\\copy copytest to ' :'filename' csv quote '''' escape E'\\';
+:command
-copy copytest2 from :'filename' csv quote '''' escape E'\\';
+\set command '\\copy copytest2 from ' :'filename' csv quote '''' escape E'\\';
+:command
select * from copytest except select * from copytest2;
@@ -52,7 +56,8 @@ this is just a line full of junk that would error out if parsed
2,b,2
\.
-copy copytest3 to stdout csv header;
+\set command '\\copy copytest3 to ' stdout csv header;
+:command
create temp table copytest4 (
c1 int,
@@ -64,7 +69,8 @@ this is just a line full of junk that would error out if parsed
2 b
\.
-copy copytest4 to stdout (header);
+\set command '\\copy copytest4 to ' stdout (header);
+:command
-- test copy from with a partitioned table
create table parted_copytest (
@@ -90,12 +96,14 @@ copy (select * from parted_copytest order by a) to :'filename';
truncate parted_copytest;
-copy parted_copytest from :'filename';
+\set command '\\copy parted_copytest from ' :'filename';
+:command
-- Ensure COPY FREEZE errors for partitioned tables.
begin;
truncate parted_copytest;
-copy parted_copytest from :'filename' (freeze);
+\set command '\\copy parted_copytest from ' :'filename' (freeze);
+:command
rollback;
select tableoid::regclass,count(*),sum(a) from parted_copytest
@@ -115,7 +123,8 @@ create trigger part_ins_trig
for each row
execute procedure part_ins_func();
-copy parted_copytest from :'filename';
+\set command '\\copy parted_copytest from ' :'filename';
+:command
select tableoid::regclass,count(*),sum(a) from parted_copytest
group by tableoid order by tableoid::regclass::name;
@@ -124,7 +133,8 @@ truncate table parted_copytest;
create index on parted_copytest (b);
drop trigger part_ins_trig on parted_copytest_a2;
-copy parted_copytest from stdin;
+\set command '\\copy parted_copytest from ' stdin;
+:command
1 1 str1
2 2 str2
\.
@@ -182,7 +192,8 @@ create trigger check_after_tab_progress_reporting
execute function notice_after_tab_progress_reporting();
-- Generate COPY FROM report with PIPE.
-copy tab_progress_reporting from stdin;
+\set command '\\copy tab_progress_reporting from ' stdin;
+:command
sharon 25 (15,12) 1000 sam
sam 30 (10,5) 2000 bill
bill 20 (11,10) 1000 sharon
@@ -191,7 +202,8 @@ bill 20 (11,10) 1000 sharon
-- Generate COPY FROM report with FILE, with some excluded tuples.
truncate tab_progress_reporting;
\set filename :abs_srcdir '/data/emp.data'
-copy tab_progress_reporting from :'filename'
+\set command '\\copy tab_progress_reporting from ' :'filename'
+:command
where (salary < 2000);
drop trigger check_after_tab_progress_reporting on tab_progress_reporting;
@@ -207,7 +219,8 @@ create table header_copytest (
-- Make sure it works with dropped columns
alter table header_copytest drop column c;
alter table header_copytest add column c text;
-copy header_copytest to stdout with (header match);
+\set command '\\copy header_copytest to ' stdout with (header match);
+:command
copy header_copytest from stdin with (header wrong_choice);
-- works
copy header_copytest from stdin with (header match);
@@ -274,7 +287,8 @@ create temp table oversized_column_default (
col1 varchar(5) DEFAULT 'more than 5 chars',
col2 varchar(5));
-- normal COPY should work
-copy oversized_column_default from stdin;
+\set command '\\copy oversized_column_default from ' stdin;
+:command
\.
-- error if the column is excluded
copy oversized_column_default (col2) from stdin;
diff --git a/src/test/regress/sql/test_setup.sql b/src/test/regress/sql/test_setup.sql
index 1b2d434683..106d4eb2c0 100644
--- a/src/test/regress/sql/test_setup.sql
+++ b/src/test/regress/sql/test_setup.sql
@@ -135,7 +135,8 @@ CREATE TABLE onek (
);
\set filename :abs_srcdir '/data/onek.data'
-COPY onek FROM :'filename';
+\set command '\\copy onek FROM ' :'filename';
+:command
VACUUM ANALYZE onek;
CREATE TABLE onek2 AS SELECT * FROM onek;
@@ -161,7 +162,8 @@ CREATE TABLE tenk1 (
);
\set filename :abs_srcdir '/data/tenk.data'
-COPY tenk1 FROM :'filename';
+\set command '\\copy tenk1 FROM ' :'filename';
+:command
VACUUM ANALYZE tenk1;
CREATE TABLE tenk2 AS SELECT * FROM tenk1;
@@ -174,7 +176,8 @@ CREATE TABLE person (
);
\set filename :abs_srcdir '/data/person.data'
-COPY person FROM :'filename';
+\set command '\\copy person FROM ' :'filename';
+:command
VACUUM ANALYZE person;
CREATE TABLE emp (
@@ -183,7 +186,8 @@ CREATE TABLE emp (
) INHERITS (person);
\set filename :abs_srcdir '/data/emp.data'
-COPY emp FROM :'filename';
+\set command '\\copy emp FROM ' :'filename';
+:command
VACUUM ANALYZE emp;
CREATE TABLE student (
@@ -191,7 +195,8 @@ CREATE TABLE student (
) INHERITS (person);
\set filename :abs_srcdir '/data/student.data'
-COPY student FROM :'filename';
+\set command '\\copy student FROM ' :'filename';
+:command
VACUUM ANALYZE student;
CREATE TABLE stud_emp (
@@ -199,7 +204,8 @@ CREATE TABLE stud_emp (
) INHERITS (emp, student);
\set filename :abs_srcdir '/data/stud_emp.data'
-COPY stud_emp FROM :'filename';
+\set command '\\copy stud_emp FROM ' :'filename';
+:command
VACUUM ANALYZE stud_emp;
CREATE TABLE road (
@@ -208,7 +214,8 @@ CREATE TABLE road (
);
\set filename :abs_srcdir '/data/streets.data'
-COPY road FROM :'filename';
+\set command '\\copy road FROM ' :'filename';
+:command
VACUUM ANALYZE road;
CREATE TABLE ihighway () INHERITS (road);