Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
b8312c5f
Commit
b8312c5f
authored
Jun 06, 2004
by
Tom Lane
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add some regression tests for composite-type operations.
parent
bb3da43e
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
191 additions
and
2 deletions
+191
-2
src/test/regress/expected/rowtypes.out
src/test/regress/expected/rowtypes.out
+115
-0
src/test/regress/parallel_schedule
src/test/regress/parallel_schedule
+1
-1
src/test/regress/serial_schedule
src/test/regress/serial_schedule
+2
-1
src/test/regress/sql/rowtypes.sql
src/test/regress/sql/rowtypes.sql
+73
-0
No files found.
src/test/regress/expected/rowtypes.out
0 → 100644
View file @
b8312c5f
--
-- ROWTYPES
--
-- Make both a standalone composite type and a table rowtype
create type complex as (r float8, i float8);
create temp table fullname (first text, last text);
-- Nested composite
create type quad as (c1 complex, c2 complex);
-- Some simple tests of I/O conversions and row construction
select (1.1,2.2)::complex, row((3.3,4.4),(5.5,null))::quad;
row | row
-----------+------------------------
(1.1,2.2) | ("(3.3,4.4)","(5.5,)")
(1 row)
select row('Joe', 'Blow')::fullname, '(Joe,Blow)'::fullname;
row | fullname
------------+------------
(Joe,Blow) | (Joe,Blow)
(1 row)
select '(Joe,von Blow)'::fullname, '(Joe,d''Blow)'::fullname;
fullname | fullname
------------------+--------------
(Joe,"von Blow") | (Joe,d'Blow)
(1 row)
select '(Joe,"von""Blow")'::fullname, '(Joe,d\\\\Blow)'::fullname;
fullname | fullname
-------------------+-----------------
(Joe,"von""Blow") | (Joe,"d\\Blow")
(1 row)
select '(Joe,"Blow,Jr")'::fullname;
fullname
-----------------
(Joe,"Blow,Jr")
(1 row)
select '(Joe,)'::fullname; -- ok, null 2nd column
fullname
----------
(Joe,)
(1 row)
select '(Joe)'::fullname; -- bad
ERROR: malformed record literal: "(Joe)"
DETAIL: Too few columns.
select '(Joe,,)'::fullname; -- bad
ERROR: malformed record literal: "(Joe,,)"
DETAIL: Too many columns.
create temp table quadtable(f1 int, q quad);
insert into quadtable values (1, ((3.3,4.4),(5.5,6.6)));
insert into quadtable values (2, ((null,4.4),(5.5,6.6)));
select * from quadtable;
f1 | q
----+---------------------------
1 | ("(3.3,4.4)","(5.5,6.6)")
2 | ("(,4.4)","(5.5,6.6)")
(2 rows)
select f1, q.c1 from quadtable; -- fails, q is a table reference
ERROR: relation "q" does not exist
select f1, (q).c1, (qq.q).c1.i from quadtable qq;
f1 | c1 | i
----+-----------+-----
1 | (3.3,4.4) | 4.4
2 | (,4.4) | 4.4
(2 rows)
create temp table people (fn fullname, bd date);
insert into people values ('(Joe,Blow)', '1984-01-10');
select * from people;
fn | bd
------------+------------
(Joe,Blow) | 01-10-1984
(1 row)
-- at the moment this will not work due to ALTER TABLE inadequacy:
alter table fullname add column suffix text default '';
ERROR: cannot alter table "fullname" because column "people"."fn" uses its rowtype
-- but this should work:
alter table fullname add column suffix text default null;
select * from people;
fn | bd
-------------+------------
(Joe,Blow,) | 01-10-1984
(1 row)
-- This fails at the moment, would like it to work though:
update people set fn.suffix = 'Jr';
ERROR: syntax error at or near "." at character 21
LINE 1: update people set fn.suffix = 'Jr';
^
-- ugly workaround:
update people set fn = ((fn).first, (fn).last, 'III');
select * from people;
fn | bd
----------------+------------
(Joe,Blow,III) | 01-10-1984
(1 row)
-- The object here is to ensure that toasted references inside
-- composite values don't cause problems. The large f1 value will
-- be toasted inside pp, it must still work after being copied to people.
create temp table pp (f1 text);
insert into pp values (repeat('abcdefghijkl', 100000));
insert into people select ('Jim', f1, null)::fullname, current_date from pp;
select (fn).first, substr((fn).last, 1, 20), length((fn).last) from people;
first | substr | length
-------+----------------------+---------
Joe | Blow | 4
Jim | abcdefghijklabcdefgh | 1200000
(2 rows)
src/test/regress/parallel_schedule
View file @
b8312c5f
...
...
@@ -74,7 +74,7 @@ test: select_views portals_p2 rules foreign_key cluster
# The sixth group of parallel test
# ----------
# "plpgsql" cannot run concurrently with "rules"
test: limit plpgsql copy2 temp domain rangefuncs prepare without_oid conversion truncate alter_table sequence polymorphism
test: limit plpgsql copy2 temp domain rangefuncs prepare without_oid conversion truncate alter_table sequence polymorphism
rowtypes
# run stats by itself because its delay may be insufficient under heavy load
test: stats
src/test/regress/serial_schedule
View file @
b8312c5f
# $PostgreSQL: pgsql/src/test/regress/serial_schedule,v 1.2
4 2004/01/11 04:58:17 neilc
Exp $
# $PostgreSQL: pgsql/src/test/regress/serial_schedule,v 1.2
5 2004/06/06 21:20:46 tgl
Exp $
# This should probably be in an order similar to parallel_schedule.
test: boolean
test: char
...
...
@@ -94,4 +94,5 @@ test: truncate
test: alter_table
test: sequence
test: polymorphism
test: rowtypes
test: stats
src/test/regress/sql/rowtypes.sql
0 → 100644
View file @
b8312c5f
--
-- ROWTYPES
--
-- Make both a standalone composite type and a table rowtype
create
type
complex
as
(
r
float8
,
i
float8
);
create
temp
table
fullname
(
first
text
,
last
text
);
-- Nested composite
create
type
quad
as
(
c1
complex
,
c2
complex
);
-- Some simple tests of I/O conversions and row construction
select
(
1
.
1
,
2
.
2
)::
complex
,
row
((
3
.
3
,
4
.
4
),(
5
.
5
,
null
))::
quad
;
select
row
(
'Joe'
,
'Blow'
)::
fullname
,
'(Joe,Blow)'
::
fullname
;
select
'(Joe,von Blow)'
::
fullname
,
'(Joe,d
''
Blow)'
::
fullname
;
select
'(Joe,"von""Blow")'
::
fullname
,
'(Joe,d
\\\\
Blow)'
::
fullname
;
select
'(Joe,"Blow,Jr")'
::
fullname
;
select
'(Joe,)'
::
fullname
;
-- ok, null 2nd column
select
'(Joe)'
::
fullname
;
-- bad
select
'(Joe,,)'
::
fullname
;
-- bad
create
temp
table
quadtable
(
f1
int
,
q
quad
);
insert
into
quadtable
values
(
1
,
((
3
.
3
,
4
.
4
),(
5
.
5
,
6
.
6
)));
insert
into
quadtable
values
(
2
,
((
null
,
4
.
4
),(
5
.
5
,
6
.
6
)));
select
*
from
quadtable
;
select
f1
,
q
.
c1
from
quadtable
;
-- fails, q is a table reference
select
f1
,
(
q
).
c1
,
(
qq
.
q
).
c1
.
i
from
quadtable
qq
;
create
temp
table
people
(
fn
fullname
,
bd
date
);
insert
into
people
values
(
'(Joe,Blow)'
,
'1984-01-10'
);
select
*
from
people
;
-- at the moment this will not work due to ALTER TABLE inadequacy:
alter
table
fullname
add
column
suffix
text
default
''
;
-- but this should work:
alter
table
fullname
add
column
suffix
text
default
null
;
select
*
from
people
;
-- This fails at the moment, would like it to work though:
update
people
set
fn
.
suffix
=
'Jr'
;
-- ugly workaround:
update
people
set
fn
=
((
fn
).
first
,
(
fn
).
last
,
'III'
);
select
*
from
people
;
-- The object here is to ensure that toasted references inside
-- composite values don't cause problems. The large f1 value will
-- be toasted inside pp, it must still work after being copied to people.
create
temp
table
pp
(
f1
text
);
insert
into
pp
values
(
repeat
(
'abcdefghijkl'
,
100000
));
insert
into
people
select
(
'Jim'
,
f1
,
null
)::
fullname
,
current_date
from
pp
;
select
(
fn
).
first
,
substr
((
fn
).
last
,
1
,
20
),
length
((
fn
).
last
)
from
people
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment