// Path: spring-influxdb-orm/src/main/java/com/vgerbot/orm/influxdb/InfluxDBException.java
// public class InfluxDBException extends RuntimeException {
// 
// 	private static final long serialVersionUID = -4410268653794610252L;
// 
// 	public InfluxDBException() {
// 		super();
// 	}
// 
// 	public InfluxDBException(String message, Throwable cause) {
// 		super(message, cause);
// 	}
// 
// 	public InfluxDBException(String message) {
// 		super(message);
// 	}
// 
// 	public InfluxDBException(Throwable cause) {
// 		super(cause);
// 	}
// }
// 
// Path: spring-influxdb-orm/src/main/java/com/vgerbot/orm/influxdb/utils/StringUtils.java
// public class StringUtils extends org.apache.commons.lang3.StringUtils {
// 
// 	/**
// 	 * 正则匹配替换，类似js中的replace
// 	 * 
// 	 * @param source
// 	 * @param regex
// 	 * @param func
// 	 * @return
// 	 */
// 	public static final String replace(String source, String regex, ReplaceCallback func) {
// 		return replace(source, regex, 0, func);
// 	}
// 
// 	public static final String replace(String source, String regex, int group, ReplaceCallback func) {
// 		Pattern pattern = Pattern.compile(regex);
// 		Matcher m = pattern.matcher(source);
// 		if (m.find()) {
// 			StringBuffer sb = new StringBuffer();
// 			int i = 0;
// 			do {
// 				String grp = m.group(group);
// 				int index = source.indexOf(grp, i);
// 				m.appendReplacement(sb, func.replace(grp, index, source));
// 				i = index + 1;
// 			} while (m.find());
// 			m.appendTail(sb);
// 			return sb.toString();
// 		}
// 		return source;
// 	}
// 
// 	/**
// 	 * 替换回调函数接口
// 	 * 
// 	 * @author y1j2x34
// 	 * @date 2014-7-24
// 	 */
// 	public static interface ReplaceCallback {
// 		String replace(String word, int index, String source);
// 	}
// 
// }


import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.influxdb.dto.QueryResult;
import org.influxdb.dto.QueryResult.Result;
import org.influxdb.dto.QueryResult.Series;
import com.vgerbot.orm.influxdb.InfluxDBException;
import com.vgerbot.orm.influxdb.utils.StringUtils;
package com.vgerbot.orm.influxdb.result;




public class NativeResultContext implements ResultContext {

	private static final Map<String, List<Map<String, Object>>> EMPTY_SERIES_MAP = Collections.unmodifiableMap(new HashMap<>());
	private static final Set<String> EMPTY_SET = Collections.emptySet();

	private String errorMessage;
	private boolean hasResult;
	private Set<String> measurementNames;
	private Map<String, List<Map<String, Object>>> seriesMap;

	public NativeResultContext(QueryResult queryResult) {
		this.errorMessage = queryResult.getError();
		List<Result> results = queryResult.getResults();
		if (isNotEmpty(results)) {
			if (results.size() > 1) {
				throw new InfluxDBException("Multiple results is not suppported!");
			}

			Result result = results.get(0);
// Path: spring-influxdb-orm/src/main/java/com/vgerbot/orm/influxdb/InfluxDBException.java
// public class InfluxDBException extends RuntimeException {
// 
// 	private static final long serialVersionUID = -4410268653794610252L;
// 
// 	public InfluxDBException() {
// 		super();
// 	}
// 
// 	public InfluxDBException(String message, Throwable cause) {
// 		super(message, cause);
// 	}
// 
// 	public InfluxDBException(String message) {
// 		super(message);
// 	}
// 
// 	public InfluxDBException(Throwable cause) {
// 		super(cause);
// 	}
// }
// 
// Path: spring-influxdb-orm/src/main/java/com/vgerbot/orm/influxdb/utils/StringUtils.java
// public class StringUtils extends org.apache.commons.lang3.StringUtils {
// 
// 	/**
// 	 * 正则匹配替换，类似js中的replace
// 	 * 
// 	 * @param source
// 	 * @param regex
// 	 * @param func
// 	 * @return
// 	 */
// 	public static final String replace(String source, String regex, ReplaceCallback func) {
// 		return replace(source, regex, 0, func);
// 	}
// 
// 	public static final String replace(String source, String regex, int group, ReplaceCallback func) {
// 		Pattern pattern = Pattern.compile(regex);
// 		Matcher m = pattern.matcher(source);
// 		if (m.find()) {
// 			StringBuffer sb = new StringBuffer();
// 			int i = 0;
// 			do {
// 				String grp = m.group(group);
// 				int index = source.indexOf(grp, i);
// 				m.appendReplacement(sb, func.replace(grp, index, source));
// 				i = index + 1;
// 			} while (m.find());
// 			m.appendTail(sb);
// 			return sb.toString();
// 		}
// 		return source;
// 	}
// 
// 	/**
// 	 * 替换回调函数接口
// 	 * 
// 	 * @author y1j2x34
// 	 * @date 2014-7-24
// 	 */
// 	public static interface ReplaceCallback {
// 		String replace(String word, int index, String source);
// 	}
// 
// }


// Path: spring-influxdb-orm/src/main/java/com/vgerbot/orm/influxdb/result/NativeResultContext.java
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.influxdb.dto.QueryResult;
import org.influxdb.dto.QueryResult.Result;
import org.influxdb.dto.QueryResult.Series;
import com.vgerbot.orm.influxdb.InfluxDBException;
import com.vgerbot.orm.influxdb.utils.StringUtils;

package com.vgerbot.orm.influxdb.result;




public class NativeResultContext implements ResultContext {

	private static final Map<String, List<Map<String, Object>>> EMPTY_SERIES_MAP = Collections.unmodifiableMap(new HashMap<>());
	private static final Set<String> EMPTY_SET = Collections.emptySet();

	private String errorMessage;
	private boolean hasResult;
	private Set<String> measurementNames;
	private Map<String, List<Map<String, Object>>> seriesMap;

	public NativeResultContext(QueryResult queryResult) {
		this.errorMessage = queryResult.getError();
		List<Result> results = queryResult.getResults();
		if (isNotEmpty(results)) {
			if (results.size() > 1) {
				throw new InfluxDBException("Multiple results is not suppported!");
			}

			Result result = results.get(0);
			if (StringUtils.isNotBlank(result.getError())) {