Sha256: 32ba31345a91a625ca20d6024e59f97d2296c3d3e5987ca19494a1c5387102dd

Contents?: true

Size: 1.92 KB

Versions: 11

Compression:

Stored size: 1.92 KB

Contents

unless defined? Test
  $:.unshift File.dirname(__FILE__) + '/../../../lib'
  %w( rubygems ambition/adapters/active_record benchmark ).each { |f| require f }

  class User < ActiveRecord::Base
    def self.reflections
      return @reflections if @reflections
      @reflections = {}
      @reflections[:ideas]    = Reflection.new(:has_many,   'user_id',     :ideas,   'ideas')
      @reflections[:invites]  = Reflection.new(:has_many,   'referrer_id', :invites, 'invites')
      @reflections[:profile]  = Reflection.new(:has_one,    'user_id',     :profile, 'profiles')
      @reflections[:account]  = Reflection.new(:belongs_to, 'account_id',  :account, 'accounts')
      @reflections
    end

    def self.table_name
      'users'
    end
  end

  class Reflection < Struct.new(:macro, :primary_key_name, :name, :table_name)
  end

  Times = 10000

  Benchmark.bm(30) do |x|
    x.report 'simple select' do
      Times.times do
        User.select { |u| u.id == 20 }.to_hash
      end
    end

    x.report 'simple select w/ eval' do
      Times.times do
        User.select { |u| u.created_at == Time.now }.to_hash
      end
    end

    x.report 'dual select' do
      Times.times do
        User.select { |u| u.id == 20 && u.age > 20 }.to_hash
      end
    end

    x.report 'join select' do
      Times.times do
        User.select { |u| u.id == 20 && u.ideas.name =~ /stuff/ }.to_hash
      end
    end

    x.report 'dual select w/ sort' do
      Times.times do
        User.select { |u| u.id == 20 && u.age > 20 }.sort_by { |u| u.id }.to_hash
      end
    end

    x.report 'dual select w/ sort & first' do
      Times.times do
        User.select { |u| u.id == 20 && u.age > 20 }.sort_by { |u| u.id }.first(20).to_hash
      end
    end

    x.report "it's complicated" do
      Times.times do
        User.select { |u| (u.id == 20 && u.age > 20) || u.profile.name == 'Jon' }.sort_by { |u| [u.id, -u.name] }.first(20).to_hash
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 2 rubygems

Version Path
benhoskings-ambitious-activerecord-0.1.3.1 test/benchmark.rb
benhoskings-ambitious-activerecord-0.1.3.2 test/benchmark.rb
benhoskings-ambitious-activerecord-0.1.3.3 test/benchmark.rb
benhoskings-ambitious-activerecord-0.1.3.4 test/benchmark.rb
benhoskings-ambitious-activerecord-0.1.3.5 test/benchmark.rb
benhoskings-ambitious-activerecord-0.1.3.6 test/benchmark.rb
benhoskings-ambitious-activerecord-0.1.3.7 test/benchmark.rb
benhoskings-ambitious-activerecord-0.1.3 test/benchmark.rb
benhoskings-ambitious-activerecord-0.1.3.8 test/benchmark.rb
ambitious-activerecord-0.1.1 test/benchmark.rb
ambitious-activerecord-0.1.3 test/benchmark.rb