package com.meidusa.amoeba.mysql.context;
import java.io.StringReader;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import com.meidusa.amoeba.context.RuntimeContext;
import com.meidusa.amoeba.exception.InitialisationException;
import com.meidusa.amoeba.mysql.parser.sql.MysqlParser;
import com.meidusa.amoeba.mysql.util.CharsetMapping;
import com.meidusa.amoeba.parser.ParseException;
import com.meidusa.amoeba.parser.Parser;
public class MysqlRuntimeContext extends RuntimeContext {
public final static String SERVER_VERSION = "5.1.45-mysql-amoeba-plus-proxy-1.0-RC1";
private static Logger logger = Logger.getLogger(MysqlRuntimeContext.class);
private byte serverCharsetIndex;
private int statementCacheSize = 500;
private long statementExpiredTime = 5;
public void setServerCharsetIndex(byte serverCharsetIndex) {
this.serverCharsetIndex = serverCharsetIndex;
this.setServerCharset(CharsetMapping.INDEX_TO_CHARSET[serverCharsetIndex & 0xff]);
}
public int getServerCharsetIndex() {
if (serverCharsetIndex > 0) return serverCharsetIndex;
return CharsetMapping.getCharsetIndex(this.getServerCharset());
}
public int getStatementCacheSize() {
return statementCacheSize;
}
public void setStatementCacheSize(int statementCacheSize) {
if(statementCacheSize <0){
statementCacheSize = 50;
}
this.statementCacheSize = statementCacheSize;
}
public long getStatementExpiredTime() {
return statementExpiredTime;
}
public void setStatementExpiredTime(long statementExpiredTime) {
this.statementExpiredTime = statementExpiredTime;
}
public void init() throws InitialisationException{
super.init();
// 这里是为了给javacc预热
Parser warmingUP = new MysqlParser(new StringReader(new String("Select 1")));
try {
warmingUP.doParse();
} catch (ParseException e) {
e.printStackTrace();
}
Level level = logger.getLevel();
logger.setLevel(Level.INFO);
if (logger.isInfoEnabled()) {
logger.info("Amoeba for Mysql current versoin="+SERVER_VERSION);
}
logger.setLevel(level);
}
}