Re: making the backend's json parser work in frontend code - Mailing list pgsql-hackers
From | Robert Haas |
---|---|
Subject | Re: making the backend's json parser work in frontend code |
Date | |
Msg-id | CA+Tgmoa8m=w7f=EZAaJxmuQ_KX+QvjZx3GqWzZMpnkzcaRhekg@mail.gmail.com Whole thread Raw |
In response to | Re: making the backend's json parser work in frontend code (Mark Dilger <mark.dilger@enterprisedb.com>) |
Responses |
Re: making the backend's json parser work in frontend code
|
List | pgsql-hackers |
On Mon, Jan 27, 2020 at 3:05 PM Mark Dilger <mark.dilger@enterprisedb.com> wrote: > Since you’ve committed your 0004 and 0005 patches, this v6 patch set is now based on a fresh copy of master. I think the first question for 0005 is whether want this at all. Initially, you proposed NOT committing it, but then Andrew reviewed it as if it were for commit. I'm not sure whether he was actually saying that it ought to be committed, though, or whether he just missed your remarks on the topic. Nobody else has really taken a position. I'm not 100% convinced that it's necessary to include this, but I'm also not particularly opposed to it. It's a fairly small amount of code, which is nice, and perhaps useful as a demonstration of how to use the JSON parser in a frontend application, which someone also might find nice. Anyone else want to express an opinion? Meanwhile, here is a round of nitp^H^H^H^Hreview: -# installcheck and install should not recurse into the subdirectory "modules". +# installcheck and install should not recurse into the subdirectory "modules" +# nor "bin". I would probably have just changed this to: # installcheck and install should not recurse into "modules" or "bin" The details are arguable, but you definitely shouldn't say "the subdirectory" and then list two of them. +This directory contains a set of programs that exercise functionality declared +in src/include/common and defined in src/common. The purpose of these programs +is to verify that code intended to work both from frontend and backend code do +indeed work when compiled and used in frontend code. The structure of this +directory makes no attempt to test that such code works in the backend, as the +backend has its own tests already, and presumably those tests sufficiently +exercide the code as used by it. "exercide" is not spelled correctly, but I also disagree with giving the directory so narrow a charter. I think you should just say something like: This directory contains programs that are built and executed for testing purposes, but never installed. It may be used, for example, to test that code in src/common works in frontend environments. +# There doesn't seem to be any easy way to get TestLib to use the binaries from +# our directory, so we hack up a path to our binary and run that directly. This +# seems brittle enough that some other solution should be found, if possible. + +my $test_json = join('/', $ENV{TESTDIR}, 'test_json'); I don't know what the right thing to do here is. Perhaps someone more familiar with TAP testing can comment. + set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_test_json")); Do we need this? I guess we're not likely to bother with translations for a test program. + /* + * Make stdout unbuffered to match stderr; and ensure stderr is unbuffered + * too, which it should already be everywhere except sometimes in Windows. + */ + setbuf(stdout, NULL); + setbuf(stderr, NULL); Do we need this? If so, why? + char *json; + unsigned int json_len; + JsonLexContext *lex; + int client_encoding; + JsonParseErrorType parse_result; + + json_len = (unsigned int) strlen(str); + client_encoding = PQenv2encoding(); + + json = strdup(str); + lex = makeJsonLexContextCstringLen(json, strlen(json), client_encoding, true /* need_escapes */); + parse_result = pg_parse_json(lex, &nullSemAction); + fprintf(stdout, _("%s\n"), (JSON_SUCCESS == parse_result ? "VALID" : "INVALID")); + return; json_len is set but not used. Not entirely sure why we are using PQenv2encoding() here. The trailing return is unnecessary. I think it would be a good idea to use json_errdetail() in the failure case, print the error, and have the tests check that we got the expected error. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
pgsql-hackers by date: