Module: JdbcSpec::Sybase
- Defined in:
- lib/jdbc_adapter/jdbc_sybase.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#add_limit_offset!(sql, options) ⇒ Object
:nodoc:.
-
#modify_types(tp) ⇒ Object
:nodoc:.
- #remove_index(table_name, options = {}) ⇒ Object
-
#use_temp_table? ⇒ Boolean
If limit is not set at all, we can ignore offset; if limit is set but offset is zero, use normal select with simple SET ROWCOUNT.
- #zero_limit? ⇒ Boolean
Class Method Details
.adapter_matcher(name) ⇒ Object
3 4 5 |
# File 'lib/jdbc_adapter/jdbc_sybase.rb', line 3 def self.adapter_matcher(name, *) name =~ /sybase|tds/i ? self : false end |
Instance Method Details
#add_limit_offset!(sql, options) ⇒ Object
:nodoc:
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/jdbc_adapter/jdbc_sybase.rb', line 7 def add_limit_offset!(sql, ) # :nodoc: @limit = [:limit] @offset = [:offset] if use_temp_table? # Use temp table to hack offset with Sybase sql.sub!(/ FROM /i, ' INTO #artemp FROM ') elsif zero_limit? # "SET ROWCOUNT 0" turns off limits, so we havesy # to use a cheap trick. if sql =~ /WHERE/i sql.sub!(/WHERE/i, 'WHERE 1 = 2 AND ') elsif sql =~ /ORDER\s+BY/i sql.sub!(/ORDER\s+BY/i, 'WHERE 1 = 2 ORDER BY') else sql << 'WHERE 1 = 2' end end end |
#modify_types(tp) ⇒ Object
:nodoc:
38 39 40 41 42 43 44 |
# File 'lib/jdbc_adapter/jdbc_sybase.rb', line 38 def modify_types(tp) #:nodoc: tp[:primary_key] = "NUMERIC(22,0) IDENTITY PRIMARY KEY" tp[:integer][:limit] = nil tp[:boolean] = {:name => "bit"} tp[:binary] = {:name => "image"} tp end |
#remove_index(table_name, options = {}) ⇒ Object
46 47 48 |
# File 'lib/jdbc_adapter/jdbc_sybase.rb', line 46 def remove_index(table_name, = {}) execute "DROP INDEX #{table_name}.#{index_name(table_name, )}" end |
#use_temp_table? ⇒ Boolean
If limit is not set at all, we can ignore offset; if limit is set but offset is zero, use normal select with simple SET ROWCOUNT. Thus, only use the temp table if limit is set and offset > 0.
30 31 32 |
# File 'lib/jdbc_adapter/jdbc_sybase.rb', line 30 def use_temp_table? !@limit.nil? && !@offset.nil? && @offset > 0 end |
#zero_limit? ⇒ Boolean
34 35 36 |
# File 'lib/jdbc_adapter/jdbc_sybase.rb', line 34 def zero_limit? !@limit.nil? && @limit == 0 end |