I think the exception for nested foreachs is fixed for 2.0.1 which is due soon.
Michael Am 01.02.2014 um 12:40 schrieb Brennan Kinney <[email protected]>: > It was more of a exercise about learning what I can do and how with Cypher. > If you try the query with multiple years you could try 1999, 2000, 2004, they > should all trigger a different CASE. > > The full query is on StackOverflow via the link, this is the query with > corrections: > //Date ranges in a month > WITH > range(1, 28) as Days_28, > range(1, 29) as Days_29, > range(1, 30) as Days_30, > range(1, 31) as Days_31 > > //Assign months date ranges > WITH > Days_31 as January, > Days_28 as February, > Days_29 as Leap_February, > Days_31 as March, > Days_30 as April, > Days_31 as May, > Days_30 as June, > Days_31 as July, > Days_31 as August, > Days_30 as September, > Days_31 as October, > Days_30 as November, > Days_31 as December > > //Mapping months to days keys - num key could be avoided by changing FOREACH > to: 'FOREACH(m IN range(1,length(year.months)) |' or 'FOREACH(m IN range(1, > 12) |' > WITH [ > {num: 1, days: January}, > {num: 2, days: February}, > {num: 3, days: March}, > {num: 4, days: April}, > {num: 5, days: May}, > {num: 6, days: June}, > {num: 7, days: July}, > {num: 8, days: August}, > {num: 9, days: September}, > {num: 10, days: October}, > {num: 11, days: November}, > {num: 12, days: December} > ] as regular_year, Leap_February > > //Create leap year > WITH [regular_year[0], {num: 2, days: Leap_February}] + filter(month in > regular_year WHERE month.num>2) AS leap_year, regular_year > > //Years to create are stored in years collection - anyway to move this to the > top without having to add it to the end of every WITH clause prior? > WITH [2000] as years,leap_year,regular_year > //Check if year is a leap year, if so map to leap_year, if not map > regular_year > WITH [year IN years | CASE WHEN (year%4=0 AND NOT year%100=0) THEN > {year:year, months:leap_year} WHEN (year%4=0 AND year%100=0 AND year%400=0) > THEN {year:year, months:leap_year} ELSE {year:year, months:regular_year} END] > AS yearMap > > //Create nodes/relationships for years/months/days > FOREACH(year IN yearMap | > MERGE (thisYear: Year {year: year.year}) > > FOREACH(m IN year.months | > MERGE (thisMonth :Month { month: m.num, year: year.year }) > CREATE UNIQUE (thisYear)-[:HAS_MONTH]->(thisMonth) > > MERGE (firstDay :Day { day: 1, month: m.num, year: year.year }) > CREATE UNIQUE (thisMonth)-[:FIRST]->(firstDay) > > //This FOREACH line is causing a problem, if replace m.num with an > integer value it works, but then only processes that month > FOREACH (d IN TAIL((year.months[m.num-1]).days) | > MERGE (thisDay: Day { day: d, month: m.num, year: year.year }) > MERGE (lastDay: Day { day: d - 1, month: m.num, year: year.year }) > CREATE UNIQUE(lastDay)-[:NEXT]->(thisDay) > ) > > MERGE (lastDay: Day { day: last((year.months[m.num-1]).days), month: > m.num, year: year.year }) > CREATE UNIQUE (thisMonth)-[:LAST]->(lastDay) > ) > ) > > > > -- > You received this message because you are subscribed to the Google Groups > "Neo4j" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. -- You received this message because you are subscribed to the Google Groups "Neo4j" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
