]> source.dussan.org Git - sonarqube.git/blob
c272590f69966f459adcbcfb8ca69590a37a4408
[sonarqube.git] /
1 module JdbcSpec
2   module Sybase
3     def self.adapter_selector
4       [/sybase/i, lambda{|cfg,adapt| adapt.extend(JdbcSpec::Sybase)}]
5     end
6
7       def add_limit_offset!(sql, options) # :nodoc:
8         @limit = options[:limit]
9         @offset = options[:offset]
10         if use_temp_table?
11           # Use temp table to hack offset with Sybase
12           sql.sub!(/ FROM /i, ' INTO #artemp FROM ')
13         elsif zero_limit?
14           # "SET ROWCOUNT 0" turns off limits, so we havesy
15           # to use a cheap trick.
16           if sql =~ /WHERE/i
17             sql.sub!(/WHERE/i, 'WHERE 1 = 2 AND ')
18           elsif sql =~ /ORDER\s+BY/i
19             sql.sub!(/ORDER\s+BY/i, 'WHERE 1 = 2 ORDER BY')
20           else
21             sql << 'WHERE 1 = 2'
22           end
23         end
24       end
25
26       # If limit is not set at all, we can ignore offset;
27       # if limit *is* set but offset is zero, use normal select
28       # with simple SET ROWCOUNT.  Thus, only use the temp table
29       # if limit is set and offset > 0.
30       def use_temp_table?
31         !@limit.nil? && !@offset.nil? && @offset > 0
32       end
33
34       def zero_limit?
35         !@limit.nil? && @limit == 0
36       end
37
38   end
39 end