From c307d638386defc04da1ce58622dfaf2364688ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Sat, 19 May 2012 09:34:23 +0800 Subject: [PATCH] hbase support --- .../druid/hbase/HBasePreparedStatement.java | 7 ++++++ .../alibaba/druid/hbase/exec/ExecutePlan.java | 3 +++ .../druid/hbase/exec/ExecutePlanAdapter.java | 20 +++++++++++++++ .../druid/hbase/exec/InsertExecutePlan.java | 8 ++++++ .../exec/SingleTableQueryExecutePlan.java | 6 ++--- .../druid/hbase/HBaseDriverInsertTest.java | 25 +++++++++++++++++++ 6 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/hbase/exec/ExecutePlanAdapter.java create mode 100644 src/main/java/com/alibaba/druid/hbase/exec/InsertExecutePlan.java create mode 100644 src/test/java/com/alibaba/druid/hbase/HBaseDriverInsertTest.java diff --git a/src/main/java/com/alibaba/druid/hbase/HBasePreparedStatement.java b/src/main/java/com/alibaba/druid/hbase/HBasePreparedStatement.java index 1db2421b7e..fd76afbb30 100644 --- a/src/main/java/com/alibaba/druid/hbase/HBasePreparedStatement.java +++ b/src/main/java/com/alibaba/druid/hbase/HBasePreparedStatement.java @@ -12,6 +12,7 @@ import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; @@ -53,6 +54,12 @@ public class HBasePreparedStatement extends PreparedStatementBase implements Pre singleTableQueryExecuetePlan.setTableName(tableName); this.executePlan = singleTableQueryExecuetePlan; + } else if (sqlStmt instanceof SQLInsertStatement) { + SQLInsertStatement insertStmt = (SQLInsertStatement) sqlStmt; + + String tableName = ((SQLIdentifierExpr) insertStmt.getTableSource().getExpr()).getName(); + + throw new SQLException("TODO"); } else { throw new SQLException("TODO"); } diff --git a/src/main/java/com/alibaba/druid/hbase/exec/ExecutePlan.java b/src/main/java/com/alibaba/druid/hbase/exec/ExecutePlan.java index f59d9dc958..236e7fb397 100644 --- a/src/main/java/com/alibaba/druid/hbase/exec/ExecutePlan.java +++ b/src/main/java/com/alibaba/druid/hbase/exec/ExecutePlan.java @@ -6,5 +6,8 @@ import com.alibaba.druid.hbase.HBasePreparedStatement; import com.alibaba.druid.hbase.HBaseResultSet; public interface ExecutePlan { + HBaseResultSet executeQuery(HBasePreparedStatement statement) throws SQLException; + + void execute(HBasePreparedStatement statement); } diff --git a/src/main/java/com/alibaba/druid/hbase/exec/ExecutePlanAdapter.java b/src/main/java/com/alibaba/druid/hbase/exec/ExecutePlanAdapter.java new file mode 100644 index 0000000000..4179975f3f --- /dev/null +++ b/src/main/java/com/alibaba/druid/hbase/exec/ExecutePlanAdapter.java @@ -0,0 +1,20 @@ +package com.alibaba.druid.hbase.exec; + +import java.sql.SQLException; + +import com.alibaba.druid.hbase.HBasePreparedStatement; +import com.alibaba.druid.hbase.HBaseResultSet; + +public class ExecutePlanAdapter implements ExecutePlan { + + @Override + public HBaseResultSet executeQuery(HBasePreparedStatement statement) throws SQLException { + throw new UnsupportedOperationException(); + } + + @Override + public void execute(HBasePreparedStatement statement) { + throw new UnsupportedOperationException(); + } + +} diff --git a/src/main/java/com/alibaba/druid/hbase/exec/InsertExecutePlan.java b/src/main/java/com/alibaba/druid/hbase/exec/InsertExecutePlan.java new file mode 100644 index 0000000000..8218d98374 --- /dev/null +++ b/src/main/java/com/alibaba/druid/hbase/exec/InsertExecutePlan.java @@ -0,0 +1,8 @@ +package com.alibaba.druid.hbase.exec; + + + +public class InsertExecutePlan extends ExecutePlanAdapter { + + +} diff --git a/src/main/java/com/alibaba/druid/hbase/exec/SingleTableQueryExecutePlan.java b/src/main/java/com/alibaba/druid/hbase/exec/SingleTableQueryExecutePlan.java index b0ec41a1aa..b8e4cf6bc1 100644 --- a/src/main/java/com/alibaba/druid/hbase/exec/SingleTableQueryExecutePlan.java +++ b/src/main/java/com/alibaba/druid/hbase/exec/SingleTableQueryExecutePlan.java @@ -10,7 +10,7 @@ import com.alibaba.druid.hbase.HBaseConnection; import com.alibaba.druid.hbase.HBasePreparedStatement; import com.alibaba.druid.hbase.HBaseResultSet; -public class SingleTableQueryExecutePlan implements ExecutePlan { +public class SingleTableQueryExecutePlan extends ExecutePlanAdapter { private String tableName; @@ -27,10 +27,10 @@ public class SingleTableQueryExecutePlan implements ExecutePlan { try { HBaseConnection connection = statement.getConnection(); HTableInterface htable = connection.getHTable(tableName); - + Scan scan = new Scan(); ResultScanner scanner = htable.getScanner(scan); - + return new HBaseResultSet(statement, htable, scanner); } catch (SQLException e) { throw e; diff --git a/src/test/java/com/alibaba/druid/hbase/HBaseDriverInsertTest.java b/src/test/java/com/alibaba/druid/hbase/HBaseDriverInsertTest.java new file mode 100644 index 0000000000..aa87c073ed --- /dev/null +++ b/src/test/java/com/alibaba/druid/hbase/HBaseDriverInsertTest.java @@ -0,0 +1,25 @@ +package com.alibaba.druid.hbase; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.util.Properties; + +import junit.framework.TestCase; + +public class HBaseDriverInsertTest extends TestCase { + + public void test_select_0() throws Exception { + HBaseDriver driver = new HBaseDriver(); + Connection conn = driver.connect("jdbc:druid-hbase:10.20.153.63", new Properties()); + + PreparedStatement stmt = conn.prepareStatement("INSERT INTO test_user (id, name) VALUES (?, ?)"); + stmt.setInt(1, 33); + stmt.setString(2, "ljw"); + + stmt.execute(); + + stmt.close(); + + conn.close(); + } +}