@Override public StorageResults fetch(Expression userQuery) { Expression expression = userQuery.normalize(); Matcher matcher = expression.accept(new MatcherCreator()); List<DataRecord> matchRecords = new LinkedList<DataRecord>(); for (DataRecord dataRecord : storage) { if (matcher.match(dataRecord)) { matchRecords.add(dataRecord); } } List<DataRecord> filteredRecords = expression.accept(new Filter(matchRecords)); return new InMemoryStorageResults(filteredRecords); }