/*
* This program is free software; you can redistribute it and/or modify it under the terms of
* the GNU AFFERO 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 AFFERO GENERAL PUBLIC LICENSE for more details.
* You should have received a copy of the GNU AFFERO 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 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.statement.PropertyStatement;
import com.meidusa.amoeba.parser.statement.Statement;
import com.meidusa.amoeba.route.SqlBaseQueryRouter;
import com.meidusa.amoeba.route.SqlQueryObject;
/**
*
* @author <a href=mailto:piratebase@sina.com>Struct chen</a>
*
*/
public class MysqlQueryRouter extends SqlBaseQueryRouter{
@Override
public Parser newParser(String sql) {
return new MysqlParser(new StringReader(sql));
}
public ObjectPool[] selectPool(DatabaseConnection connection,SqlQueryObject queryObject){
String sql = queryObject.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.length()>4){
String sqlHead = sql.substring(0, 4);
if(sqlHead.equalsIgnoreCase("show") || sqlHead.equalsIgnoreCase("help") ){
return defaultPools;
}
}
}
return super.selectPool(connection, queryObject);
}
@Override
protected void setProperty(DatabaseConnection conn, Statement st,SqlQueryObject queryObject) {
PropertyStatement statment = (PropertyStatement)st;
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(queryObject.parameters));
}else if((value = statment.getValue("charset")) != null){
((MysqlConnection)conn).setCharset((String)value.evaluate(queryObject.parameters));
}else if((value = statment.getValue("character_set_results")) != null){
((MysqlConnection)conn).setCharset((String)value.evaluate(queryObject.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(queryObject.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);
}
}