Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Data Bases > Pgsql Patches > Re: [HACKERS] W...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 9 of 10 Topic 3870 of 4084
Post > Topic >>

Re: [HACKERS] WITH RECURSIVE updated to CVS TIP

by david@[EMAIL PROTECTED] (David Fetter) Jul 15, 2008 at 06:57 PM

--wRRV7LY7NUeQGEoC
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Wed, Jul 16, 2008 at 09:37:25AM +0900, Tatsuo I****i wrote:
> > On Tue, Jul 08, 2008 at 06:01:05PM +0900, Tatsuo I****i wrote:
> > > Here is the patches he made against CVS HEAD (as of today).
> > > 
> > > According to him followings are fixed with the patches:
> > > 
> > > - fix crush with DISTINCT
> > > - fix creating VIEW
> > > - fix the case when recursion plan has another recursion plan under
it
> > > - fix WITH RECURSIVE ...(..) SELECT ...WHERE.. returns wrong result
> > > - fix inifinit recursion with OUTER JOIN
> > 
> > Great!
> > 
> > I've patched psql for some partial sup****t of WITH [RECURSIVE].
> > 
> >
http://git.postgresql.org/?p=~davidfetter/postgresql/.git;a=commit;h=da63f9a82b9e902b5542f788b2e6e6bc95221793
> 
> Thanks. I will incor****ate them with propsed patches.

Part of the point of this exercise is to make git the way to do this.
Can you please point me to a git repository where your latest changes
are so I can publish them?

> > > Not yet fixed:
> > > 
> > > - detect certain queries those are not valid acroding to the
standard
> > > - sort query names acording to the dependency
> > 
> > Is there something in the standard on how to do this?  How to sort
> > the nodes other ways?
> 
> No idea.  What do you think if we allow only one query name at the
> moment.

I'm not sure I understand what that has to do with sorting.

Please find attached a place where I've found some problems sorting by
tree by array as Asaba-san suggested.

Cheers,
David.
-- 
David Fetter <david@[EMAIL PROTECTED]
> http://fetter.org/
Phone: +1 415 235 3778  AIM: dfetter666  Yahoo!: dfetter
Skype: davidfetter      XMPP: david.fetter@[EMAIL PROTECTED]
 to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate

--wRRV7LY7NUeQGEoC
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: attachment; filename="region_tree.sql"
Content-Transfer-Encoding: 8bit

CREATE TABLE region (
    region_id SERIAL PRIMARY KEY,
    region_name TEXT NOT NULL,
    region_type TEXT NOT NULL,
    parent_region_id INTEGER REFERENCES region(region_id),
    CHECK (
        CASE WHEN region_type = 'Country' THEN 1 ELSE 0 END +
        CASE WHEN parent_region_id IS NULL THEN 0 ELSE 1 END = 1
    )
);

CREATE UNIQUE INDEX country_top_idx
    ON region(region_name) WHERE region_type = 'Country';

CREATE UNIQUE INDEX must_have_parents_idx ON 
    region(region_name, region_type, parent_region_id)
    WHERE parent_region_id IS NOT NULL;

INSERT INTO region (region_name, region_type)
VALUES
    ('Brasil', 'Country'),
    ('United States', 'Country');

INSERT INTO region (parent_region_id, region_name, region_type)
SELECT r.region_id, v.*
FROM
    region r
CROSS JOIN
    (
        VALUES 
        ('Centro-Oeste','Região'),
        ('Nordeste','Região'),
        ('Norte','Região'),
        ('Sudeste','Região'),
        ('Sul','Região')
    ) AS v
WHERE (r.region_name, r.region_type) = ('Brasil','Country');


INSERT INTO region (parent_region_id, region_name, region_type)
SELECT r.region_id, v.*
FROM
    region r
CROSS JOIN
    (
        VALUES
        ('Goiás','Estado'),
        ('Mato Grosso','Estado'),
        ('Mato Grosso do Sul','Estado'),
        ('Distrito Federal','Distrito Federal')
    ) AS v
WHERE (r.region_name, r.region_type) = ('Centro-Oeste','Região');

INSERT INTO region (parent_region_id, region_name, region_type)
SELECT r.region_id, v.*
FROM
    region r
CROSS JOIN
    (
        VALUES
        ('Maranhão','Estado'),
        ('Piauí','Estado'),
        ('Ceará','Estado'),
        ('Rio Grande do Norte','Estado'),
        ('Paraíba','Estado'),
        ('Pernambuco','Estado'),
        ('Alagoas','Estado'),
        ('Sergipe','Estado'),
        ('Bahia','Estado')
    ) AS v
WHERE (r.region_name, r.region_type) = ('Nordeste','Região');

INSERT INTO region (parent_region_id, region_name, region_type)
SELECT r.region_id, v.*
FROM
    region r
CROSS JOIN
    (
        VALUES
        ('Acre','Estado'),
        ('Amazonas','Estado'),
        ('Roraima','Estado'),
        ('Rondônia','Estado'),
        ('Pará','Estado'),
        ('Amapá','Estado'),
        ('Tocantins','Estado')
    ) AS v
WHERE (r.region_name, r.region_type) = ('Norte','Região');

INSERT INTO region (parent_region_id, region_name, region_type)
SELECT r.region_id, v.*
FROM
    region r
CROSS JOIN
    (
        VALUES
        ('Minas Gerais','Estado'),
        ('Espírito Santo','Estado'),
        ('Rio de Janeiro','Estado'),
        ('São Paulo','Estado')
    ) AS v
WHERE (r.region_name, r.region_type) = ('Sudeste','Região');

INSERT INTO region (parent_region_id, region_name, region_type)
SELECT r.region_id, v.*
FROM
    region r
CROSS JOIN
    (
        VALUES
        ('Paraná','Estado'),
        ('Santa Catarina','Estado'),
        ('Rio Grande do Sul','Estado')
    ) AS v
WHERE (r.region_name, r.region_type) = ('Sul','Região');


INSERT INTO region (parent_region_id, region_name, region_type)
SELECT r.region_id, v.*
FROM
    region r
CROSS JOIN
    (
        VALUES
        ('Goiânia','Cidade'),
        ('Aparecida de Goiânia','Cidade'),
        ('Anápolis','Cidade'),
        ('Luziânia','Cidade'),
        ('Águas Lindas de Goiás','Cidade'),
        ('Rio Verde','Cidade'),
        ('Valparaíso de Goiás','Cidade'),
        ('Trindade','Cidade'),
        ('Planaltina','Cidade')
    ) AS v
WHERE (r.region_name, r.region_type) = ('Goiás','Estado');

INSERT INTO region (parent_region_id, region_name, region_type)
SELECT r.region_id, v.*
FROM
    region r
CROSS JOIN
    (
        VALUES
        ('Cuiabá','Cidade'),
        ('Várzea Grande','Cidade'),
        ('Rondonópolis','Cidade'),
        ('Sinop','Cidade'),
        ('Primavera do Leste','Cidade'),
        ('Cáceres','Cidade'),
        ('Tangará da Serra','Cidade')
    ) AS v
WHERE (r.region_name, r.region_type) = ('Mato Grosso','Estado');

INSERT INTO region (parent_region_id, region_name, region_type)
SELECT r.region_id, v.*
FROM
    region r
CROSS JOIN
    (
        VALUES
        ('****to Alegre','Cidade'),
        ('Caxias do Sul','Cidade'),
        ('Pelotas','Cidade'),
        ('Canoas','Cidade'),
        ('Santa Maria','Cidade')
    ) AS v
WHERE (r.region_name, r.region_type) = ('Rio Grande do Sul','Estado');

INSERT INTO region (parent_region_id, region_name, region_type)
SELECT r.region_id, v.*
FROM
    region r
CROSS JOIN
    (
        VALUES
        ('Rio de Janeiro','Cidade'),
        ('São Gonçalo','Cidade'),
        ('Duque de Caxias','Cidade'),
        ('Nova Iguaçu','Cidade'),
        ('Belford Roxo','Cidade'),
        ('Niterói','Cidade'),
        ('São João de Meriti','Cidade'),
        ('Campos dos Goitacases','Cidade'),
        ('Petrópolis','Cidade'),
        ('Volta Redonda','Cidade'),
        ('Magé','Cidade'),
        ('Itaboraí','Cidade'),
        ('Mesquita','Cidade'),
        ('Nova Friburgo','Cidade'),
        ('Barra Mansa','Cidade'),
        ('Macaé','Cidade')
    ) AS v
WHERE (r.region_name, r.region_type) = ('Rio de Janeiro','Estado');

INSERT INTO region (parent_region_id, region_name, region_type)
SELECT r.region_id, v.*
FROM
    region r
CROSS JOIN
    (
        VALUES
        ('São Paulo','Cidade'),
        ('Guarulhos','Cidade'),
        ('Campinas','Cidade'),
        ('São Bernardo do Campo','Cidade'),
        ('Osasco','Cidade'),
        ('Santo André','Cidade'),
        ('São José dos Campos','Cidade'),
        ('Sorocaba','Cidade'),
        ('Ribeirão Preto','Cidade'),
        ('Santos','Cidade')
    ) AS v
WHERE (r.region_name, r.region_type) = ('São Paulo','Estado');


INSERT INTO region (parent_region_id, region_name, region_type)
SELECT r.region_id, v.*
FROM
    region r
CROSS JOIN
    (
        VALUES
        ('Alabama','State'),
        ('Alaska','State'),
        ('Arizona','State'),
        ('Arkansas','State'),
        ('California','State'),
        ('Colorado','State'),
        ('Connecticut','State'),
        ('Delaware','State'),
        ('Florida','State'),
        ('Georgia','State'),
        ('Hawaii','State'),
        ('Idaho','State'),
        ('Illinois','State'),
        ('Indiana','State'),
        ('Iowa','State'),
        ('Kansas','State'),
        ('Kentucky','State'),
        ('Louisiana','State'),
        ('Maine','State'),
        ('Maryland','State'),
        ('Massachusetts','State'),
        ('Michigan','State'),
        ('Minnesota','State'),
        ('Mississippi','State'),
        ('Missouri','State'),
        ('Montana','State'),
        ('Nebraska','State'),
        ('Nevada','State'),
        ('New Hamp****re','State'),
        ('New Jersey','State'),
        ('New Mexico','State'),
        ('New York','State'),
        ('North Carolina','State'),
        ('North Dakota','State'),
        ('Ohio','State'),
        ('Oklahoma','State'),
        ('Oregon','State'),
        ('Pennsylvania','State'),
        ('Rhode Island','State'),
        ('South Carolina','State'),
        ('South Dakota','State'),
        ('Tennessee','State'),
        ('Texas','State'),
        ('Utah','State'),
        ('Vermont','State'),
        ('Virginia','State'),
        ('Wa****ngton','State'),
        ('Wa****ngton','District of Columbia'),
        ('West Virginia','State'),
        ('Wisconsin','State'),
        ('Wyoming','State')
    ) AS v
WHERE (r.region_name, r.region_type) = ('United States','Country');

WITH RECURSIVE t(region_id, region_name, region_type, parent_region_id,
level, path) AS (
SELECT r1.*, 0, '{}'::int[] FROM region r1 WHERE (region_name,
region_type) = ('Brasil', 'Country')
UNION ALL
SELECT r2.*, level+1, path || r2.parent_region_id FROM region r2 JOIN t ON
r2.parent_region_id = t.region_id
)
SELECT
    REPEAT('--', level) || region_name || '(' || region_type || ')' AS
"Onde",
    path
FROM t
ORDER BY path;

/*  Result set:  Note that a bunch of cities appear to be hanging off
"Distrito
    Federal" where there should be none.

                  Onde                  |   path   
----------------------------------------+----------
 Brasil(Country)                        | {}
 --Centro-Oeste(Região)                 | {1}
 --Nordeste(Região)                     | {1}
 --Norte(Região)                        | {1}
 --Sudeste(Região)                      | {1}
 --Sul(Região)                          | {1}
 ----Goiás(Estado)                      | {1,3}
 ----Mato Grosso(Estado)                | {1,3}
 ----Mato Grosso do Sul(Estado)         | {1,3}
 ----Distrito Federal(Distrito Federal) | {1,3}
 ------Planaltina(Cidade)               | {1,3,8}
 ------Trindade(Cidade)                 | {1,3,8}
 ------Valparaíso de Goiás(Cidade)      | {1,3,8}
 ------Rio Verde(Cidade)                | {1,3,8}
 ------Águas Lindas de Goiás(Cidade)    | {1,3,8}
 ------Luziânia(Cidade)                 | {1,3,8}
 ------Anápolis(Cidade)                 | {1,3,8}
 ------Aparecida de Goiânia(Cidade)     | {1,3,8}
 ------Goiânia(Cidade)                  | {1,3,8}
 ------Primavera do Leste(Cidade)       | {1,3,9}
 ------Tangará da Serra(Cidade)         | {1,3,9}
 ------Cáceres(Cidade)                  | {1,3,9}
 ------Cuiabá(Cidade)                   | {1,3,9}
 ------Várzea Grande(Cidade)            | {1,3,9}
 ------Rondonópolis(Cidade)             | {1,3,9}
 ------Sinop(Cidade)                    | {1,3,9}
 ----Alagoas(Estado)                    | {1,4}
 ----Pernambuco(Estado)                 | {1,4}
 ----Rio Grande do Norte(Estado)        | {1,4}
 ----Paraíba(Estado)                    | {1,4}
 ----Ceará(Estado)                      | {1,4}
 ----Piauí(Estado)                      | {1,4}
 ----Maranhão(Estado)                   | {1,4}
 ----Bahia(Estado)                      | {1,4}
 ----Sergipe(Estado)                    | {1,4}
 ----Tocantins(Estado)                  | {1,5}
 ----Acre(Estado)                       | {1,5}
 ----Roraima(Estado)                    | {1,5}
 ----Rondônia(Estado)                   | {1,5}
 ----Pará(Estado)                       | {1,5}
 ----Amapá(Estado)                      | {1,5}
 ----Amazonas(Estado)                   | {1,5}
 ----São Paulo(Estado)                  | {1,6}
 ----Rio de Janeiro(Estado)             | {1,6}
 ----Espírito Santo(Estado)             | {1,6}
 ----Minas Gerais(Estado)               | {1,6}
 ------São Gonçalo(Cidade)              | {1,6,30}
 ------Rio de Janeiro(Cidade)           | {1,6,30}
 ------Duque de Caxias(Cidade)          | {1,6,30}
 ------Nova Iguaçu(Cidade)              | {1,6,30}
 ------Belford Roxo(Cidade)             | {1,6,30}
 ------Niterói(Cidade)                  | {1,6,30}
 ------São João de Meriti(Cidade)       | {1,6,30}
 ------Campos dos Goitacases(Cidade)    | {1,6,30}
 ------Petrópolis(Cidade)               | {1,6,30}
 ------Volta Redonda(Cidade)            | {1,6,30}
 ------Magé(Cidade)                     | {1,6,30}
 ------Itaboraí(Cidade)                 | {1,6,30}
 ------Mesquita(Cidade)                 | {1,6,30}
 ------Nova Friburgo(Cidade)            | {1,6,30}
 ------Barra Mansa(Cidade)              | {1,6,30}
 ------Macaé(Cidade)                    | {1,6,30}
 ------Sorocaba(Cidade)                 | {1,6,31}
 ------Ribeirão Preto(Cidade)           | {1,6,31}
 ------Santos(Cidade)                   | {1,6,31}
 ------Osasco(Cidade)                   | {1,6,31}
 ------Santo André(Cidade)              | {1,6,31}
 ------São José dos Campos(Cidade)      | {1,6,31}
 ------São Paulo(Cidade)                | {1,6,31}
 ------Guarulhos(Cidade)                | {1,6,31}
 ------Campinas(Cidade)                 | {1,6,31}
 ------São Bernardo do Campo(Cidade)    | {1,6,31}
 ----Rio Grande do Sul(Estado)          | {1,7}
 ----Santa Catarina(Estado)             | {1,7}
 ----Paraná(Estado)                     | {1,7}
 ------Caxias do Sul(Cidade)            | {1,7,34}
 ------Canoas(Cidade)                   | {1,7,34}
 ------Santa Maria(Cidade)              | {1,7,34}
 ------****to Alegre(Cidade)             | {1,7,34}
 ------Pelotas(Cidade)                  | {1,7,34}
(80 rows)

*/

--wRRV7LY7NUeQGEoC
Content-Type: text/plain
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0


-- 
Sent via pgsql-patches mailing list (pgsql-patches@[EMAIL PROTECTED]
)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-patches

--wRRV7LY7NUeQGEoC--
 




 10 Posts in Topic:
Re: [HACKERS] WITH RECURSIVE updated to CVS TIP
y-asaba@[EMAIL PROTECTED]  2008-07-07 16:22:21 
Re: [HACKERS] WITH RECURSIVE updated to CVS TIP
david@[EMAIL PROTECTED]   2008-07-07 07:33:42 
Re: [HACKERS] WITH RECURSIVE updated to CVS TIP
david@[EMAIL PROTECTED]   2008-07-08 17:38:00 
Re: [HACKERS] WITH RECURSIVE updated to CVS TIP
alvherre@[EMAIL PROTECTED  2008-07-08 21:28:34 
Re: [HACKERS] WITH RECURSIVE updated to CVS TIP
david@[EMAIL PROTECTED]   2008-07-09 11:45:24 
Re: [HACKERS] WITH RECURSIVE updated to CVS TIP
aidan@[EMAIL PROTECTED]   2008-07-09 16:43:27 
Re: [HACKERS] WITH RECURSIVE updated to CVS TIP
david@[EMAIL PROTECTED]   2008-07-09 17:06:19 
Re: [HACKERS] WITH RECURSIVE updated to CVS TIP
ishii@[EMAIL PROTECTED]   2008-07-16 09:37:25 
Re: [HACKERS] WITH RECURSIVE updated to CVS TIP
david@[EMAIL PROTECTED]   2008-07-15 18:57:38 
Re: [HACKERS] WITH RECURSIVE updated to CVS TIP
ishii@[EMAIL PROTECTED]   2008-07-17 17:56:50 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Sat Oct 11 20:16:49 CDT 2008.