]> source.dussan.org Git - sonarqube.git/blob
02096a4cdb6523e77edc1c0e3bfb7305234faa90
[sonarqube.git] /
1 module ArJdbc
2   module Sybase
3     def add_limit_offset!(sql, options) # :nodoc:
4       @limit = options[:limit]
5       @offset = options[:offset]
6       if use_temp_table?
7         # Use temp table to hack offset with Sybase
8         sql.sub!(/ FROM /i, ' INTO #artemp FROM ')
9       elsif zero_limit?
10         # "SET ROWCOUNT 0" turns off limits, so we havesy
11         # to use a cheap trick.
12         if sql =~ /WHERE/i
13           sql.sub!(/WHERE/i, 'WHERE 1 = 2 AND ')
14         elsif sql =~ /ORDER\s+BY/i
15           sql.sub!(/ORDER\s+BY/i, 'WHERE 1 = 2 ORDER BY')
16         else
17           sql << 'WHERE 1 = 2'
18         end
19       end
20     end
21
22     # If limit is not set at all, we can ignore offset;
23     # if limit *is* set but offset is zero, use normal select
24     # with simple SET ROWCOUNT.  Thus, only use the temp table
25     # if limit is set and offset > 0.
26     def use_temp_table?
27       !@limit.nil? && !@offset.nil? && @offset > 0
28     end
29
30     def zero_limit?
31       !@limit.nil? && @limit == 0
32     end
33
34     def modify_types(tp) #:nodoc:
35       tp[:primary_key] = "NUMERIC(22,0) IDENTITY PRIMARY KEY"
36       tp[:integer][:limit] = nil
37       tp[:boolean] = {:name => "bit"}
38       tp[:binary] = {:name => "image"}
39       tp
40     end
41
42     def remove_index(table_name, options = {})
43       execute "DROP INDEX #{table_name}.#{index_name(table_name, options)}"
44     end
45   end
46 end