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
104 def case_expression_sql_append(sql, ce)
105   literal_append(sql, ce.with_merged_expression.conditions.reverse.inject(ce.default){|exp,(cond,val)| Sequel::SQL::Function.new(:IIF, cond, val, exp)})
106 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
110 def cast_sql_append(sql, expr, type)
111   sql << CAST_TYPES.fetch(type, type).to_s
112   sql << '('
113   literal_append(sql, expr)
114   sql << ')'
115 end
complex_expression_sql_append(sql, op, args) click to toggle source
Calls superclass method
    # File lib/sequel/adapters/shared/access.rb
117 def complex_expression_sql_append(sql, op, args)
118   case op
119   when :ILIKE
120     complex_expression_sql_append(sql, :LIKE, args)
121   when :'NOT ILIKE'
122     complex_expression_sql_append(sql, :'NOT LIKE', args)
123   when :'!='
124     sql << '('
125     literal_append(sql, args[0])
126     sql << ' <> '
127     literal_append(sql, args[1])
128     sql << ')'
129   when :'%', :'||'
130     sql << '('
131     c = false
132     op_str = OPS[op]
133     args.each do |a|
134       sql << op_str if c
135       literal_append(sql, a)
136       c ||= true
137     end
138     sql << ')'
139   when :**
140     sql << '('
141     literal_append(sql, args[0])
142     sql << ' ^ '
143     literal_append(sql, args[1])
144     sql << ')'
145   when :extract
146     part = args[0]
147     raise(Sequel::Error, "unsupported extract argument: #{part.inspect}") unless format = EXTRACT_MAP[part]
148     sql << "datepart(" << format.to_s << ', '
149     literal_append(sql, args[1])
150     sql << ')'
151   else
152     super
153   end
154 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
157 def constant_sql_append(sql, constant)
158   case constant
159   when :CURRENT_DATE
160     sql << 'Date()'
161   when :CURRENT_TIMESTAMP
162     sql << 'Now()'
163   when :CURRENT_TIME
164     sql << 'Time()'
165   else
166     super
167   end
168 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
171 def cross_join(table)
172   clone(:from=>@opts[:from] + [table])
173 end
escape_like(string) click to toggle source

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

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

Specify a table for a SELECT … INTO query.

    # File lib/sequel/adapters/shared/access.rb
181 def into(table)
182   clone(:into => table)
183 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
187 def quoted_identifier_append(sql, v)
188   sql << '[' << v.to_s << ']'
189 end
supports_derived_column_lists?() click to toggle source

Access does not support derived column lists.

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

Access doesn’t support INTERSECT or EXCEPT

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

Access does not support IS TRUE

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

Access doesn’t support JOIN USING

    # File lib/sequel/adapters/shared/access.rb
207 def supports_join_using?
208   false
209 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
212 def supports_multiple_column_in?
213   false
214 end
truncate() click to toggle source

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

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

Private Instance Methods

literal_date(d) click to toggle source

Access uses # to quote dates

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

Access uses # to quote datetimes

    # File lib/sequel/adapters/shared/access.rb
230 def literal_datetime(t)
231   t.strftime('#%Y-%m-%d %H:%M:%S#')
232 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
236 def literal_false
237   '0'
238 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
241 def literal_true
242   '-1'
243 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
246 def native_function_name(emulated_function)
247   if emulated_function == :char_length
248     'len'
249   else
250     super
251   end
252 end
requires_emulating_nulls_first?() click to toggle source

Access does not natively support NULLS FIRST/LAST.

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

Access doesn’t support ESCAPE for LIKE.

    # File lib/sequel/adapters/shared/access.rb
260 def requires_like_escape?
261   false
262 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
265 def select_from_sql(sql)
266   if f = @opts[:from]
267     sql << ' FROM '
268     if (j = @opts[:join]) && !j.empty?
269       sql << ('(' * j.length)
270     end
271     source_list_append(sql, f)
272   end
273 end
select_into_sql(sql) click to toggle source
    # File lib/sequel/adapters/shared/access.rb
275 def select_into_sql(sql)
276   if i = @opts[:into]
277     sql << " INTO "
278     identifier_append(sql, i)
279   end
280 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
283 def select_join_sql(sql)
284   if js = @opts[:join]
285     js.each do |j|
286       literal_append(sql, j)
287       sql << ')'
288     end
289   end
290 end
select_limit_sql(sql) click to toggle source

Access uses TOP for limits

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