summaryrefslogtreecommitdiff
path: root/src/pl
diff options
context:
space:
mode:
Diffstat (limited to 'src/pl')
-rw-r--r--src/pl/plpgsql/src/input/plpgsql_copy.source46
-rw-r--r--src/pl/plpgsql/src/output/plpgsql_copy.source43
2 files changed, 39 insertions, 50 deletions
diff --git a/src/pl/plpgsql/src/input/plpgsql_copy.source b/src/pl/plpgsql/src/input/plpgsql_copy.source
index b7bcbb7d17f..37f1fa132b2 100644
--- a/src/pl/plpgsql/src/input/plpgsql_copy.source
+++ b/src/pl/plpgsql/src/input/plpgsql_copy.source
@@ -1,3 +1,11 @@
+-- directory paths are passed to us in environment variables
+\getenv abs_srcdir PG_ABS_SRCDIR
+\getenv abs_builddir PG_ABS_BUILDDIR
+
+-- set up file names to use
+\set srcfilename :abs_srcdir '/data/copy1.data'
+\set destfilename :abs_builddir '/results/copy1.data'
+
CREATE TABLE copy1 (a int, b float);
-- COPY TO/FROM not authorized from client.
@@ -24,38 +32,26 @@ $$;
-- Valid cases
-- COPY FROM
-DO LANGUAGE plpgsql $$
-BEGIN
- COPY copy1 FROM '@abs_srcdir@/data/copy1.data';
-END;
-$$;
+\set dobody 'BEGIN COPY copy1 FROM ' :'srcfilename' '; END'
+DO LANGUAGE plpgsql :'dobody';
SELECT * FROM copy1 ORDER BY 1;
TRUNCATE copy1;
-DO LANGUAGE plpgsql $$
-BEGIN
- EXECUTE 'COPY copy1 FROM ''@abs_srcdir@/data/copy1.data''';
-END;
-$$;
+\set cmd 'COPY copy1 FROM ' :'srcfilename'
+\set dobody 'BEGIN EXECUTE ' :'cmd' '; END'
+DO LANGUAGE plpgsql :'dobody';
SELECT * FROM copy1 ORDER BY 1;
-- COPY TO
-- Copy the data externally once, then process it back to the table.
-DO LANGUAGE plpgsql $$
-BEGIN
- COPY copy1 TO '@abs_builddir@/results/copy1.data';
-END;
-$$;
+\set dobody 'BEGIN COPY copy1 TO ' :'destfilename' '; END'
+DO LANGUAGE plpgsql :'dobody';
TRUNCATE copy1;
-DO LANGUAGE plpgsql $$
-BEGIN
- COPY copy1 FROM '@abs_builddir@/results/copy1.data';
-END;
-$$;
-DO LANGUAGE plpgsql $$
-BEGIN
- EXECUTE 'COPY copy1 FROM ''@abs_builddir@/results/copy1.data''';
-END;
-$$;
+\set dobody 'BEGIN COPY copy1 FROM ' :'destfilename' '; END'
+DO LANGUAGE plpgsql :'dobody';
+
+\set cmd 'COPY copy1 FROM ' :'destfilename'
+\set dobody 'BEGIN EXECUTE ' :'cmd' '; END'
+DO LANGUAGE plpgsql :'dobody';
SELECT * FROM copy1 ORDER BY 1;
diff --git a/src/pl/plpgsql/src/output/plpgsql_copy.source b/src/pl/plpgsql/src/output/plpgsql_copy.source
index 86e833d055a..bc834be1971 100644
--- a/src/pl/plpgsql/src/output/plpgsql_copy.source
+++ b/src/pl/plpgsql/src/output/plpgsql_copy.source
@@ -1,3 +1,9 @@
+-- directory paths are passed to us in environment variables
+\getenv abs_srcdir PG_ABS_SRCDIR
+\getenv abs_builddir PG_ABS_BUILDDIR
+-- set up file names to use
+\set srcfilename :abs_srcdir '/data/copy1.data'
+\set destfilename :abs_builddir '/results/copy1.data'
CREATE TABLE copy1 (a int, b float);
-- COPY TO/FROM not authorized from client.
DO LANGUAGE plpgsql $$
@@ -30,11 +36,8 @@ ERROR: cannot COPY to/from client in PL/pgSQL
CONTEXT: PL/pgSQL function inline_code_block line 3 at EXECUTE
-- Valid cases
-- COPY FROM
-DO LANGUAGE plpgsql $$
-BEGIN
- COPY copy1 FROM '@abs_srcdir@/data/copy1.data';
-END;
-$$;
+\set dobody 'BEGIN COPY copy1 FROM ' :'srcfilename' '; END'
+DO LANGUAGE plpgsql :'dobody';
SELECT * FROM copy1 ORDER BY 1;
a | b
---+-----
@@ -44,11 +47,9 @@ SELECT * FROM copy1 ORDER BY 1;
(3 rows)
TRUNCATE copy1;
-DO LANGUAGE plpgsql $$
-BEGIN
- EXECUTE 'COPY copy1 FROM ''@abs_srcdir@/data/copy1.data''';
-END;
-$$;
+\set cmd 'COPY copy1 FROM ' :'srcfilename'
+\set dobody 'BEGIN EXECUTE ' :'cmd' '; END'
+DO LANGUAGE plpgsql :'dobody';
SELECT * FROM copy1 ORDER BY 1;
a | b
---+-----
@@ -59,22 +60,14 @@ SELECT * FROM copy1 ORDER BY 1;
-- COPY TO
-- Copy the data externally once, then process it back to the table.
-DO LANGUAGE plpgsql $$
-BEGIN
- COPY copy1 TO '@abs_builddir@/results/copy1.data';
-END;
-$$;
+\set dobody 'BEGIN COPY copy1 TO ' :'destfilename' '; END'
+DO LANGUAGE plpgsql :'dobody';
TRUNCATE copy1;
-DO LANGUAGE plpgsql $$
-BEGIN
- COPY copy1 FROM '@abs_builddir@/results/copy1.data';
-END;
-$$;
-DO LANGUAGE plpgsql $$
-BEGIN
- EXECUTE 'COPY copy1 FROM ''@abs_builddir@/results/copy1.data''';
-END;
-$$;
+\set dobody 'BEGIN COPY copy1 FROM ' :'destfilename' '; END'
+DO LANGUAGE plpgsql :'dobody';
+\set cmd 'COPY copy1 FROM ' :'destfilename'
+\set dobody 'BEGIN EXECUTE ' :'cmd' '; END'
+DO LANGUAGE plpgsql :'dobody';
SELECT * FROM copy1 ORDER BY 1;
a | b
---+-----