chunksize.diff.txt

text/plain

Filename: chunksize.diff.txt
Type: text/plain
Part: 0
Message: Re: WIP Incremental JSON Parser
diff --git a/src/test/modules/test_json_parser/t/001_test_json_parser_incremental.pl b/src/test/modules/test_json_parser/t/001_test_json_parser_incremental.pl
index 8eeb7f5b91..08c280037f 100644
--- a/src/test/modules/test_json_parser/t/001_test_json_parser_incremental.pl
+++ b/src/test/modules/test_json_parser/t/001_test_json_parser_incremental.pl
@@ -10,11 +10,13 @@ my $test_file = "$FindBin::RealBin/../tiny.json";
 
 my $exe = "test_json_parser_incremental";
 
-my ($stdout, $stderr) = run_command( [$exe, $test_file] );
-
-ok($stdout =~ /SUCCESS/, "test succeeds");
-ok(!$stderr, "no error output");
+for (my $size = 64; $size > 0; $size--)
+{
+	my ($stdout, $stderr) = run_command( [$exe, "-c", $size, $test_file] );
 
+	ok($stdout =~ /SUCCESS/, "chunk size $size: test succeeds");
+	ok(!$stderr, "chunk size $size: no error output");
+}
 
 done_testing();
 
diff --git a/src/test/modules/test_json_parser/test_json_parser_incremental.c b/src/test/modules/test_json_parser/test_json_parser_incremental.c
index dee5c6f7d1..a94cc8adb8 100644
--- a/src/test/modules/test_json_parser/test_json_parser_incremental.c
+++ b/src/test/modules/test_json_parser/test_json_parser_incremental.c
@@ -12,6 +12,7 @@
  * the parser in very small chunks. In practice you would normally use
  * much larger chunks, but doing this makes it more likely that the
  * full range of incement handling, especially in the lexer, is exercised.
+ * If the "-c SIZE" option is provided, that chunk size is used instead.
  *
  * The argument specifies the file containing the JSON input.
  *
@@ -34,12 +35,19 @@ main(int argc, char **argv)
 	JsonLexContext lex;
 	StringInfoData json;
 	int			n_read;
+	size_t		chunk_size = 60;
+
+	if (strcmp(argv[1], "-c") == 0)
+	{
+		sscanf(argv[2], "%zu", &chunk_size);
+		argv += 2;
+	}
 
 	makeJsonLexContextIncremental(&lex, PG_UTF8, false);
 	initStringInfo(&json);
 
 	json_file = fopen(argv[1], "r");
-	while ((n_read = fread(buff, 1, 60, json_file)) > 0)
+	while ((n_read = fread(buff, 1, chunk_size, json_file)) > 0)
 	{
 		appendBinaryStringInfo(&json, buff, n_read);
 		appendStringInfoString(&json, "1+23 trailing junk");