• Tom Lane's avatar
    Revise plpgsql's scanner to process comments and string literals in a way · 3a624e92
    Tom Lane authored
    more nearly matching the core SQL scanner.  The user-visible effects are:
    
    * Block comments (slash-star comments) now nest, as per SQL spec.
    
    * In standard_conforming_strings mode, backslash as the last character of a
      non-E string literal is now correctly taken as an ordinary character;
      formerly it was misinterpreted as escaping the ending quote.  (Since the
      string also had to pass through the core scanner, this invariably led
      to syntax errors.)
    
    * Formerly, backslashes in the format string of RAISE were always treated as
      quoting the next character, regardless of mode.  Now, they are ordinary
      characters with standard_conforming_strings on, while with it off, they
      introduce the same set of escapes as in the core SQL scanner.  Also,
      escape_string_warning is now effective for RAISE format strings.  These
      changes make RAISE format strings work just like any other string literal.
    
    This is implemented by copying and pasting a lot of logic from the core
    scanner.  It would be a good idea to look into getting rid of plpgsql's
    scanner entirely in favor of using the core scanner.  However, that involves
    more change than I can justify making during beta --- in particular, the core
    scanner would have to become re-entrant.
    
    In passing, remove the kluge that made the plpgsql scanner emit T_FUNCTION or
    T_TRIGGER as a made-up first token.  That presumably had some value once upon
    a time, but now it's just useless complication for both the scanner and the
    grammar.
    3a624e92
gram.y 72.3 KB