From a3a4fcce15144e1288cb16fa8810aa82378ecb0d Mon Sep 17 00:00:00 2001 From: Michael Stack Date: Sun, 1 Jun 2008 05:19:08 +0000 Subject: [PATCH] HBASE-487 Replace hql w/ a hbase-friendly jirb or jython shell git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@662148 13f79535-47bb-0310-9956-ffa450edef68 --- bin/hbase | 3 +- bin/hirb.rb | 119 +++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 111 insertions(+), 11 deletions(-) diff --git a/bin/hbase b/bin/hbase index 9ccc6be217c..52e80a180cf 100755 --- a/bin/hbase +++ b/bin/hbase @@ -183,7 +183,8 @@ unset IFS # figure out which class to run if [ "$COMMAND" = "shell" ] ; then - CLASS="org.jruby.Main --command irb -r${HBASE_HOME}/bin/hirb.rb" + # CLASS="org.jruby.Main --command irb -r${HBASE_HOME}/bin/hirb.rb" + CLASS="org.jruby.Main ${HBASE_HOME}/bin/hirb.rb" elif [ "$COMMAND" = "master" ] ; then CLASS='org.apache.hadoop.hbase.master.HMaster' elif [ "$COMMAND" = "regionserver" ] ; then diff --git a/bin/hirb.rb b/bin/hirb.rb index 490c9e41d6a..efcfaa697ff 100644 --- a/bin/hirb.rb +++ b/bin/hirb.rb @@ -1,13 +1,12 @@ -# Module passed to jirb using the '-r' flag when bin/hbase shell is invoked. -# Pollutes jirb with hbase imports and hbase commands. Outputs a banner -# that tells user where to find help, shell version, etc. +# Command passed to org.jruby.Main. Pollutes jirb with hbase imports and hbase +# commands and then loads jirb. Outputs a banner that tells user where to find +# help, shell version, etc. # TODO: Process command-line arguments: e.g. --master= or -Dhbase.etc and --formatter # or read hbase shell configurations from irbrc # TODO: Read from environment which outputter to use (outputter should # be able to output to a passed Stream as well as STDIN and STDOUT) # TODO: Write a base class for formatters with ascii, xhtml, and json subclasses. -# TODO: Intercept 'help' # Run the java magic include and import basic HBase types. include Java @@ -22,22 +21,122 @@ import org.apache.hadoop.hbase.io.BatchUpdate # Some goodies for hirb. Should these be left up to the user's discretion? require 'irb/completion' -# Set the irb shell name to be hbase. -IRB.conf[:IRB_NAME] = "hbase" - -def hbase +def help puts 'HBase Shell Commands:' puts ' version Output HBase version' + puts ARGV.inspect end def version - puts "Version: #{org.apache.hadoop.hbase.util.VersionInfo.getVersion()},\ + "Version: #{org.apache.hadoop.hbase.util.VersionInfo.getVersion()},\ r#{org.apache.hadoop.hbase.util.VersionInfo.getRevision()},\ #{org.apache.hadoop.hbase.util.VersionInfo.getDate()}" end +# general + +def list + puts "Not implemented yet" +end + +# DDL + +def create(table_name, *args) + puts "Not impemented yet" +end + +def drop(table_name) + puts "Not implemented yet" +end + +def alter(table_name, *args) + puts "Not implemented yet" +end + +# admin + +def enable(table_name) + puts "Not implemented yet" +end + +def disable(table_name) + puts "Not implemented yet" +end + +def truncate(table_name) + puts "Not implemented yet" +end + +# CRUD + +def get(table_name, row_key, *args) + puts "Not implemented yet" +end + +def put(table_name, row_key, *args) + puts "Not implemented yet" +end + +def scan(table_name, start_key, end_key, *args) + puts "Not implemented yet" +end + +def delete(table_name, row_key, *args) + puts "Not implemented yet" +end + + + # Output a banner message that tells users where to go for help # TODO: Test that we're in irb context. For now presume it. # TODO: Test that we are in shell context. puts "HBase Shell; type 'hbase' for the list of supported HBase commands" -version +puts version + +require "irb" + +IRB::ExtendCommandBundle.instance_variable_get("@EXTEND_COMMANDS").delete_if{|x| x.first == :irb_help} + +module IRB + module ExtendCommandBundle + + end + + def IRB.start(ap_path = nil) + $0 = File::basename(ap_path, ".rb") if ap_path + + IRB.setup(ap_path) + + @CONF[:PROMPT][:HBASE] = { + :PROMPT_I => "hbase> ", + :PROMPT_N => "hbase> ", + :PROMPT_S => nil, + :PROMPT_C => "?> ", + :RETURN => "%s\n" + } + @CONF[:PROMPT_MODE] = :HBASE + + + if @CONF[:SCRIPT] + irb = Irb.new(nil, @CONF[:SCRIPT]) + else + irb = Irb.new + end + + @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC] + @CONF[:MAIN_CONTEXT] = irb.context + + trap("SIGINT") do + irb.signal_handle + end + + catch(:IRB_EXIT) do + irb.eval_input + end + end +end + + +# .delete_if{|x| x.first == :irb_help}.inspect + +IRB.start