diff options
Diffstat (limited to 'src/test/regress/sql/enum.sql')
-rw-r--r-- | src/test/regress/sql/enum.sql | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/test/regress/sql/enum.sql b/src/test/regress/sql/enum.sql index 387e8e72ed8..70bf8c5f1ba 100644 --- a/src/test/regress/sql/enum.sql +++ b/src/test/regress/sql/enum.sql @@ -16,6 +16,92 @@ SELECT 'red'::rainbow; SELECT 'mauve'::rainbow; -- +-- adding new values +-- + +CREATE TYPE planets AS ENUM ( 'venus', 'earth', 'mars' ); + +SELECT enumlabel, enumsortorder +FROM pg_enum +WHERE enumtypid = 'planets'::regtype +ORDER BY 2; + +ALTER TYPE planets ADD 'uranus'; + +SELECT enumlabel, enumsortorder +FROM pg_enum +WHERE enumtypid = 'planets'::regtype +ORDER BY 2; + +ALTER TYPE planets ADD 'mercury' BEFORE 'venus'; +ALTER TYPE planets ADD 'saturn' BEFORE 'uranus'; +ALTER TYPE planets ADD 'jupiter' AFTER 'mars'; +ALTER TYPE planets ADD 'neptune' AFTER 'uranus'; + +SELECT enumlabel, enumsortorder +FROM pg_enum +WHERE enumtypid = 'planets'::regtype +ORDER BY 2; + +SELECT enumlabel, enumsortorder +FROM pg_enum +WHERE enumtypid = 'planets'::regtype +ORDER BY enumlabel::planets; + +-- errors for adding labels +ALTER TYPE planets ADD + 'plutoplutoplutoplutoplutoplutoplutoplutoplutoplutoplutoplutoplutopluto'; + +ALTER TYPE planets ADD 'pluto' AFTER 'zeus'; + +-- +-- Test inserting so many values that we have to renumber +-- + +create type insenum as enum ('L1', 'L2'); + +alter type insenum add 'i1' before 'L2'; +alter type insenum add 'i2' before 'L2'; +alter type insenum add 'i3' before 'L2'; +alter type insenum add 'i4' before 'L2'; +alter type insenum add 'i5' before 'L2'; +alter type insenum add 'i6' before 'L2'; +alter type insenum add 'i7' before 'L2'; +alter type insenum add 'i8' before 'L2'; +alter type insenum add 'i9' before 'L2'; +alter type insenum add 'i10' before 'L2'; +alter type insenum add 'i11' before 'L2'; +alter type insenum add 'i12' before 'L2'; +alter type insenum add 'i13' before 'L2'; +alter type insenum add 'i14' before 'L2'; +alter type insenum add 'i15' before 'L2'; +alter type insenum add 'i16' before 'L2'; +alter type insenum add 'i17' before 'L2'; +alter type insenum add 'i18' before 'L2'; +alter type insenum add 'i19' before 'L2'; +alter type insenum add 'i20' before 'L2'; +alter type insenum add 'i21' before 'L2'; +alter type insenum add 'i22' before 'L2'; +alter type insenum add 'i23' before 'L2'; +alter type insenum add 'i24' before 'L2'; +alter type insenum add 'i25' before 'L2'; +alter type insenum add 'i26' before 'L2'; +alter type insenum add 'i27' before 'L2'; +alter type insenum add 'i28' before 'L2'; +alter type insenum add 'i29' before 'L2'; +alter type insenum add 'i30' before 'L2'; + +-- The exact values of enumsortorder will now depend on the local properties +-- of float4, but in any reasonable implementation we should get at least +-- 20 splits before having to renumber; so only hide values > 20. + +SELECT enumlabel, + case when enumsortorder > 20 then null else enumsortorder end as so +FROM pg_enum +WHERE enumtypid = 'insenum'::regtype +ORDER BY enumsortorder; + +-- -- Basic table creation, row selection -- CREATE TABLE enumtest (col rainbow); |