/*
* This program is free software; you can redistribute it and/or modify it under the terms of
* the GNU General Public License as published by the Free Software Foundation; either version 3 of the License,
* or (at your option) any later version.
*
* This program 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 for more details.
* You should have received a copy of the GNU General Public License along with this program;
* if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package com.meidusa.amoeba.mysql.parser;
import java.io.StringReader;
import java.util.regex.Pattern;
import com.meidusa.amoeba.mysql.net.MysqlConnection;
import com.meidusa.amoeba.mysql.parser.sql.MysqlParser;
import com.meidusa.amoeba.net.DatabaseConnection;
import com.meidusa.amoeba.net.poolable.ObjectPool;
import com.meidusa.amoeba.parser.Parser;
import com.meidusa.amoeba.parser.expression.Expression;
import com.meidusa.amoeba.parser.statment.PropertyStatment;
import com.meidusa.amoeba.route.AbstractQueryRouter;
/**
*
* @author <a href=mailto:piratebase@sina.com>Struct chen</a>
*
*/
public class MysqlQueryRouter extends AbstractQueryRouter{
@Override
public Parser newParser(String sql) {
return new MysqlParser(new StringReader(sql));
}
protected ObjectPool[] selectPool(DatabaseConnection connection,String sql,boolean ispreparedStatment,Object[] parameters){
//���if�����Բο������main��������Ҫ�ǹ���sql�е�һЩû���õ���Ϣ
if(sql != null){
sql = sql.trim();
while(sql.startsWith("/*")){
int index = sql.indexOf("*/");
if(index >0){
sql = sql.substring(index+2);
}else{
break;
}
sql = sql.trim();
}
if(sql.subSequence(0, 4).toString().equalsIgnoreCase("show")){
return this.defaultPools;
}
}
return super.selectPool(connection, sql, ispreparedStatment, parameters);
}
@Override
protected void setProperty(DatabaseConnection conn, PropertyStatment statment,Object[] parameters) {
Expression value = null;
if((value = statment.getValue("autocommit")) != null){
//��ʱ��֧�ַ��Զ��ύ
/*if(((Long)comparable).longValue() == 1){
conn.setAutoCommit(true);
}else{
conn.setAutoCommit(false);
}*/
}else if((value = statment.getValue("names")) != null){
((MysqlConnection)conn).setCharset((String)value.evaluate(parameters));
}else if((value = statment.getValue("charset")) != null){
((MysqlConnection)conn).setCharset((String)value.evaluate(parameters));
}else if((value = statment.getValue("transactionisolation")) != null){
//conn.setTransactionIsolation((int)((Long)comparable).longValue());
}else if((value = statment.getValue("schema")) != null){
conn.setSchema((String)value.evaluate(parameters));
}
}
public static void main(String[] args){
String sql = " /* sdfqwer */ /* asdfqer */ show asdf";
sql = sql.trim();
while(sql.startsWith("/*")){
int index = sql.indexOf("*/");
if(sql.startsWith("/*") && index >0){
sql = sql.substring(index+2);
}
sql = sql.trim();
}
System.out.println(sql);//show asdf
}
}