module Sequel::Access::DatasetMethods

Constants

CAST_TYPES
EXTRACT_MAP
OPS

Public Instance Methods

case_expression_sql_append(sql, ce) click to toggle source

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

    # File lib/sequel/adapters/shared/access.rb
103 def case_expression_sql_append(sql, ce)
104   literal_append(sql, ce.with_merged_expression.conditions.reverse.inject(ce.default){|exp,(cond,val)| Sequel::SQL::Function.new(:IIF, cond, val, exp)})
105 end
cast_sql_append(sql, expr, type) click to toggle source

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

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

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

Calls superclass method
    # File lib/sequel/adapters/shared/access.rb
156 def constant_sql_append(sql, constant)
157   case constant
158   when :CURRENT_DATE
159     sql << 'Date()'
160   when :CURRENT_TIMESTAMP
161     sql << 'Now()'
162   when :CURRENT_TIME
163     sql << 'Time()'
164   else
165     super
166   end
167 end
cross_join(table) click to toggle source

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

    # File lib/sequel/adapters/shared/access.rb
170 def cross_join(table)
171   clone(:from=>@opts[:from] + [table])
172 end
escape_like(string) click to toggle source

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

    # File lib/sequel/adapters/shared/access.rb
175 def escape_like(string)
176   string.gsub(/[\\*#?\[]/){|m| "[#{m}]"}
177 end
into(table) click to toggle source

Specify a table for a SELECT … INTO query.

    # File lib/sequel/adapters/shared/access.rb
180 def into(table)
181   clone(:into => table)
182 end
quoted_identifier_append(sql, v) click to toggle source

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

    # File lib/sequel/adapters/shared/access.rb
186 def quoted_identifier_append(sql, v)
187   sql << '[' << v.to_s << ']'
188 end
supports_derived_column_lists?() click to toggle source

Access does not support derived column lists.

    # File lib/sequel/adapters/shared/access.rb
191 def supports_derived_column_lists?
192   false
193 end
supports_intersect_except?() click to toggle source

Access doesn’t support INTERSECT or EXCEPT

    # File lib/sequel/adapters/shared/access.rb
196 def supports_intersect_except?
197   false
198 end
supports_is_true?() click to toggle source

Access does not support IS TRUE

    # File lib/sequel/adapters/shared/access.rb
201 def supports_is_true?
202   false
203 end
supports_join_using?() click to toggle source

Access doesn’t support JOIN USING

    # File lib/sequel/adapters/shared/access.rb
206 def supports_join_using?
207   false
208 end
supports_multiple_column_in?() click to toggle source

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

    # File lib/sequel/adapters/shared/access.rb
211 def supports_multiple_column_in?
212   false
213 end
truncate() click to toggle source

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

    # File lib/sequel/adapters/shared/access.rb
216 def truncate
217   delete
218   nil
219 end

Private Instance Methods

literal_date(d) click to toggle source

Access uses # to quote dates

    # File lib/sequel/adapters/shared/access.rb
224 def literal_date(d)
225   d.strftime('#%Y-%m-%d#')
226 end
literal_datetime(t) click to toggle source

Access uses # to quote datetimes

    # File lib/sequel/adapters/shared/access.rb
229 def literal_datetime(t)
230   t.strftime('#%Y-%m-%d %H:%M:%S#')
231 end
Also aliased as: literal_time
literal_false() click to toggle source

Use 0 for false on MSSQL

    # File lib/sequel/adapters/shared/access.rb
235 def literal_false
236   '0'
237 end
literal_time(t)
Alias for: literal_datetime
literal_true() click to toggle source

Use -1 for true on MSSQL

    # File lib/sequel/adapters/shared/access.rb
240 def literal_true
241   '-1'
242 end
native_function_name(emulated_function) click to toggle source

Emulate the char_length function with len

Calls superclass method
    # File lib/sequel/adapters/shared/access.rb
245 def native_function_name(emulated_function)
246   if emulated_function == :char_length
247     'len'
248   else
249     super
250   end
251 end
requires_emulating_nulls_first?() click to toggle source

Access does not natively support NULLS FIRST/LAST.

    # File lib/sequel/adapters/shared/access.rb
254 def requires_emulating_nulls_first?
255   true
256 end
requires_like_escape?() click to toggle source

Access doesn’t support ESCAPE for LIKE.

    # File lib/sequel/adapters/shared/access.rb
259 def requires_like_escape?
260   false
261 end
select_from_sql(sql) click to toggle source

Access requires parentheses when joining more than one table

    # File lib/sequel/adapters/shared/access.rb
264 def select_from_sql(sql)
265   if f = @opts[:from]
266     sql << ' FROM '
267     if (j = @opts[:join]) && !j.empty?
268       sql << ('(' * j.length)
269     end
270     source_list_append(sql, f)
271   end
272 end
select_into_sql(sql) click to toggle source
    # File lib/sequel/adapters/shared/access.rb
274 def select_into_sql(sql)
275   if i = @opts[:into]
276     sql << " INTO "
277     identifier_append(sql, i)
278   end
279 end
select_join_sql(sql) click to toggle source

Access requires parentheses when joining more than one table

    # File lib/sequel/adapters/shared/access.rb
282 def select_join_sql(sql)
283   if js = @opts[:join]
284     js.each do |j|
285       literal_append(sql, j)
286       sql << ')'
287     end
288   end
289 end
select_limit_sql(sql) click to toggle source

Access uses TOP for limits

    # File lib/sequel/adapters/shared/access.rb
292 def select_limit_sql(sql)
293   if l = @opts[:limit]
294     sql << " TOP "
295     literal_append(sql, l)
296   end
297 end