On Mon, Mar 21, 2022 at 9:32 PM Mark Dilger <mark.dil...@enterprisedb.com> wrote: > [ new patch version ]
This patch adds three new arguments to processSQLNamePattern() and documents one of them. It adds three new parameters to patternToSQLRegex() as well, and documents none of them. I think that the text of the comment might need some updating too, in particular the sentence "Additional dots in the name portion are not treated as special." There are no comments explaining the left_is_literal stuff. It appears that your intention here is that if the pattern string supplied by the user contains any of *?|+()[]{}.^\ not surrounded by double-quotes, we signal the caller. Some callers then use this to issue a complaint that the database name must be a literal. To me, this behavior doesn't really make sense. If something is a literal, that means we're not going to interpret the special characters that it contains. Here, we are interpreting the special characters just so we can complain that they exist. It seems to me that a simpler solution would be to not interpret them at all. I attach a patch showing what I mean by that. It just rips out the dbname_is_literal stuff in favor of doing nothing at all. To put the whole thing another way, if the user types "\d }.public.ft", your code wants to complain about the fact that the user is trying to use regular expression characters in a place where they are not allowed to do that. I argue that we should instead just be comparing "}" against the database name and see whether it happens to match. -- Robert Haas EDB: http://www.enterprisedb.com
0002-Remove-dbname_is_literal-stuff.patch
Description: Binary data
0001-Reject-patterns-with-too-many-parts-or-wrong-db.patch
Description: Binary data