module HipsterSqlToHbase # This class takes the magic provided by the ThriftCallGroup and # turns it into an HBase reality by opening a connection to a # specified host and port and executing the pertinent Thrift calls. class Executor @@host=nil @@port=nil # Set class variable host when instantiated. def host=(host_s) self.class.host=host_s end # Get class variable host when instantiated. def host self.class.host end # Set class variable host when NOT instantiated. def self.host=(host_s) @@host=host_s end # Get class variable host when NOT instantiated. def self.host @@host end # Set class variable port when instantiated. def port=(port_n) self.class.port=port_n end # Get class variable port when instantiated. def port self.class.port end # Set class variable port when NOT instantiated. def self.port=(port_n) @@port=port_n end # Get class variable port when NOT instantiated. def self.port @@port end # Initialize a Thrift connection to the specified host and port # and execute the provided ThriftCallGroup object. def execute(thrift_call_group,host_s=nil,port_n=nil,incr=false) @@host = host_s if !host_s.nil? @@port = port_n if !port_n.nil? socket = Thrift::Socket.new(@@host, @@port) transport = Thrift::BufferedTransport.new(socket) transport.open protocol = Thrift::BinaryProtocol.new(transport) client = HBase::Client.new(protocol) results = [] if incr not_incr = true c_row = 0 end thrift_call_group.each do |thrift_call| if incr if not_incr c_row = increment_table_row_index(thrift_call[:arguments][0],thrift_call_group.length,client) not_incr = false end c_row += 1 thrift_call[:arguments][1] = c_row.to_s end results << client.send(thrift_call[:method],*thrift_call[:arguments]) end results.flatten end private def increment_table_row_index(table_name,amount,client) client.incrementAndReturn("index:#{table_name}",amount) end end end