MysqlDataSetCache.java 2.87 KB
/*
 * Copyright (c) 2013, OpenCloudDB/MyCAT and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software;Designed and Developed mainly by many Chinese 
 * opensource volunteers. you can redistribute it and/or modify it under the 
 * terms of the GNU General Public License version 2 only, as published by the
 * Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 * 
 * Any questions about this component can be directed to it's project Web address 
 * https://code.google.com/p/opencloudb/.
 *
 */
package io.mycat.cache;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;

/**
 * cache mysql dataset ,for example "select * from A where .......",cache all
 * result
 * 
 * @author wuzhih
 * 
 */
public class MysqlDataSetCache implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 5426632041410472392L;
	// sql should not inlude page limit ,should store first record and sequnce
	// next
	private String sql;
	private int total;
	private String dataFile;
	private long createTime;
	private volatile int curCount;
	private volatile long lastAccesTime;
	private volatile boolean storing = true;

	public String getSql() {
		return sql;
	}

	public boolean isStoring() {
		return storing;
	}

	public void setStoring(boolean storing) {
		this.storing = storing;
	}

	public void setSql(String sql) {
		this.sql = sql;
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}

	public String getDataFile() {
		return dataFile;
	}

	public void setDataFile(String dataFile) {
		this.dataFile = dataFile;
	}

	public long getCreateTime() {
		return createTime;
	}

	public void setCreateTime(long createTime) {
		this.createTime = createTime;
	}

	public long getLastAccesTime() {
		return lastAccesTime;
	}

	public void setLastAccesTime(long lastAccesTime) {
		this.lastAccesTime = lastAccesTime;
	}

	public void addHeader(byte[] header) throws IOException  {
		writeFile(header);
	}

	private void writeFile(byte[] data) throws IOException {
		FileOutputStream outf = null;
		try {
			outf = new FileOutputStream(dataFile, true);
			outf.write(data);

		} finally {
			if (outf != null) {
				outf.close();
			}
		}
	}

	public void appendRecord(byte[] row) throws IOException {
		writeFile(row);
		curCount++;
	}
}