DDJ: One place where I did feel like the abstraction leaked a little was around delayed query execution. The reason why I say that is because it feels like the Select statement line of code is where the query is going to execute, and then later you'll iterate over the results. But actually, the query doesn't execute until you start iterating. An error in your query might not show up until some distance farther in your code where the query actually executes. Can you talk a little about delayed query execution, and why it's important?
AS: There are a couple of reasons. We want people to write the query in the way that makes sense to them, and then they enumerate the results when they want to work with the results. What you don't want is for people to create monolithic queries, giant blobs of queries, that all execute at one time. You want them to able to write multiple queries throughout their code, and when they iterate the results, the queries combine and are remoted to a database or executed in memory. Also, when we're remoting the query to SQL, this lets us generate a single SQL query instead of executing multiple queries, one for each sub-query.
DDJ: So in a nutshell, you're saying that that deferred execution is an optimization. You're less likely to pull in data that you're not actually going to use, etc. What are your thoughts on helping with the debugging experience?
AS: This is something that we've been working on a lot. We've been doing a lot of planning about the implementation of this for the Orcas product. We have to figure out what the debugging experience is going to be like. One possible problem that you might troubleshoot is if the shape of the results isn't what you expect. In other words, it constructs a set of objects and those objects don't have the members that you expect them to have. Another debugging scenario is where the collection that results from the query isn't what you expected because maybe a filter was incorrect. And the last category of errors would be those interacting with the SQL database.
We've sat down and walked through how we could best provide tool support to help you troubleshoot. Hopefully the community will be seeing documents that reflect our plans pretty soon, but essentially we're going to be adding visualizers and debugging facilities to let you try out subqueries to see what the results are.
It's definitely something that we're going to be looking for feedback on.