This commit is contained in:
温少
2012-05-19 23:51:05 +08:00
2 changed files with 45 additions and 22 deletions
@@ -13,18 +13,21 @@ import org.apache.hadoop.hbase.util.Bytes;
import com.alibaba.druid.common.jdbc.ResultSetBase;
import com.alibaba.druid.common.jdbc.ResultSetMetaDataBase.ColumnMetaData;
import com.alibaba.druid.hbase.mapping.HMapping;
import com.alibaba.druid.util.JdbcUtils;
public class HBaseResultSet extends ResultSetBase {
private HStatementInterface statement;
private ResultScanner scanner;
private HTableInterface htable;
private Result result;
private byte[] family = Bytes.toBytes("d");
private ResultScanner scanner;
private HTableInterface htable;
private Result result;
private byte[] family = Bytes.toBytes("d");
private HResultSetMetaData metaData;
private HMapping mapping;
public HBaseResultSet(HStatementInterface statement, HTableInterface htable, ResultScanner scanner){
super(statement);
this.statement = statement;
@@ -32,6 +35,14 @@ public class HBaseResultSet extends ResultSetBase {
this.scanner = scanner;
}
public HMapping getMapping() {
return mapping;
}
public void setMapping(HMapping mapping) {
this.mapping = mapping;
}
@Override
public Statement getStatement() throws SQLException {
return statement;
@@ -70,7 +81,7 @@ public class HBaseResultSet extends ResultSetBase {
ColumnMetaData column = this.metaData.getColumn(columnIndex);
return getObjectInternal(column.getColumnName(), column.getColumnType());
}
public Object getObjectInternal(String columnName, int type) throws SQLException {
byte[] bytes = getBytes(columnName);
switch (type) {
@@ -109,13 +120,13 @@ public class HBaseResultSet extends ResultSetBase {
byte[] bytes = getBytes(columnIndex);
return Bytes.toString(bytes);
}
@Override
public String getString(String columnName) throws SQLException {
byte[] bytes = getBytes(columnName);
return Bytes.toString(bytes);
}
@Override
public byte[] getBytes(int columnIndex) throws SQLException {
ColumnMetaData column = this.metaData.getColumn(columnIndex);
@@ -149,15 +160,15 @@ public class HBaseResultSet extends ResultSetBase {
return Bytes.toInt(bytes);
}
@Override
public int getInt(int columnIndex) throws SQLException {
byte[] bytes = getBytes(columnIndex);
if (bytes == null) {
return 0;
}
return Bytes.toInt(bytes);
}
@@ -171,15 +182,15 @@ public class HBaseResultSet extends ResultSetBase {
return Bytes.toBigDecimal(bytes);
}
@Override
public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
byte[] bytes = getBytes(columnIndex);
if (bytes == null) {
return null;
}
return Bytes.toBigDecimal(bytes);
}
@@ -19,6 +19,7 @@ import com.alibaba.druid.hbase.HBaseConnection;
import com.alibaba.druid.hbase.HPreparedStatement;
import com.alibaba.druid.hbase.HBaseResultSet;
import com.alibaba.druid.hbase.HResultSetMetaData;
import com.alibaba.druid.hbase.mapping.HMapping;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
@@ -27,13 +28,27 @@ import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils;
public class SingleTableQueryExecutePlan extends SingleTableExecutePlan {
private List<String> columeNames = new ArrayList<String>();
private List<SQLExpr> conditions = new ArrayList<SQLExpr>();
private List<String> columeNames = new ArrayList<String>();
private List<SQLExpr> conditions = new ArrayList<SQLExpr>();
private byte[] family = Bytes.toBytes("d");
private byte[] family = Bytes.toBytes("d");
private HResultSetMetaData resultMetaData;
private HMapping mapping;
public SingleTableQueryExecutePlan(){
}
public HMapping getMapping() {
return mapping;
}
public void setMapping(HMapping mapping) {
this.mapping = mapping;
}
public List<SQLExpr> getConditions() {
return conditions;
}
@@ -42,10 +57,6 @@ public class SingleTableQueryExecutePlan extends SingleTableExecutePlan {
this.conditions = conditions;
}
public SingleTableQueryExecutePlan(){
}
public List<String> getColumeNames() {
return columeNames;
}
@@ -62,7 +73,6 @@ public class SingleTableQueryExecutePlan extends SingleTableExecutePlan {
public HBaseResultSet executeQuery(HPreparedStatement statement) throws SQLException {
try {
HBaseConnection connection = statement.getConnection();
HTableInterface htable = connection.getHTable(getTableName());
String dbType = connection.getConnectProperties().getProperty("dbType");
Scan scan = new Scan();
@@ -109,11 +119,13 @@ public class SingleTableQueryExecutePlan extends SingleTableExecutePlan {
}
}
HTableInterface htable = connection.getHTable(getTableName());
ResultScanner scanner = htable.getScanner(scan);
HBaseResultSet resultSet = new HBaseResultSet(statement, htable, scanner);
resultSet.setMetaData(resultMetaData);
resultSet.setMapping(mapping);
return resultSet;
} catch (SQLException e) {
throw e;