blob: fcd01e8e69909de2e223b4aa66848f4af5d909fe [file] [log] [blame]
--
-- SETUP: Helper functions for query plan verification
--
-- The helper functions are written in python.
create or replace language plpython3u;
NOTICE: extension "plpython3u" already exists, skipping
-- While we're at it, test that CREATE OR REPLACE LANGUAGE works when
-- the language exists already (we had a little bug at one point, where
-- the "OR REPLACE" was not dispatched to segments, and this failed)
create or replace language plpython3u;
NOTICE: extension "plpython3u" already exists, skipping
--start_ignore
drop schema if exists bfv_legacy cascade;
NOTICE: schema "bfv_legacy" does not exist, skipping
--end_ignore
create schema bfv_legacy;
set search_path=bfv_legacy;
create or replace function nonzero_width(explain_query text) returns bool as
$$
rv = plpy.execute(explain_query)
#search_text = 'Index Scan'
first_line = rv[0]['QUERY PLAN']
row_width = int(first_line[first_line.find('width=')+6:first_line.rfind(')')])
return row_width > -1
$$
language plpython3u;
create or replace function count_operator(explain_query text, op_name text) returns int as
$$
rv = plpy.execute(explain_query)
result = 0
for i in range(len(rv)):
cur_line = rv[i]['QUERY PLAN']
if op_name.lower() in cur_line.lower():
result = result+1
return result
$$
language plpython3u;
--
-- aggregate width should be non-zero
--
-- SETUP
CREATE TABLE bfv_legacy_t1(c1 int, c2 varchar);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'c1' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
INSERT INTO bfv_legacy_t1 select generate_series(1,1000), 'aaa';
INSERT INTO bfv_legacy_t1 select generate_series(1001,2000), 'bbb';
--aggregate width should be non-zero
select nonzero_width('EXPLAIN SELECT count(*) from (select * from bfv_legacy_t1) as a;');
nonzero_width
---------------
t
(1 row)
--width should be non-zero
select nonzero_width('EXPLAIN SELECT * from (select * from bfv_legacy_t1) as a;');
nonzero_width
---------------
t
(1 row)
select nonzero_width('EXPLAIN SELECT max(a.c1), min(a.c1), avg(a.c1) from (select * from bfv_legacy_t1) as a;');
nonzero_width
---------------
t
(1 row)
select nonzero_width('explain select a.c1 * b.c1, a.c1, b.c1 from bfv_legacy_t1 a, bfv_legacy_t1 b;');
nonzero_width
---------------
t
(1 row)
--
--
--
create table bfv_s (
c_t char(2),
c_o int4,
c_p text,
c_v float8
);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'c_t' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
insert into bfv_s (c_o, c_p, c_v) values (0, 1, 1234.56);
create table bfv_int4_tbl (f1 int);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'f1' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
insert into bfv_int4_tbl values(123456), (-2147483647), (0), (-123456), (2147483647);
update bfv_s set c_v = 11
from bfv_int4_tbl a join bfv_int4_tbl b on (a.f1 = (select f1 from bfv_int4_tbl c where c.f1=b.f1));
update bfv_s set c_v = 11
from bfv_int4_tbl a join bfv_int4_tbl b on (a.f1 = (select f1 from bfv_int4_tbl c where c.f1=b.f1));
--
--
--
-- start_matchsubs
-- m/NOTICE: Using default RANDOM distribution since no distribution was specified./
-- s/^/GP_IGNORE: /
-- m/HINT: Consider including the 'DISTRIBUTED BY' clause to determine the distribution of rows./
-- s/^/GP_IGNORE: /
-- end_matchsubs
create table bfv_legacy_A (
col_with_default numeric DEFAULT 0,
col_with_default_drop_default character varying(30) DEFAULT 'test1',
col_with_constraint numeric UNIQUE
) distributed BY (col_with_constraint);
create table bfv_legacy_B as select * from bfv_legacy_A;
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column(s) named 'col_with_constraint' as the Apache Cloudberry data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
select localoid::regclass, distkey from gp_distribution_policy p left join pg_class c on (p.localoid = c.oid) where c.relname in ('bfv_legacy_a', 'bfv_legacy_b') order by 1,2;
localoid | distkey
--------------+---------
bfv_legacy_a | 3
bfv_legacy_b | 3
(2 rows)