use dataverse events;

declare type EventType as closed {
  event_id: int64, 
  name: string,
  location: AddressType	?,
  organizers: {{ 
   {
     name: string
   }
  }},
  sponsoring_sigs: [
    {
      sig_id: int32,
      chapter_name: string
    }
  ],
  interest_keywords: {{string}},
  price: double?,
  start_time: datetime,
  end_time: datetime
}

declare type AddressType as closed {
  street: string,
  city: string,
  zip: string,
  latlong: point
}

declare nodegroup group1 on nc1;

/*
declare dataset Event(EventType) 
  splits nc1:"/home/nicnic/Work/Asterix/adg/event.adm";
*/

drop dataset Event;
declare dataset Event(EventType) 
  primary key event_id on group1;

load dataset Event 
using "org.apache.asterix.external.dataset.adapter.NCFileSystemAdapter"
(("path"="nc1:///home/nicnic/Work/Asterix/adg/event.adm"),("format"="adm"));

write output to nc1:"/tmp/dapd_q2.adm";

for $event in dataset('Event')
for $sponsor in $event.sponsoring_sigs
let $es := { "event": $event, "sponsor": $sponsor }
group by $sig_id := $sponsor.sig_id with $es
let $sig_sponsorship_count := count($es)
let $by_chapter :=
   for $e in $es
   group by $chapter_name := $e.sponsor.chapter_name with $e
   return { "chapter_name": $chapter_name, "escount" : count($e) }
order by $sig_sponsorship_count desc
limit 5
return { "sig_id": $sig_id, "total_count": $sig_sponsorship_count, "chapter_breakdown": $by_chapter }

