1. 14 Sep, 2002 1 commit
  2. 12 Sep, 2002 1 commit
    • Bruce Momjian's avatar
      > Now I'm testing connectby() in the /contrib/tablefunc in 7.3b1, which would · f490dbe5
      Bruce Momjian authored
      > be a useful function for many users.   However, I found the fact that
      > if connectby_tree has the following data, connectby() tries to search the end
      > of roots without knowing that the relations are infinite(-5-9-10-11-9-10-11-)
      .
      > I hope connectby() supports a check routine to find infinite relations.
      >
      >
      > CREATE TABLE connectby_tree(keyid int, parent_keyid int);
      > INSERT INTO connectby_tree VALUES(1,NULL);
      > INSERT INTO connectby_tree VALUES(2,1);
      > INSERT INTO connectby_tree VALUES(3,1);
      > INSERT INTO connectby_tree VALUES(4,2);
      > INSERT INTO connectby_tree VALUES(5,2);
      > INSERT INTO connectby_tree VALUES(6,4);
      > INSERT INTO connectby_tree VALUES(7,3);
      > INSERT INTO connectby_tree VALUES(8,6);
      > INSERT INTO connectby_tree VALUES(9,5);
      >
      > INSERT INTO connectby_tree VALUES(10,9);
      > INSERT INTO connectby_tree VALUES(11,10);
      > INSERT INTO connectby_tree VALUES(9,11);    <-- infinite
      >
      
      The attached patch fixes the infinite recursion bug in
      contrib/tablefunc/tablefunc.c:connectby found by Masaru Sugawara.
      
      test=# SELECT * FROM connectby('connectby_tree', 'keyid',
      'parent_keyid', '2', 4, '~') AS t(keyid int, parent_keyid int, level
      int, branch text);
        keyid | parent_keyid | level |   branch
      -------+--------------+-------+-------------
            2 |              |     0 | 2
            4 |            2 |     1 | 2~4
            6 |            4 |     2 | 2~4~6
            8 |            6 |     3 | 2~4~6~8
            5 |            2 |     1 | 2~5
            9 |            5 |     2 | 2~5~9
           10 |            9 |     3 | 2~5~9~10
           11 |           10 |     4 | 2~5~9~10~11
      (8 rows)
      
      test=# SELECT * FROM connectby('connectby_tree', 'keyid',
      'parent_keyid', '2', 5, '~') AS t(keyid int, parent_keyid int, level
      int, branch text);
      ERROR:  infinite recursion detected
      
      I implemented it by checking the branch string for repeated keys
      (whether or not the branch is returned). The performance hit was pretty
      minimal -- about 1% for a moderately complex test case (220000 record
      table, 9 level tree with 3800 members).
      
      Joe Conway
      f490dbe5
  3. 05 Sep, 2002 1 commit
  4. 04 Sep, 2002 1 commit
  5. 02 Sep, 2002 2 commits
    • Bruce Momjian's avatar
      Attached is an update to contrib/tablefunc. It introduces a new · 6aa4482f
      Bruce Momjian authored
      function, connectby(), which can serve as a reference implementation for
      
      the changes made in the last few days -- namely the ability of a
      function to return an entire tuplestore, and the ability of a function
      to make use of the query provided "expected" tuple description.
      
      Description:
      
         connectby(text relname, text keyid_fld, text parent_keyid_fld,
           text start_with, int max_depth [, text branch_delim])
         - returns keyid, parent_keyid, level, and an optional branch string
         - requires anonymous composite type syntax in the FROM clause. See
           the instructions in the documentation below.
      
      Joe Conway
      6aa4482f
    • Tom Lane's avatar
      Code review for HeapTupleHeader changes. Add version number to page headers · c7a165ad
      Tom Lane authored
      (overlaying low byte of page size) and add HEAP_HASOID bit to t_infomask,
      per earlier discussion.  Simplify scheme for overlaying fields in tuple
      header (no need for cmax to live in more than one place).  Don't try to
      clear infomask status bits in tqual.c --- not safe to do it there.  Don't
      try to force output table of a SELECT INTO to have OIDs, either.  Get rid
      of unnecessarily complex three-state scheme for TupleDesc.tdhasoids, which
      has already caused one recent failure.  Improve documentation.
      c7a165ad
  6. 29 Aug, 2002 1 commit
  7. 15 Aug, 2002 1 commit
    • Bruce Momjian's avatar
      As discussed on several occasions previously, the new anonymous · 45e25445
      Bruce Momjian authored
      composite type capability makes it possible to create a system view
      based on a table function in a way that is hopefully palatable to
      everyone. The attached patch takes advantage of this, moving
      show_all_settings() from contrib/tablefunc into the backend (renamed
      all_settings(). It is defined as a builtin returning type RECORD. During
      initdb a system view is created to expose the same information presently
      available through SHOW ALL. For example:
      
      test=# select * from pg_settings where name like '%debug%';
                name          | setting
      -----------------------+---------
        debug_assertions      | on
        debug_pretty_print    | off
        debug_print_parse     | off
        debug_print_plan      | off
        debug_print_query     | off
        debug_print_rewritten | off
        wal_debug             | 0
      (7 rows)
      
      
      Additionally during initdb two rules are created which make it possible
      to change settings by updating the system view -- a "virtual table" as
      Tom put it. Here's an example:
      
      Joe Conway
      45e25445
  8. 30 Jul, 2002 1 commit
    • Bruce Momjian's avatar
      As mentioned above, here is my contrib/tablefunc patch. It includes · 41f862ba
      Bruce Momjian authored
      three functions which exercise the tablefunc API.
      
      show_all_settings()
         - returns the same information as SHOW ALL, but as a query result
      
      normal_rand(int numvals, float8 mean, float8 stddev, int seed)
         - returns a set of normally distributed float8 values
         - This routine implements Algorithm P (Polar method for normal
           deviates) from Knuth's _The_Art_of_Computer_Programming_, Volume 2,
           3rd ed., pages 122-126. Knuth cites his source as "The polar
           method", G. E. P. Box, M. E. Muller, and G. Marsaglia,
           _Annals_Math,_Stat._ 29 (1958), 610-611.
      
      crosstabN(text sql)
         - returns a set of row_name plus N category value columns
         - crosstab2(), crosstab3(), and crosstab4() are defined for you,
           but you can create additional crosstab functions per directions
           in the README.
      
      Joe Conway
      41f862ba