1. 25 Feb, 2005 2 commits
  2. 24 Feb, 2005 5 commits
  3. 23 Feb, 2005 4 commits
    • Neil Conway's avatar
      Minor code cleanup: remove a variable that was assigned to but never · 406a9428
      Neil Conway authored
      subsequently referenced.
      
      Found by: Coverity
      Fixed by: Sean Chittenden
      406a9428
    • Neil Conway's avatar
      This patch optimizes the md5_text() function (which is used to · 3350b374
      Neil Conway authored
      implement the md5() SQL-level function). The old code did the
      following:
      
      1. de-toast the datum
      2. convert it to a cstring via textout()
      3. get the length of the cstring via strlen()
      
      Since we are treating the datum context as a blob of binary data,
      the latter two steps are unnecessary. Once the data has been
      detoasted, we can just use it as-is, and derive its length from
      the varlena metadata.
      
      This patch improves some run-of-the-mill md5() computations by
      just under 10% in my limited tests, and passes the regression tests.
      
      I also noticed that md5_text() wasn't checking the return value
      of md5_hash(); encountering OOM at precisely the right moment
      could result in returning a random md5 hash. This patch corrects
      that. A better fix would be to make md5_hash() only return on
      success (and/or allocate via palloc()), but since it's used in
      the frontend as well I don't see an easy way to do that.
      3350b374
    • Tom Lane's avatar
      Un-break plpgsql build by removing unwanted _() usage. · b9a87e52
      Tom Lane authored
      This would be a completely inappropriate place to apply localization
      anyway.
      b9a87e52
    • Bruce Momjian's avatar
      Properly undef _(x) gettext macro. · e3267b65
      Bruce Momjian authored
      e3267b65
  4. 22 Feb, 2005 7 commits
    • Tom Lane's avatar
    • Neil Conway's avatar
      This patch changes makes some significant changes to how compilation · 5a9dd0dc
      Neil Conway authored
      and parsing work in PL/PgSQL:
      
      - memory management is now done via palloc(). The compiled representation
        of each function now has its own memory context. Therefore, the storage
        consumed by a function can be reclaimed via MemoryContextDelete().
      
        During compilation, the CurrentMemoryContext is the function's memory
        context. This means that a palloc() is sufficient to allocate memory
        that will have the same lifetime as the function itself. As a result,
        code invoked during compilation should be careful to pfree() temporary
        allocations to avoid leaking memory. Since a lot of the code in the
        backend is not careful about releasing palloc'ed memory, that means
        we should switch into a temporary memory context before invoking
        backend functions. A temporary context appropriate for such allocations
        is `compile_tmp_cxt'.
      
      - The ability to use palloc() allows us to simply a lot of the code in
        the parser. Rather than representing lists of elements via ad hoc
        linked lists or arrays, we can use the List type. Rather than doing
        malloc followed by memset(0), we can just use palloc0().
      
      - We now check that the user has supplied the right number of parameters
        to a RAISE statement. Supplying either too few or too many results in
        an error (at runtime).
      
      - PL/PgSQL's parser needs to accept arbitrary SQL statements. Since we
        do not want to duplicate the SQL grammar in the PL/PgSQL grammar, this
        means we need to be quite lax in what the PL/PgSQL grammar considers
        a "SQL statement". This can lead to misleading behavior if there is a
        syntax error in the function definition, since we assume a malformed
        PL/PgSQL construct is a SQL statement. Furthermore, these errors were
        only detected at runtime (when we tried to execute the alleged "SQL
        statement" via SPI).
      
        To rectify this, the patch changes the parser to invoke the main SQL
        parser when it sees a string it believes to be a SQL expression. This
        means that synctically-invalid SQL will be rejected during the
        compilation of the PL/PgSQL function. This is only done when compiling
        for "validation" purposes (i.e. at CREATE FUNCTION time), so it should
        not impose a runtime overhead.
      
      - Fixes for the various buffer overruns I've patched in stable branches
        in the past few weeks. I've rewritten code where I thought it was
        warranted (unlike the patches applied to older branches, which were
        minimally invasive).
      
      - Various other minor changes and cleanups.
      
      - Updates to the regression tests.
      5a9dd0dc
    • Bruce Momjian's avatar
      Add semicolon so snprintf.c goto has a statement to attach to: · e3ebe252
      Bruce Momjian authored
      nochar:
          /* nothing */
          ; /* semicolon required because a goto has to be attached to a statement */
      e3ebe252
    • Bruce Momjian's avatar
      Use _() macro consistently rather than gettext(). Add translation · 0542b1e2
      Bruce Momjian authored
      macros around strings that were missing them.
      0542b1e2
    • Bruce Momjian's avatar
      Add: · 64011b4d
      Bruce Momjian authored
      > 	* Add internationalized message strings
      64011b4d
    • Bruce Momjian's avatar
      Add support to port/snprintf.c for position parameter specification: · b4feafb6
      Bruce Momjian authored
      + # Determine if printf supports %1$ argument selection, e.g. %5$ selects
      + # the fifth argument after the printf print string.
      + # This is not in the C99 standard, but in the Single Unix Specification (SUS).
      + # It is used in our langauge translation strings.
      
      Nicolai Tufar with configure changes by Bruce.
      b4feafb6
    • Bruce Momjian's avatar
  5. 21 Feb, 2005 11 commits
  6. 20 Feb, 2005 8 commits
  7. 19 Feb, 2005 3 commits