David Fetter wrote: > It also seems like a violation of separation of concerns to couple > FEBE to grammar, so there'd need to be some way to do those things > separately, too.
After re-reading psql/copy.c, I withdraw what I said upthread: it doesn't appear necessary to add anything to support the WHEN condition with \copy. \copy does have a dedicated mini-parser, but it doesn't try to recognize every option: it's only concerned with getting the bits of information that are needed to perform the client-side work: - whether it's a copy from or to - what exact form and value has the 'filename' argument immediately after from or to: '<file path>' | PROGRAM '<command>' | stdin | stdout | pstdout | pstdout It doesn't really care what the options are, just where they are in the buffer, so they can be copied into the COPY SQL statement. From the code: * The documented syntax is: * \copy tablename [(columnlist)] from|to filename [options] * \copy ( query stmt ) to filename [options] The WHEN clause would be part of the [options], which are handled as simply as this in parse_slash_copy(): /* Collect the rest of the line (COPY options) */ token = strtokx(NULL, "", NULL, NULL, 0, false, false, pset.encoding); if (token) result->after_tofrom = pg_strdup(token); So unless there's something particular in the WHEN clause expression that could make this strtokx() invocation error out, this should work directly. Best regards, -- Daniel Vérité PostgreSQL-powered mailer: http://www.manitou-mail.org Twitter: @DanielVerite