module Sequel::Access::DatasetMethods

  1. lib/sequel/adapters/shared/access.rb

Constants

CAST_TYPES = {String=>:CStr, Integer=>:CLng, Date=>:CDate, Time=>:CDate, DateTime=>:CDate, Numeric=>:CDec, BigDecimal=>:CDec, File=>:CStr, Float=>:CDbl, TrueClass=>:CBool, FalseClass=>:CBool}.freeze  
EXTRACT_MAP = {:year=>"'yyyy'", :month=>"'m'", :day=>"'d'", :hour=>"'h'", :minute=>"'n'", :second=>"'s'"}.freeze  
OPS = {:'%'=>' Mod '.freeze, :'||'=>' & '.freeze}.freeze  

Public Instance methods

case_expression_sql_append(sql, ce)

Access doesn’t support CASE, so emulate it with nested IIF function calls.

[show source]
    # File lib/sequel/adapters/shared/access.rb
106 def case_expression_sql_append(sql, ce)
107   literal_append(sql, ce.with_merged_expression.conditions.reverse.inject(ce.default){|exp,(cond,val)| Sequel::SQL::Function.new(:IIF, cond, val, exp)})
108 end
cast_sql_append(sql, expr, type)

Access doesn’t support CAST, it uses separate functions for type conversion

[show source]
    # File lib/sequel/adapters/shared/access.rb
112 def cast_sql_append(sql, expr, type)
113   sql << CAST_TYPES.fetch(type, type).to_s
114   sql << '('
115   literal_append(sql, expr)
116   sql << ')'
117 end
complex_expression_sql_append(sql, op, args)
[show source]
    # File lib/sequel/adapters/shared/access.rb
119 def complex_expression_sql_append(sql, op, args)
120   case op
121   when :ILIKE
122     complex_expression_sql_append(sql, :LIKE, args)
123   when :'NOT ILIKE'
124     complex_expression_sql_append(sql, :'NOT LIKE', args)
125   when :'!='
126     sql << '('
127     literal_append(sql, args[0])
128     sql << ' <> '
129     literal_append(sql, args[1])
130     sql << ')'
131   when :'%', :'||'
132     sql << '('
133     c = false
134     op_str = OPS[op]
135     args.each do |a|
136       sql << op_str if c
137       literal_append(sql, a)
138       c ||= true
139     end
140     sql << ')'
141   when :**
142     sql << '('
143     literal_append(sql, args[0])
144     sql << ' ^ '
145     literal_append(sql, args[1])
146     sql << ')'
147   when :extract
148     part = args[0]
149     raise(Sequel::Error, "unsupported extract argument: #{part.inspect}") unless format = EXTRACT_MAP[part]
150     sql << "datepart(" << format.to_s << ', '
151     literal_append(sql, args[1])
152     sql << ')'
153   else
154     super
155   end
156 end
constant_sql_append(sql, constant)

Use Date(), Now(), and Time() for CURRENT_DATE, CURRENT_TIMESTAMP, and CURRENT_TIME

[show source]
    # File lib/sequel/adapters/shared/access.rb
159 def constant_sql_append(sql, constant)
160   case constant
161   when :CURRENT_DATE
162     sql << 'Date()'
163   when :CURRENT_TIMESTAMP
164     sql << 'Now()'
165   when :CURRENT_TIME
166     sql << 'Time()'
167   else
168     super
169   end
170 end
cross_join(table)

Emulate cross join by using multiple tables in the FROM clause.

[show source]
    # File lib/sequel/adapters/shared/access.rb
173 def cross_join(table)
174   clone(:from=>@opts[:from] + [table])
175 end
escape_like(string)

Access uses [] to escape metacharacters, instead of backslashes.

[show source]
    # File lib/sequel/adapters/shared/access.rb
178 def escape_like(string)
179   string.gsub(/[\\*#?\[]/){|m| "[#{m}]"}
180 end
into(table)

Specify a table for a SELECT … INTO query.

[show source]
    # File lib/sequel/adapters/shared/access.rb
183 def into(table)
184   clone(:into => table)
185 end
quoted_identifier_append(sql, v)

Access uses [] for quoting identifiers, and can’t handle ] inside identifiers.

[show source]
    # File lib/sequel/adapters/shared/access.rb
189 def quoted_identifier_append(sql, v)
190   v = v.to_s
191   raise Error, "Access cannot quote an identifier containing ]" if v.include?("]")
192   sql << '[' << v << ']'
193 end
supports_derived_column_lists?()

Access does not support derived column lists.

[show source]
    # File lib/sequel/adapters/shared/access.rb
196 def supports_derived_column_lists?
197   false
198 end
supports_intersect_except?()

Access doesn’t support INTERSECT or EXCEPT

[show source]
    # File lib/sequel/adapters/shared/access.rb
201 def supports_intersect_except?
202   false
203 end
supports_is_true?()

Access does not support IS TRUE

[show source]
    # File lib/sequel/adapters/shared/access.rb
206 def supports_is_true?
207   false
208 end
supports_join_using?()

Access doesn’t support JOIN USING

[show source]
    # File lib/sequel/adapters/shared/access.rb
211 def supports_join_using?
212   false
213 end
supports_multiple_column_in?()

Access does not support multiple columns for the IN/NOT IN operators

[show source]
    # File lib/sequel/adapters/shared/access.rb
216 def supports_multiple_column_in?
217   false
218 end
truncate()

Access doesn’t support truncate, so do a delete instead.

[show source]
    # File lib/sequel/adapters/shared/access.rb
221 def truncate
222   delete
223   nil
224 end