Package com.alimama.mdrill.jdbc

Source Code of com.alimama.mdrill.jdbc.MdrillStatement

package com.alimama.mdrill.jdbc;


import java.io.BufferedInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.ByteArrayBuffer;


public class MdrillStatement implements java.sql.Statement{
  private String strurl;
    private int fetchSize = 50;

  public MdrillStatement(String strurl) {
    this.strurl = strurl;
  }
  /**
     * We need to keep a reference to the result set to support the following:
     * <code>
     * statement.execute(String sql);
     * statement.getResultSet();
     * </code>.
     */
    private ResultSet resultSet = null;

    /**
     * The maximum number of rows this statement should return (0 => all rows).
     */
    private int maxRows = 0;

    /**
     * Add SQLWarnings to the warningChain if needed.
     */
    private SQLWarning warningChain = null;

    /**
     * Keep state so we can fail certain calls made after close().
     */
    private boolean isClosed = false;



    public void addBatch(String sql) throws SQLException {
      throw new SQLException("Method not supported");
    }


    public void cancel() throws SQLException {
      throw new SQLException("Method not supported");
    }


    public void clearBatch() throws SQLException {
      throw new SQLException("Method not supported");
    }

    public void clearWarnings() throws SQLException {
      warningChain = null;
    }

    public void close() throws SQLException {
      this.strurl = null;
      resultSet = null;
      isClosed = true;
    }


    public boolean execute(String sql) throws SQLException {

      String lowercase=sql.toLowerCase();
        if(lowercase.indexOf("insert")>=0&&lowercase.indexOf("into")>0 && lowercase.indexOf("values")>0)
        {
          InsertParser parser=new InsertParser();
          try {
            parser.parse(sql);
          HttpClient httpclient = new DefaultHttpClient();
          httpclient.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000*30);
           httpclient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF8");
          HttpPost httppost = new HttpPost("http://" + this.strurl+ "/higo/insert.jsp");
          List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
          nameValuePairs.add(new BasicNameValuePair("project",parser.tablename));
          nameValuePairs.add(new BasicNameValuePair("json", parser.jsons));

          httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));

          HttpResponse response = httpclient.execute(httppost);

          InputStream is = response.getEntity().getContent();
          BufferedInputStream bis = new BufferedInputStream(is);
          ByteArrayBuffer baf = new ByteArrayBuffer(1024);

          int current = 0;
          while ((current = bis.read()) != -1) {
            baf.append((byte) current);
          }
             
          return true;
          }catch(Throwable e){
            throw new SQLException(e);
          }
        }
     
      ResultSet rs = executeQuery(sql);
      return rs != null;
    }

    public boolean execute(String sql, int autoGeneratedKeys) throws SQLException {
      throw new SQLException("Method not supported");
    }

 
    public boolean execute(String sql, int[] columnIndexes) throws SQLException {
      throw new SQLException("Method not supported");
    }

 

    public boolean execute(String sql, String[] columnNames) throws SQLException {
      throw new SQLException("Method not supported");
    }



    public int[] executeBatch() throws SQLException {
      throw new SQLException("Method not supported");
    }

 

    public ResultSet executeQuery(String sql) throws SQLException {
      if (isClosed) {
        throw new SQLException("Can't execute after statement has been closed");
      }
     
    
     

      SqlParser parse=new SqlParser();
      Long total=0l;
     
      StringBuffer debug=new StringBuffer();
    
      List<List<Object>> results=new ArrayList<List<Object>>();
       MdrillRequest request=new MdrillRequest(parse, this.strurl);
      try {
        this.clearWarnings();
        resultSet = null;
        parse.parse(sql);
        debug.append(parse.toString());
        debug.append("\n");
        total=request.request(results);
        if(total<0)
        {
          throw new Exception("server exception");
        }
      } catch (Exception ex) {
        debug.append(request.content);
        throw new SQLException(ex.toString()+"\n"+debug.toString(), "08S01");
      }
      resultSet = new MdrillQueryResultSet(parse,results,total);
      resultSet.setFetchSize(fetchSize);
      return resultSet;
    }


    public int executeUpdate(String sql) throws SQLException {
      throw new SQLException("Method not supported");
    }


    public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
      throw new SQLException("Method not supported");
    }


    public int executeUpdate(String sql, int[] columnIndexes) throws SQLException {
      throw new SQLException("Method not supported");
    }

    public int executeUpdate(String sql, String[] columnNames) throws SQLException {
      throw new SQLException("Method not supported");
    }

    public Connection getConnection() throws SQLException {
      throw new SQLException("Method not supported");
    }

    public int getFetchDirection() throws SQLException {
      throw new SQLException("Method not supported");
    }

    public int getFetchSize() throws SQLException {
      return fetchSize;
    }

    public ResultSet getGeneratedKeys() throws SQLException {
      throw new SQLException("Method not supported");
    }

    public int getMaxFieldSize() throws SQLException {
      throw new SQLException("Method not supported");
    }

    public int getMaxRows() throws SQLException {
      return maxRows;
    }

    public boolean getMoreResults() throws SQLException {
      throw new SQLException("Method not supported");
    }

    public boolean getMoreResults(int current) throws SQLException {
      throw new SQLException("Method not supported");
    }

    public int getQueryTimeout() throws SQLException {
      throw new SQLException("Method not supported");
    }


    public ResultSet getResultSet() throws SQLException {
      return resultSet;
    }


    public int getResultSetConcurrency() throws SQLException {
      throw new SQLException("Method not supported");
    }

    public int getResultSetHoldability() throws SQLException {
      throw new SQLException("Method not supported");
    }

    public int getResultSetType() throws SQLException {
      throw new SQLException("Method not supported");
    }

    public int getUpdateCount() throws SQLException {
      return 0;
    }

    public SQLWarning getWarnings() throws SQLException {
      return warningChain;
    }


    public boolean isClosed() throws SQLException {
      return isClosed;
    }


    public boolean isPoolable() throws SQLException {
      throw new SQLException("Method not supported");
    }


    public void setCursorName(String name) throws SQLException {
      throw new SQLException("Method not supported");
    }


    public void setEscapeProcessing(boolean enable) throws SQLException {
      throw new SQLException("Method not supported");
    }


    public void setFetchDirection(int direction) throws SQLException {
      throw new SQLException("Method not supported");
    }


    public void setFetchSize(int rows) throws SQLException {
      fetchSize = rows;
    }


    public void setMaxFieldSize(int max) throws SQLException {
      throw new SQLException("Method not supported");
    }

    public void setMaxRows(int max) throws SQLException {
      if (max < 0) {
        throw new SQLException("max must be >= 0");
      }
      maxRows = max;
    }

    public void setPoolable(boolean poolable) throws SQLException {
      throw new SQLException("Method not supported");
    }

    public void setQueryTimeout(int seconds) throws SQLException {
      throw new SQLException("Method not supported");
    }

    public boolean isWrapperFor(Class<?> iface) throws SQLException {
      throw new SQLException("Method not supported");
    }

    public <T> T unwrap(Class<T> iface) throws SQLException {
      throw new SQLException("Method not supported");
    }


 
  public void closeOnCompletion() throws SQLException {
    // TODO Auto-generated method stub
   
  }


 
  public boolean isCloseOnCompletion() throws SQLException {
    // TODO Auto-generated method stub
    return false;
  }

}
TOP

Related Classes of com.alimama.mdrill.jdbc.MdrillStatement

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.