ExecMapper.done is a static variable, and may cause issues in the following example:
The second select won't return any result, if running in local mode.
The issue is, the first select query will be converted to a MapRedTask with only a mapper. And, when the task is done, because of the limit operator, ExecMapper.done will be set to true.
Then, when the second select query begin to execute, it will call FetchOperator::getRecordReader(), and since here we have virtual column, an instance of HiveRecordReader will be returned. The problem is, HiveRecordReader::doNext() will check ExecMapper.done. In this case, since the value is true, it will quit immediately.
In short, I think making ExecMapper.done static is a bad idea. The first query should in no way affect the second one.