diff options
| author | Tom Lane | 2012-10-08 22:24:06 +0000 |
|---|---|---|
| committer | Tom Lane | 2012-10-08 22:24:32 +0000 |
| commit | 26fe56481c0f7baa705f0b3265b5a0676f894a94 (patch) | |
| tree | 60bfe35565e16c168915e10500f3b61440f7865f /src/test | |
| parent | 878daf2e72755feadbfb8d21aad26dafd8658086 (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.c | 75 | ||||
| -rw-r--r-- | src/test/regress/input/largeobject.source | 2 | ||||
| -rw-r--r-- | src/test/regress/output/largeobject.source | 2 | ||||
| -rw-r--r-- | src/test/regress/output/largeobject_1.source | 82 |
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; |
