|
|
|
@ -11,11 +11,11 @@ INSERT INTO lotest_stash_values (loid) SELECT lo_creat(42); |
|
|
|
|
BEGIN; |
|
|
|
|
-- lo_open(lobjId oid, mode integer) returns integer |
|
|
|
|
-- The mode parameter to lo_open uses two constants: |
|
|
|
|
-- INV_READ = 0x20000 = 2 * 16^4 |
|
|
|
|
-- INV_WRITE = 0x40000 = 4 * 16^4 |
|
|
|
|
-- INV_READ = 0x20000 |
|
|
|
|
-- INV_WRITE = 0x40000 |
|
|
|
|
-- The return value is a file descriptor-like value which remains valid for the |
|
|
|
|
-- transaction. |
|
|
|
|
UPDATE lotest_stash_values SET fd = lo_open(loid, CAST((2 | 4) * 16^4 AS integer)); |
|
|
|
|
UPDATE lotest_stash_values SET fd = lo_open(loid, CAST(x'20000' | x'40000' AS integer)); |
|
|
|
|
-- loread/lowrite names are wonky, different from other functions which are lo_* |
|
|
|
|
-- lowrite(fd integer, data bytea) returns integer |
|
|
|
|
-- the integer is the number of bytes written |
|
|
|
@ -58,7 +58,7 @@ SELECT lo_close(fd) FROM lotest_stash_values; |
|
|
|
|
END; |
|
|
|
|
-- Read out a portion |
|
|
|
|
BEGIN; |
|
|
|
|
UPDATE lotest_stash_values SET fd=lo_open(loid, CAST((2 | 4) * 16^4 AS integer)); |
|
|
|
|
UPDATE lotest_stash_values SET fd=lo_open(loid, CAST(x'20000' | x'40000' AS integer)); |
|
|
|
|
-- lo_lseek(fd integer, offset integer, whence integer) returns integer |
|
|
|
|
-- offset is in bytes, whence is one of three values: |
|
|
|
|
-- SEEK_SET (= 0) meaning relative to beginning |
|
|
|
@ -191,7 +191,7 @@ SELECT lo_unlink(loid) from lotest_stash_values; |
|
|
|
|
TRUNCATE lotest_stash_values; |
|
|
|
|
INSERT INTO lotest_stash_values (loid) SELECT lo_import('@abs_srcdir@/data/tenk.data'); |
|
|
|
|
BEGIN; |
|
|
|
|
UPDATE lotest_stash_values SET fd=lo_open(loid, CAST((2 | 4) * 16^4 AS integer)); |
|
|
|
|
UPDATE lotest_stash_values SET fd=lo_open(loid, CAST(x'20000' | x'40000' AS integer)); |
|
|
|
|
-- with the default BLKSZ, LOBLKSZ = 2048, so this positions us for a block |
|
|
|
|
-- edge case |
|
|
|
|
SELECT lo_lseek(fd, 2030, 0) FROM lotest_stash_values; |
|
|
|
|