drop dataverse test if exists;

create dataverse test;

use dataverse custord;

create type AddressType as open {
  number: int32, 
  street: string,
  city: string
}

create type CustomerType as open {
  cid: int32, 
  name: string,
  age: int32?,
  address: AddressType?,
  lastorder: {
    oid: int32,
    total: float
  }
}


create type OrderType as open {
  oid: int32,
  cid: int32,
  orderstatus: string,
  orderpriority: string,
  clerk: string,
  total: float
}

create type CustomerOrdersType as open {
  cid: int32,
  cust: CustomerType,
  orders: [OrderType]
}

create nodegroup group1 if not exists on nc1, nc2;

create dataset Customers3(CustomerType) 
  partitioned by key cid on group1;
create dataset Orders3(OrderType)
  partitioned by key oid on group1;
create dataset CustomerOrders3(CustomerOrdersType)
  partitioned by key cid on group1;


write output to nc1:"rttest/custord_co.adm";

/*
for $co1 in dataset('CustomerOrders3')
for $o1 in $co1.orders
return {
  "order": $o1, 
  "ordcust": 
    for $co2 in dataset('CustomerOrders3')
    where some $o2 in $co2.orders 
      satisfies $o2.oid = $o1.oid
    return $co2.cust 
}
*/

for $co1 in dataset('CustomerOrders3')
where some $o1 in $co1.orders
satisfies $o1.oid = 10
return $co1
