Files
openGauss-server/src/test/regress/sql/arrayinterface_ted.sql
2022-03-04 23:22:16 +08:00

293 lines
6.7 KiB
Transact-SQL

-- FOR VARRAY INTERFACE --
-- check compatibility --
show sql_compatibility;
-- create new schema --
drop schema if exists plpgsql_array_interface_ted;
create schema plpgsql_array_interface_ted;
set current_schema = plpgsql_array_interface_ted;
-- test array interface extend trim and delete --
create or replace procedure array_interface_p1()
as
declare
colors varchar[] := array['red','orange',null,'blue'];
colors1 varchar[] := array['red','blue'];
begin
raise NOTICE'%',colors;
colors.extend;
colors.extend(1);
raise NOTICE'%',colors;
colors.trim;
colors.trim(1);
raise NOTICE'%',colors;
colors.delete;
raise NOTICE'%',colors;
colors1.delete;
raise NOTICE'%',colors1;
end;
/
call array_interface_p1();
-- test array interface extend trim and delete --
create or replace procedure array_interface_p1()
as
declare
colors varchar[] := array['red'];
colors1 varchar[] := array['red','blue'];
begin
raise NOTICE'%',colors;
colors.EXTEND;
colors.EXTEND(3);
raise NOTICE'%',colors;
colors.TRIM;
colors.TRIM(1);
raise NOTICE'%',colors;
colors.DELETE;
raise NOTICE'%',colors;
colors1.DELETE;
raise NOTICE'%',colors1;
end;
/
call array_interface_p1();
-- test array interface extend mistake format --
create or replace procedure array_interface_p1()
as
declare
colors varchar[] := array['red'];
begin
raise NOTICE'%',colors;
colors.extend[1];
raise NOTICE'%',colors;
colors.extend[-1];
raise NOTICE'%',colors;
end;
/
--call array_interface_p1();
-- test array interface trim mistake format --
create or replace procedure array_interface_p1()
as
declare
colors varchar[] := array['red','orange','green','blue','indigo','violet'];
begin
raise NOTICE'%',colors;
colors.trim[1];
raise NOTICE'%',colors;
colors.trim[-1];
raise NOTICE'%',colors;
end;
/
--call array_interface_p1();
-- test array interface delete mistake format --
create or replace procedure array_interface_p1()
as
declare
colors varchar[] := array['red','orange','green','blue','indigo','violet'];
colors2 varchar[] := array['red','orange','green','blue','indigo','violet'];
colors3 varchar[] := array['red','orange','green','blue','indigo','violet'];
colors4 varchar[] := array['red','orange','green','blue','indigo','violet'];
begin
raise NOTICE'%',colors;
colors.delete(-1);
raise NOTICE'%',colors;
raise NOTICE'%',colors2;
colors2.delete(1);
raise NOTICE'%',colors2;
raise NOTICE'%',colors3;
colors3.delete(10);
raise NOTICE'%',colors3;
raise NOTICE'%',colors4;
colors4.delete[-1];
raise NOTICE'%',colors4;
end;
/
--call array_interface_p1();
-- test array name use special character --
create or replace procedure array_interface_p1()
as
declare
"!arr#%" varchar[]:=array['red','orange','green','blue','indigo'];
"@*ar&" integer[]:=array[1,0,5,6,8,3,9];
begin
raise NOTICE '%',"!arr#%";
"!arr#%".extend(3);
raise NOTICE '%',"!arr#%";
"!arr#%".trim(3);
raise NOTICE '%',"!arr#%";
"@*ar&".delete;
raise NOTICE '%',"@*ar&";
end;
/
call array_interface_p1();
-- test array name use special character mistake --
create or replace procedure array_interface_p1()
as
declare
@*ar& integer[]:=array[1,0,5,6,8,3,9];
begin
raise NOTICE'%',@*ar&;
@*ar&.extend(3);
raise NOTICE'%',@*ar&;
end;
/
-- call array_interface_p1();
-- test array interface extend with large parameter --
create or replace procedure array_interface_p1()
as
declare
arr integer[] := array[1,0,5,6,8,3,9];
begin
raise NOTICE'%',arr;
arr.extend(10000);
raise NOTICE'%',arr.count;
end;
/
call array_interface_p1();
-- test array interface trim --
create or replace procedure array_interface_p1()
as
declare
arr integer[] := array[1,0,5];
begin
raise NOTICE'%',arr;
arr.trim(10);
raise NOTICE'%',arr;
end;
/
call array_interface_p1();
-- test array interface delete with empty array --
create or replace procedure array_interface_p1()
as
declare
arr integer[] := array[]::integer[];
begin
raise NOTICE'%',arr;
arr.delete;
raise NOTICE'%',arr;
end;
/
call array_interface_p1();
-- test array interface delete missing ; --
create or replace procedure array_interface_p1()
as
declare
colors varchar[] := array['red','orange','green','blue','indigo','violet'];
begin
raise NOTICE'%',colors;
colors.delete
raise NOTICE'%',colors;
end;
/
-- test call array interface of another package
create or replace package pck1 is
type ta is varray(10) of varchar(100);
tb ta := ta('1','2','3', '4', '5');
end pck1;
/
create or replace package pck2 is
procedure proc1;
end pck2;
/
create or replace package body pck2 is
procedure proc1() is
begin
raise NOTICE '%',pck1.tb;
raise NOTICE '%',pck1.tb.count;
raise NOTICE '%',pck1.tb.first;
raise NOTICE '%',pck1.tb.last;
raise NOTICE '%',pck1.tb.count();
raise NOTICE '%',pck1.tb.first();
raise NOTICE '%',pck1.tb.last();
for i in pck1.tb.first .. pck1.tb.last
loop
if pck1.tb.exists(i) then
raise NOTICE '%',pck1.tb[i];
else
raise NOTICE '<Null>';
end if;
end loop;
pck1.tb.extend;
raise NOTICE '%',pck1.tb;
pck1.tb.extend();
raise NOTICE '%',pck1.tb;
pck1.tb.extend(2);
raise NOTICE '%',pck1.tb;
pck1.tb.trim;
raise NOTICE '%',pck1.tb;
pck1.tb.trim();
raise NOTICE '%',pck1.tb;
pck1.tb.trim(2);
raise NOTICE '%',pck1.tb;
pck1.tb.delete;
raise NOTICE '%',pck1.tb;
pck1.tb.extend;
raise NOTICE '%',pck1.tb;
pck1.tb.delete();
raise NOTICE '%',pck1.tb;
end;
end pck2;
/
call pck2.proc1();
-- test array interface delete with index --
create or replace procedure array_interface_p1() as
declare
array1 integer[] := array[1,2,3,4,5];
indx integer;
begin
raise NOTICE '%', array1;
raise NOTICE '%', array1.count;
raise NOTICE '%', array1.first;
raise NOTICE '%', array1.last;
indx := array1.first;
array1.delete(indx);
raise NOTICE '%', array1;
raise NOTICE '%', array1.count;
raise NOTICE '%', array1.first;
raise NOTICE '%', array1.last;
array1 := array[1,2,3,4,5];
indx := array1.last;
array1.delete(indx);
raise NOTICE '%', array1;
raise NOTICE '%', array1.count;
raise NOTICE '%', array1.first;
raise NOTICE '%', array1.last;
array1 := array[1,2,3,4,5];
array1.delete(3);
raise NOTICE '%', array1;
raise NOTICE '%', array1.count;
raise NOTICE '%', array1.first;
raise NOTICE '%', array1.last;
end;
/
call array_interface_p1();
-- clean up --
drop package if exists pck2;
drop package if exists pck1;
drop schema if exists plpgsql_array_interface_ted cascade;