269 lines
5.5 KiB
SQL
269 lines
5.5 KiB
SQL
--
|
|
-- MISC
|
|
--
|
|
|
|
-- directory paths are passed to us in environment variables
|
|
\getenv abs_srcdir PG_ABS_SRCDIR
|
|
\getenv abs_builddir PG_ABS_BUILDDIR
|
|
|
|
--
|
|
-- BTREE
|
|
--
|
|
UPDATE onek
|
|
SET unique1 = onek.unique1 + 1;
|
|
|
|
UPDATE onek
|
|
SET unique1 = onek.unique1 - 1;
|
|
|
|
--
|
|
-- BTREE partial
|
|
--
|
|
-- UPDATE onek2
|
|
-- SET unique1 = onek2.unique1 + 1;
|
|
|
|
--UPDATE onek2
|
|
-- SET unique1 = onek2.unique1 - 1;
|
|
|
|
--
|
|
-- BTREE shutting out non-functional updates
|
|
--
|
|
-- the following two tests seem to take a long time on some
|
|
-- systems. This non-func update stuff needs to be examined
|
|
-- more closely. - jolly (2/22/96)
|
|
--
|
|
UPDATE tmp
|
|
SET stringu1 = reverse_name(onek.stringu1)
|
|
FROM onek
|
|
WHERE onek.stringu1 = 'JBAAAA' and
|
|
onek.stringu1 = tmp.stringu1;
|
|
|
|
UPDATE tmp
|
|
SET stringu1 = reverse_name(onek2.stringu1)
|
|
FROM onek2
|
|
WHERE onek2.stringu1 = 'JCAAAA' and
|
|
onek2.stringu1 = tmp.stringu1;
|
|
|
|
DROP TABLE tmp;
|
|
|
|
--UPDATE person*
|
|
-- SET age = age + 1;
|
|
|
|
--UPDATE person*
|
|
-- SET age = age + 3
|
|
-- WHERE name = 'linda';
|
|
|
|
--
|
|
-- copy
|
|
--
|
|
\set filename :abs_builddir '/results/onek.data'
|
|
COPY onek TO :'filename';
|
|
|
|
DELETE FROM onek;
|
|
|
|
COPY onek FROM :'filename';
|
|
|
|
SELECT unique1 FROM onek WHERE unique1 < 2 ORDER BY unique1;
|
|
|
|
DELETE FROM onek2;
|
|
|
|
COPY onek2 FROM :'filename';
|
|
|
|
SELECT unique1 FROM onek2 WHERE unique1 < 2 ORDER BY unique1;
|
|
|
|
\set filename :abs_builddir '/results/stud_emp.data'
|
|
COPY BINARY stud_emp TO :'filename';
|
|
|
|
DELETE FROM stud_emp;
|
|
|
|
COPY BINARY stud_emp FROM :'filename';
|
|
|
|
SELECT * FROM stud_emp;
|
|
|
|
-- COPY aggtest FROM stdin;
|
|
-- 56 7.8
|
|
-- 100 99.097
|
|
-- 0 0.09561
|
|
-- 42 324.78
|
|
-- .
|
|
-- COPY aggtest TO stdout;
|
|
|
|
|
|
--
|
|
-- inheritance stress test
|
|
--
|
|
SELECT * FROM a_star*;
|
|
|
|
SELECT *
|
|
FROM b_star* x
|
|
WHERE x.b = text 'bumble' or x.a < 3;
|
|
|
|
SELECT class, a
|
|
FROM c_star* x
|
|
WHERE x.c ~ text 'hi';
|
|
|
|
SELECT class, b, c
|
|
FROM d_star* x
|
|
WHERE x.a < 100;
|
|
|
|
SELECT class, c FROM e_star* x WHERE x.c NOTNULL;
|
|
|
|
SELECT * FROM f_star* x WHERE x.c ISNULL;
|
|
|
|
-- grouping and aggregation on inherited sets have been busted in the past...
|
|
|
|
SELECT sum(a) FROM a_star*;
|
|
|
|
SELECT class, sum(a) FROM a_star* GROUP BY class ORDER BY class;
|
|
|
|
|
|
ALTER TABLE f_star RENAME COLUMN f TO ff;
|
|
|
|
ALTER TABLE e_star* RENAME COLUMN e TO ee;
|
|
|
|
ALTER TABLE d_star* RENAME COLUMN d TO dd;
|
|
|
|
ALTER TABLE c_star* RENAME COLUMN c TO cc;
|
|
|
|
ALTER TABLE b_star* RENAME COLUMN b TO bb;
|
|
|
|
ALTER TABLE a_star* RENAME COLUMN a TO aa;
|
|
|
|
SELECT class, aa
|
|
FROM a_star* x
|
|
WHERE aa ISNULL;
|
|
|
|
-- As of Postgres 7.1, ALTER implicitly recurses,
|
|
-- so this should be same as ALTER a_star*
|
|
|
|
ALTER TABLE a_star RENAME COLUMN aa TO foo;
|
|
|
|
SELECT class, foo
|
|
FROM a_star* x
|
|
WHERE x.foo >= 2;
|
|
|
|
ALTER TABLE a_star RENAME COLUMN foo TO aa;
|
|
|
|
SELECT *
|
|
from a_star*
|
|
WHERE aa < 1000;
|
|
|
|
ALTER TABLE f_star ADD COLUMN f int4;
|
|
|
|
UPDATE f_star SET f = 10;
|
|
|
|
ALTER TABLE e_star* ADD COLUMN e int4;
|
|
|
|
--UPDATE e_star* SET e = 42;
|
|
|
|
SELECT * FROM e_star*;
|
|
|
|
ALTER TABLE a_star* ADD COLUMN a text;
|
|
|
|
-- That ALTER TABLE should have added TOAST tables.
|
|
SELECT relname, reltoastrelid <> 0 AS has_toast_table
|
|
FROM pg_class
|
|
WHERE oid::regclass IN ('a_star', 'c_star')
|
|
ORDER BY 1;
|
|
|
|
--UPDATE b_star*
|
|
-- SET a = text 'gazpacho'
|
|
-- WHERE aa > 4;
|
|
|
|
SELECT class, aa, a FROM a_star*;
|
|
|
|
|
|
--
|
|
-- versions
|
|
--
|
|
|
|
--
|
|
-- postquel functions
|
|
--
|
|
--
|
|
-- mike does post_hacking,
|
|
-- joe and sally play basketball, and
|
|
-- everyone else does nothing.
|
|
--
|
|
SELECT p.name, name(p.hobbies) FROM ONLY person p;
|
|
|
|
--
|
|
-- as above, but jeff also does post_hacking.
|
|
--
|
|
SELECT p.name, name(p.hobbies) FROM person* p;
|
|
|
|
--
|
|
-- the next two queries demonstrate how functions generate bogus duplicates.
|
|
-- this is a "feature" ..
|
|
--
|
|
SELECT DISTINCT hobbies_r.name, name(hobbies_r.equipment) FROM hobbies_r
|
|
ORDER BY 1,2;
|
|
|
|
SELECT hobbies_r.name, (hobbies_r.equipment).name FROM hobbies_r;
|
|
|
|
--
|
|
-- mike needs advil and peet's coffee,
|
|
-- joe and sally need hightops, and
|
|
-- everyone else is fine.
|
|
--
|
|
SELECT p.name, name(p.hobbies), name(equipment(p.hobbies)) FROM ONLY person p;
|
|
|
|
--
|
|
-- as above, but jeff needs advil and peet's coffee as well.
|
|
--
|
|
SELECT p.name, name(p.hobbies), name(equipment(p.hobbies)) FROM person* p;
|
|
|
|
--
|
|
-- just like the last two, but make sure that the target list fixup and
|
|
-- unflattening is being done correctly.
|
|
--
|
|
SELECT name(equipment(p.hobbies)), p.name, name(p.hobbies) FROM ONLY person p;
|
|
|
|
SELECT (p.hobbies).equipment.name, p.name, name(p.hobbies) FROM person* p;
|
|
|
|
SELECT (p.hobbies).equipment.name, name(p.hobbies), p.name FROM ONLY person p;
|
|
|
|
SELECT name(equipment(p.hobbies)), name(p.hobbies), p.name FROM person* p;
|
|
|
|
SELECT name(equipment(hobby_construct(text 'skywalking', text 'mer')));
|
|
|
|
SELECT name(equipment(hobby_construct_named(text 'skywalking', text 'mer')));
|
|
|
|
SELECT name(equipment_named(hobby_construct_named(text 'skywalking', text 'mer')));
|
|
|
|
SELECT name(equipment_named_ambiguous_1a(hobby_construct_named(text 'skywalking', text 'mer')));
|
|
|
|
SELECT name(equipment_named_ambiguous_1b(hobby_construct_named(text 'skywalking', text 'mer')));
|
|
|
|
SELECT name(equipment_named_ambiguous_1c(hobby_construct_named(text 'skywalking', text 'mer')));
|
|
|
|
SELECT name(equipment_named_ambiguous_2a(text 'skywalking'));
|
|
|
|
SELECT name(equipment_named_ambiguous_2b(text 'skywalking'));
|
|
|
|
SELECT hobbies_by_name('basketball');
|
|
|
|
SELECT name, overpaid(emp.*) FROM emp;
|
|
|
|
--
|
|
-- Try a few cases with SQL-spec row constructor expressions
|
|
--
|
|
SELECT * FROM equipment(ROW('skywalking', 'mer'));
|
|
|
|
SELECT name(equipment(ROW('skywalking', 'mer')));
|
|
|
|
SELECT *, name(equipment(h.*)) FROM hobbies_r h;
|
|
|
|
SELECT *, (equipment(CAST((h.*) AS hobbies_r))).name FROM hobbies_r h;
|
|
|
|
--
|
|
-- functional joins
|
|
--
|
|
|
|
--
|
|
-- instance rules
|
|
--
|
|
|
|
--
|
|
-- rewrite rules
|
|
--
|