require File.join(File.dirname(__FILE__), '../spec_helper.rb') module ActiveRecord module ConnectionAdapters describe HypertableAdapter do before do @h = HypertableAdapter.new(nil, nil, {}) end describe HypertableAdapter, '.describe_table' do before do @describe_table_text = '\n \n \n message \n \n date-time\n \n \n \n' end it "should return a string describing a table" do @h.should_receive(:describe_table).with('name').and_return(@describe_table_text) @h.describe_table('name').should == @describe_table_text end end describe HypertableAdapter, '.column' do before do @describe_table_text = '\n \n \n message \n \n date-time\n \n \n \n' end it "should return an array of columns representing the table schema" do @h.stub!(:describe_table).with('name').and_return(@describe_table_text) columns = @h.columns('name') columns.should be_is_a(Array) columns.should have_exactly(3).columns # The first column within a Hypertable is always the row key. columns[0].name.should == "ROW" columns[1].name.should == "message" # notice that the original column name "date-time" is converted # to a Ruby-friendly column name "date_time" columns[2].name.should == "date_time" end it "should set up the name mappings between ruby and hypertable" do @h.stub!(:describe_table).with('name').and_return(@describe_table_text) columns = @h.columns('name') @h.hypertable_column_name('date_time', 'name').should == 'date-time' end end describe HypertableAdapter, '.quote_column_name' do it "should surround column name in single quotes" do @h.quote_column_name("date_time").should == "'date_time'" end end describe HypertableAdapter, '.rubify_column_name' do it "should change dashes to underscores in column names" do @h.rubify_column_name("date-time").should == "date_time" end end describe HypertableAdapter, '.tables' do before do @tables = ["table1", "table2"] end it "should return an array of table names" do @h.should_receive(:tables).and_return(@tables) @h.tables.should == @tables end end describe HypertableAdapter, '.quote' do it "should return empty string for nil values" do @h.quote(nil).should == '' end end describe HypertableAdapter, '.quote' do it "should return a quoted string for all non-nil values" do @h.quote(1).should == "1" @h.quote('happy').should == "happy" end end describe HypertableAdapter, '.is_qualified_column_name?' do it "should return false for regular columns" do status, family, qualifier = @h.is_qualified_column_name?("col1") status.should be_false family.should be_nil qualifier.should be_nil end it "should return true for qualified columns" do status, family, qualifier = @h.is_qualified_column_name?("col1:red") status.should be_true family.should == 'col1' qualifier.should == 'red' end end describe HypertableAdapter, '.convert_select_columns_to_array_of_columns(' do it "should accept an array as input" do @h.convert_select_columns_to_array_of_columns(["one", "two", "three"]).should == ["one", "two", "three"] end it "should accept a string as input and split the results on commas" do @h.convert_select_columns_to_array_of_columns("one,two,three").should == ["one", "two", "three"] end it "should strip whitespace from column names" do @h.convert_select_columns_to_array_of_columns(" one,two , three ").should == ["one", "two", "three"] end it "should return [] for a request on * columns" do @h.convert_select_columns_to_array_of_columns("*").should == [] end end end end end