Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: a040b1c0e6
Fetching contributors…

Cannot retrieve contributors at this time

file 75 lines (65 sloc) 1.982 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
require 'spec_helper'

module Arel
  describe Take do
    before do
      @relation = Table.new(:users)
      @taken = 4
    end

    describe '#to_sql' do
      it "manufactures sql with limit and offset" do
        sql = Take.new(@relation, @taken).to_sql

        adapter_is :mysql do
          sql.should be_like(%Q{
SELECT `users`.`id`, `users`.`name`
FROM `users`
LIMIT 4
})
        end

        adapter_is :oracle do
          sql.should be_like(%Q{
SELECT "USERS"."ID", "USERS"."NAME"
FROM "USERS"
WHERE ROWNUM <= 4
})

          sql_with_order_by = Take.new(@relation.order(@relation[:id]), @taken).to_sql
          sql_with_order_by.should be_like(%Q{
select * from
(SELECT "USERS"."ID", "USERS"."NAME"
FROM "USERS"
ORDER BY "USERS"."ID" ASC)
where rownum <= 4
})

          sql_with_distinct = Take.new(@relation.project('DISTINCT "USERS"."ID"'), @taken).to_sql
          sql_with_distinct.should be_like(%Q{
select * from
(SELECT DISTINCT "USERS"."ID"
FROM "USERS")
where rownum <= 4
})
        end

        adapter_is_not :mysql, :oracle do
          sql.should be_like(%Q{
SELECT "users"."id", "users"."name"
FROM "users"
LIMIT 4
})
        end
      end

      it "manufactures count sql with limit" do
        sql = Take.new(@relation.project(@relation[:id].count), @taken).to_sql

        adapter_is :mysql do
          sql.should be_like(%Q{
SELECT COUNT(*) AS count_id
FROM (SELECT 1 FROM `users` LIMIT 4) AS subquery
})
        end

        adapter_is_not :mysql, :oracle do
          sql.should be_like(%Q{
SELECT COUNT(*) AS count_id
FROM (SELECT 1 FROM "users" LIMIT 4) AS subquery
})
        end
      end
    end
  end
end
Something went wrong with that request. Please try again.