summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorTom Lane2012-10-08 22:24:06 +0000
committerTom Lane2012-10-08 22:24:32 +0000
commit26fe56481c0f7baa705f0b3265b5a0676f894a94 (patch)
tree60bfe35565e16c168915e10500f3b61440f7865f /src/test
parent878daf2e72755feadbfb8d21aad26dafd8658086 (diff)
Code review for 64-bit-large-object patch.
Fix broken-on-bigendian-machines byte-swapping functions, add missed update of alternate regression expected file, improve error reporting, remove some unnecessary code, sync testlo64.c with current testlo.c (it seems to have been cloned from a very old copy of that), assorted cosmetic improvements.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/examples/testlo64.c75
-rw-r--r--src/test/regress/input/largeobject.source2
-rw-r--r--src/test/regress/output/largeobject.source2
-rw-r--r--src/test/regress/output/largeobject_1.source82
4 files changed, 108 insertions, 53 deletions
diff --git a/src/test/examples/testlo64.c b/src/test/examples/testlo64.c
index 6ab7f524caa..c10c3e01385 100644
--- a/src/test/examples/testlo64.c
+++ b/src/test/examples/testlo64.c
@@ -3,7 +3,7 @@
* testlo64.c
* test using large objects with libpq using 64-bit APIs
*
- * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
*
@@ -46,7 +46,7 @@ importFile(PGconn *conn, char *filename)
fd = open(filename, O_RDONLY, 0666);
if (fd < 0)
{ /* error */
- fprintf(stderr, "can't open unix file\"%s\"\n", filename);
+ fprintf(stderr, "cannot open unix file\"%s\"\n", filename);
}
/*
@@ -54,7 +54,7 @@ importFile(PGconn *conn, char *filename)
*/
lobjId = lo_creat(conn, INV_READ | INV_WRITE);
if (lobjId == 0)
- fprintf(stderr, "can't create large object");
+ fprintf(stderr, "cannot create large object");
lobj_fd = lo_open(conn, lobjId, INV_WRITE);
@@ -81,24 +81,16 @@ pickout(PGconn *conn, Oid lobjId, pg_int64 start, int len)
char *buf;
int nbytes;
int nread;
- pg_int64 pos;
lobj_fd = lo_open(conn, lobjId, INV_READ);
if (lobj_fd < 0)
- fprintf(stderr, "can't open large object %u", lobjId);
+ fprintf(stderr, "cannot open large object %u", lobjId);
- if (lo_tell64(conn, lobj_fd) < 0)
- {
- fprintf(stderr, "error lo_tell64: %s\n", PQerrorMessage(conn));
- }
-
- if ((pos=lo_lseek64(conn, lobj_fd, start, SEEK_SET)) < 0)
- {
- fprintf(stderr, "error lo_lseek64: %s\n", PQerrorMessage(conn));
- return;
- }
+ if (lo_lseek64(conn, lobj_fd, start, SEEK_SET) < 0)
+ fprintf(stderr, "error in lo_lseek64: %s", PQerrorMessage(conn));
- fprintf(stderr, "before read: retval of lo_lseek64 : %lld\n", (long long int) pos);
+ if (lo_tell64(conn, lobj_fd) != start)
+ fprintf(stderr, "error in lo_tell64: %s", PQerrorMessage(conn));
buf = malloc(len + 1);
@@ -114,10 +106,6 @@ pickout(PGconn *conn, Oid lobjId, pg_int64 start, int len)
}
free(buf);
fprintf(stderr, "\n");
-
- pos = lo_tell64(conn, lobj_fd);
- fprintf(stderr, "after read: retval of lo_tell64 : %lld\n\n", (long long int) pos);
-
lo_close(conn, lobj_fd);
}
@@ -129,18 +117,13 @@ overwrite(PGconn *conn, Oid lobjId, pg_int64 start, int len)
int nbytes;
int nwritten;
int i;
- pg_int64 pos;
- lobj_fd = lo_open(conn, lobjId, INV_READ | INV_WRITE);
+ lobj_fd = lo_open(conn, lobjId, INV_WRITE);
if (lobj_fd < 0)
- fprintf(stderr, "can't open large object %u", lobjId);
+ fprintf(stderr, "cannot open large object %u", lobjId);
- if ((pos=lo_lseek64(conn, lobj_fd, start, SEEK_SET)) < 0)
- {
- fprintf(stderr, "error lo_lseek64: %s\n", PQerrorMessage(conn));
- return;
- }
- fprintf(stderr, "before write: retval of lo_lseek64 : %lld\n", (long long int) pos);
+ if (lo_lseek64(conn, lobj_fd, start, SEEK_SET) < 0)
+ fprintf(stderr, "error in lo_lseek64: %s", PQerrorMessage(conn));
buf = malloc(len + 1);
@@ -160,30 +143,22 @@ overwrite(PGconn *conn, Oid lobjId, pg_int64 start, int len)
}
}
free(buf);
-
- pos = lo_tell64(conn, lobj_fd);
- fprintf(stderr, "after write: retval of lo_tell64 : %lld\n\n", (long long int) pos);
-
+ fprintf(stderr, "\n");
lo_close(conn, lobj_fd);
}
static void
-my_truncate(PGconn *conn, Oid lobjId, size_t len)
+my_truncate(PGconn *conn, Oid lobjId, pg_int64 len)
{
int lobj_fd;
lobj_fd = lo_open(conn, lobjId, INV_READ | INV_WRITE);
if (lobj_fd < 0)
- fprintf(stderr, "can't open large object %u", lobjId);
+ fprintf(stderr, "cannot open large object %u", lobjId);
if (lo_truncate64(conn, lobj_fd, len) < 0)
- {
- fprintf(stderr, "error lo_truncate64: %s\n", PQerrorMessage(conn));
- return;
- }
+ fprintf(stderr, "error in lo_truncate64: %s", PQerrorMessage(conn));
-
- fprintf(stderr, "\n");
lo_close(conn, lobj_fd);
}
@@ -203,11 +178,11 @@ exportFile(PGconn *conn, Oid lobjId, char *filename)
int fd;
/*
- * create an inversion "object"
+ * open the large object
*/
lobj_fd = lo_open(conn, lobjId, INV_READ);
if (lobj_fd < 0)
- fprintf(stderr, "can't open large object %u", lobjId);
+ fprintf(stderr, "cannot open large object %u", lobjId);
/*
* open the file to be written to
@@ -215,12 +190,12 @@ exportFile(PGconn *conn, Oid lobjId, char *filename)
fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0666);
if (fd < 0)
{ /* error */
- fprintf(stderr, "can't open unix file\"%s\"",
+ fprintf(stderr, "cannot open unix file\"%s\"",
filename);
}
/*
- * read in from the Unix file and write to the inversion file
+ * read in from the inversion file and write to the Unix file
*/
while ((nbytes = lo_read(conn, lobj_fd, buf, BUFSIZE)) > 0)
{
@@ -293,24 +268,22 @@ main(int argc, char **argv)
printf("\tas large object %u.\n", lobjOid);
printf("picking out bytes 4294967000-4294968000 of the large object\n");
- pickout(conn, lobjOid, 4294967000ULL, 1000);
+ pickout(conn, lobjOid, 4294967000U, 1000);
printf("overwriting bytes 4294967000-4294968000 of the large object with X's\n");
- overwrite(conn, lobjOid, 4294967000ULL, 1000);
-
+ overwrite(conn, lobjOid, 4294967000U, 1000);
printf("exporting large object to file \"%s\" ...\n", out_filename);
/* exportFile(conn, lobjOid, out_filename); */
if (!lo_export(conn, lobjOid, out_filename))
fprintf(stderr, "%s\n", PQerrorMessage(conn));
- printf("truncating to 3294968000 byte\n");
- my_truncate(conn, lobjOid, 3294968000ULL);
+ printf("truncating to 3294968000 bytes\n");
+ my_truncate(conn, lobjOid, 3294968000U);
printf("exporting truncated large object to file \"%s\" ...\n", out_filename2);
if (!lo_export(conn, lobjOid, out_filename2))
fprintf(stderr, "%s\n", PQerrorMessage(conn));
-
}
res = PQexec(conn, "end");
diff --git a/src/test/regress/input/largeobject.source b/src/test/regress/input/largeobject.source
index 4984d78a069..f0ea7a2e173 100644
--- a/src/test/regress/input/largeobject.source
+++ b/src/test/regress/input/largeobject.source
@@ -125,7 +125,7 @@ SELECT lo_tell(fd) FROM lotest_stash_values;
SELECT lo_close(fd) FROM lotest_stash_values;
END;
--- Test 64-bit largelbject functions.
+-- Test 64-bit large object functions.
BEGIN;
UPDATE lotest_stash_values SET fd = lo_open(loid, CAST(x'20000' | x'40000' AS integer));
diff --git a/src/test/regress/output/largeobject.source b/src/test/regress/output/largeobject.source
index 74c4772b03a..a25ac2a9125 100644
--- a/src/test/regress/output/largeobject.source
+++ b/src/test/regress/output/largeobject.source
@@ -210,7 +210,7 @@ SELECT lo_close(fd) FROM lotest_stash_values;
(1 row)
END;
--- Test 64-bit largelbject functions.
+-- Test 64-bit large object functions.
BEGIN;
UPDATE lotest_stash_values SET fd = lo_open(loid, CAST(x'20000' | x'40000' AS integer));
SELECT lo_lseek64(fd, 4294967296, 0) FROM lotest_stash_values;
diff --git a/src/test/regress/output/largeobject_1.source b/src/test/regress/output/largeobject_1.source
index 5c69eff03b9..bae74f6c268 100644
--- a/src/test/regress/output/largeobject_1.source
+++ b/src/test/regress/output/largeobject_1.source
@@ -210,6 +210,88 @@ SELECT lo_close(fd) FROM lotest_stash_values;
(1 row)
END;
+-- Test 64-bit large object functions.
+BEGIN;
+UPDATE lotest_stash_values SET fd = lo_open(loid, CAST(x'20000' | x'40000' AS integer));
+SELECT lo_lseek64(fd, 4294967296, 0) FROM lotest_stash_values;
+ lo_lseek64
+------------
+ 4294967296
+(1 row)
+
+SELECT lowrite(fd, 'offset:4GB') FROM lotest_stash_values;
+ lowrite
+---------
+ 10
+(1 row)
+
+SELECT lo_tell64(fd) FROM lotest_stash_values;
+ lo_tell64
+------------
+ 4294967306
+(1 row)
+
+SELECT lo_lseek64(fd, -10, 1) FROM lotest_stash_values;
+ lo_lseek64
+------------
+ 4294967296
+(1 row)
+
+SELECT lo_tell64(fd) FROM lotest_stash_values;
+ lo_tell64
+------------
+ 4294967296
+(1 row)
+
+SELECT loread(fd, 10) FROM lotest_stash_values;
+ loread
+------------
+ offset:4GB
+(1 row)
+
+SELECT lo_truncate64(fd, 5000000000) FROM lotest_stash_values;
+ lo_truncate64
+---------------
+ 0
+(1 row)
+
+SELECT lo_lseek64(fd, 0, 2) FROM lotest_stash_values;
+ lo_lseek64
+------------
+ 5000000000
+(1 row)
+
+SELECT lo_tell64(fd) FROM lotest_stash_values;
+ lo_tell64
+------------
+ 5000000000
+(1 row)
+
+SELECT lo_truncate64(fd, 3000000000) FROM lotest_stash_values;
+ lo_truncate64
+---------------
+ 0
+(1 row)
+
+SELECT lo_lseek64(fd, 0, 2) FROM lotest_stash_values;
+ lo_lseek64
+------------
+ 3000000000
+(1 row)
+
+SELECT lo_tell64(fd) FROM lotest_stash_values;
+ lo_tell64
+------------
+ 3000000000
+(1 row)
+
+SELECT lo_close(fd) FROM lotest_stash_values;
+ lo_close
+----------
+ 0
+(1 row)
+
+END;
-- lo_unlink(lobjId oid) returns integer
-- return value appears to always be 1
SELECT lo_unlink(loid) from lotest_stash_values;