# let query tests

FEATURE: let-query
background:
  type Flight struct {id int unique, wid int optional }  end
thenType: struct

---
title: let single
given:
  insert Flight {id: 55, wid: 1 }
when:
  let x = Flight[55]
then:
value:a:Flight {
 vid:55
 vwid:1
}
---
title: let multiple
given:
  insert Flight {id: 55, wid: 1 }
  insert Flight {id: 56, wid: 3 }
when:
  let x = Flight
then:
value:a:Flight {
 vid:55
 vwid:1
}
value:a:Flight {
 vid:56
 vwid:3
}

---
title: let multiple, filter can't be []
given:
  insert Flight {id: 55, wid: 1 }
  insert Flight {id: 56, wid: 3 }
when:
  let x = Flight[]
then:
ERROR: parse-error

---
title: let multiple2
given:
  insert Flight {id: 55, wid: 1 }
  insert Flight {id: 56, wid: 3 }
when:
  let x = Flight[true]
then:
value:a:Flight {
 vid:55
 vwid:1
}
value:a:Flight {
 vid:56
 vwid:3
}

---
SKIP: let composite key
given:
  insert Flight {id: 55, wid: 1 }
when:
  let x = Flight[{id:55 other:44}]
then:
value:a:Flight {
 vid:55
 vwid:1
}
value:a:Flight {
 vid:56
 vwid:3
}


---
SKIP: recurive type error -base class same as class. fix this!
given:
  type Flight Flight {} end
  insert Flight {id: 55, wid: 1 }
  insert Flight {id: 56, wid: 3 }
when:
  let x = Flight[55]
then:
value:a:Flight {
 vid:55
 vwid:1
}

---
title: let null filter
given:
  insert Flight {id: 55, wid: 1 }
when:
  let x = Flight[null]
then:
ERROR: null-filter-not-allowed

---
title: let filter expression
given:
  insert Flight {id: 55, wid: 10 }
when:
  let x = Flight[wid > 0]
then:
value:a:Flight {
 vid:55
 vwid:10
}

---
SKIP: implicit fetch
given:
  insert Flight {id: 55, wid: 10 }
when:
  let x = Flight[addr.city = 'city']
then:
value:a:Flight {
 vid:55
 vwid:10
}

#TODO   -let x = Customer[addr.city='toronto']  //implicit fetch
#    -the sql query does a join, but joined Address value not returned unless you say fetch('addr')
#    -op1 op op
#    -AND,OR


---
title: let var
given:
  insert Flight {id: 55, wid: 1 }
  let z = 55
when:
  let x = Flight[z]
then:
value:a:Flight {
 vid:55
 vwid:1
}
