v1-0001-bufile_test.patch
application/octet-stream
Filename: v1-0001-bufile_test.patch
Type: application/octet-stream
Part: 1
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v1-0001
Subject: bufile_test
| File | + | − |
|---|---|---|
| contrib/buffile_test/buffile_test--1.0.sql | 13 | 0 |
| contrib/buffile_test/buffile_test.c | 109 | 0 |
| contrib/buffile_test/buffile_test.control | 5 | 0 |
| contrib/buffile_test/.gitignore | 4 | 0 |
| contrib/buffile_test/Makefile | 22 | 0 |
From 8c12f5d6c8fa572eb7eb17721aa2f09589897f53 Mon Sep 17 00:00:00 2001
From: dilip kumar <dilipbalaut@localhost.localdomain>
Date: Tue, 18 Aug 2020 13:44:53 +0530
Subject: [PATCH v1] bufile_test
---
contrib/buffile_test/.gitignore | 4 +
contrib/buffile_test/Makefile | 22 +++++
contrib/buffile_test/buffile_test--1.0.sql | 13 +++
contrib/buffile_test/buffile_test.c | 109 +++++++++++++++++++++
contrib/buffile_test/buffile_test.control | 5 +
5 files changed, 153 insertions(+)
create mode 100644 contrib/buffile_test/.gitignore
create mode 100644 contrib/buffile_test/Makefile
create mode 100644 contrib/buffile_test/buffile_test--1.0.sql
create mode 100644 contrib/buffile_test/buffile_test.c
create mode 100644 contrib/buffile_test/buffile_test.control
diff --git a/contrib/buffile_test/.gitignore b/contrib/buffile_test/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/contrib/buffile_test/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/buffile_test/Makefile b/contrib/buffile_test/Makefile
new file mode 100644
index 0000000000..96da1928fa
--- /dev/null
+++ b/contrib/buffile_test/Makefile
@@ -0,0 +1,22 @@
+# contrib/amcheck/Makefile
+
+MODULE_big = buffile_test
+OBJS = \
+ $(WIN32RES) \
+ buffile_test.o
+
+EXTENSION = buffile_test
+DATA = buffile_test--1.0.sql
+PGFILEDESC = "buffile_test"
+
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = contrib/amcheck
+top_builddir = ../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/contrib/buffile_test/buffile_test--1.0.sql b/contrib/buffile_test/buffile_test--1.0.sql
new file mode 100644
index 0000000000..6305f3eef1
--- /dev/null
+++ b/contrib/buffile_test/buffile_test--1.0.sql
@@ -0,0 +1,13 @@
+/* contrib/amcheck/amcheck--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION buffile_test" to load this file. \quit
+
+--
+-- bt_index_check()
+--
+CREATE FUNCTION buffile_test()
+RETURNS VOID
+AS 'MODULE_PATHNAME', 'buffile_test'
+LANGUAGE C STRICT PARALLEL RESTRICTED;
+
diff --git a/contrib/buffile_test/buffile_test.c b/contrib/buffile_test/buffile_test.c
new file mode 100644
index 0000000000..47eb0b5c1b
--- /dev/null
+++ b/contrib/buffile_test/buffile_test.c
@@ -0,0 +1,109 @@
+#include "postgres.h"
+
+#include "access/htup_details.h"
+#include "access/nbtree.h"
+#include "access/table.h"
+#include "access/tableam.h"
+#include "access/transam.h"
+#include "access/xact.h"
+#include "catalog/index.h"
+#include "catalog/pg_am.h"
+#include "commands/tablecmds.h"
+#include "lib/bloomfilter.h"
+#include "miscadmin.h"
+#include "storage/buf_internals.h"
+#include "storage/buffile.h"
+#include "storage/fd.h"
+#include "utils/memutils.h"
+#include "utils/snapmgr.h"
+
+
+PG_MODULE_MAGIC;
+
+PG_FUNCTION_INFO_V1(buffile_test);
+
+/* test truncate */
+static void
+buffile_test1(SharedFileSet *fileset)
+{
+ BufFile *fd;
+ int fileno = 0;
+ off_t offset = 0;
+ size_t nread = 0;
+ char readbuf[100];
+
+ fd = BufFileCreateShared(fileset, "test_file");
+ BufFileWrite(fd, "aaaaaaaaaa", 10);
+ BufFileTell(fd, &fileno, &offset);
+ BufFileWrite(fd, "bbbbbbbbbb", 10);
+ BufFileTruncateShared(fd, fileno, offset);
+ BufFileWrite(fd, "ccccc", 5);
+ BufFileSeek(fd, 0, 0, SEEK_SET);
+ nread = BufFileRead(fd, readbuf, 20);
+
+ if (nread != 15)
+ elog(ERROR, "FAILED: unexpected bytes read");
+ else if (strncmp(readbuf, "aaaaaaaaaaccccc", 15) != 0)
+ elog(ERROR, "FAILED: unexpected data read");
+ else
+ elog(WARNING, "PASSED: expected bytes read");
+ BufFileClose(fd);
+
+ BufFileDeleteShared(fileset, "test_file");
+}
+
+#define MAX_PHYSICAL_FILESIZE 0x40000000
+#define BUFFILE_SEG_SIZE (MAX_PHYSICAL_FILESIZE / BLCKSZ)
+
+/* test truncate on multiple files*/
+static void
+buffile_test2(SharedFileSet *fileset)
+{
+ BufFile *fd;
+ int fileno = 0;
+ off_t offset = 0;
+ size_t size = 0;
+ char buf[BLCKSZ] = {'b'};
+ int i;
+
+ fd = BufFileCreateShared(fileset, "test_file");
+ BufFileWrite(fd, "aaaaaaaaaaaaaaaaaaaa", 20);
+ BufFileTell(fd, &fileno, &offset);
+
+ /* create 3 files */
+ for (i = 0; i < 3* BUFFILE_SEG_SIZE; i++)
+ {
+ BufFileWrite(fd, buf, BLCKSZ);
+ }
+
+ /* seek to some location in the first file */
+ BufFileSeek(fd, 0, 10, SEEK_SET);
+
+ /* truncate within the first file and in same buffer */
+ BufFileTruncateShared(fd, fileno, 15);
+ size = BufFileSize(fd);
+ if (size == 15)
+ elog(WARNING, "PASSED: expected file size");
+ else
+ elog(WARNING, "FAILED: unexpected file size");
+
+ BufFileClose(fd);
+
+ BufFileDeleteShared(fileset, "test_file");
+}
+
+Datum
+buffile_test(PG_FUNCTION_ARGS)
+{
+ SharedFileSet *fileset;
+
+ fileset = palloc(sizeof(SharedFileSet));
+ SharedFileSetInit(fileset, NULL);
+
+ buffile_test1(fileset);
+ buffile_test2(fileset);
+
+ SharedFileSetDeleteAll(fileset);
+
+ PG_RETURN_VOID();
+}
diff --git a/contrib/buffile_test/buffile_test.control b/contrib/buffile_test/buffile_test.control
new file mode 100644
index 0000000000..a7c6fa280c
--- /dev/null
+++ b/contrib/buffile_test/buffile_test.control
@@ -0,0 +1,5 @@
+# buffile_test extension
+comment = 'test buffile'
+default_version = '1.0'
+module_pathname = '$libdir/buffile_test'
+relocatable = true
--
2.23.0