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

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

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

Specify a table for a SELECT … INTO query.

    # File lib/sequel/adapters/shared/access.rb
170 def into(table)
171   clone(:into => table)
172 end
supports_derived_column_lists?() click to toggle source

Access does not support derived column lists.

    # File lib/sequel/adapters/shared/access.rb
175 def supports_derived_column_lists?
176   false
177 end
supports_intersect_except?() click to toggle source

Access doesn't support INTERSECT or EXCEPT

    # File lib/sequel/adapters/shared/access.rb
180 def supports_intersect_except?
181   false
182 end
supports_is_true?() click to toggle source

Access does not support IS TRUE

    # File lib/sequel/adapters/shared/access.rb
185 def supports_is_true?
186   false
187 end
supports_join_using?() click to toggle source

Access doesn't support JOIN USING

    # File lib/sequel/adapters/shared/access.rb
190 def supports_join_using?
191   false
192 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
195 def supports_multiple_column_in?
196   false
197 end
truncate() click to toggle source

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

    # File lib/sequel/adapters/shared/access.rb
200 def truncate
201   delete
202   nil
203 end

Private Instance Methods

literal_date(d) click to toggle source

Access uses # to quote dates

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

Access uses # to quote datetimes

    # File lib/sequel/adapters/shared/access.rb
213 def literal_datetime(t)
214   t.strftime('#%Y-%m-%d %H:%M:%S#')
215 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
219 def literal_false
220   '0'
221 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
224 def literal_true
225   '-1'
226 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
229 def native_function_name(emulated_function)
230   if emulated_function == :char_length
231     'len'
232   else
233     super
234   end
235 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
285 def quoted_identifier_append(sql, v)
286   sql << '[' << v.to_s << ']'
287 end
requires_emulating_nulls_first?() click to toggle source

Access does not natively support NULLS FIRST/LAST.

    # File lib/sequel/adapters/shared/access.rb
238 def requires_emulating_nulls_first?
239   true
240 end
requires_like_escape?() click to toggle source

Access doesn't support ESCAPE for LIKE.

    # File lib/sequel/adapters/shared/access.rb
243 def requires_like_escape?
244   false
245 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
248 def select_from_sql(sql)
249   if f = @opts[:from]
250     sql << ' FROM '
251     if (j = @opts[:join]) && !j.empty?
252       sql << ('(' * j.length)
253     end
254     source_list_append(sql, f)
255   end
256 end
select_into_sql(sql) click to toggle source
    # File lib/sequel/adapters/shared/access.rb
258 def select_into_sql(sql)
259   if i = @opts[:into]
260     sql << " INTO "
261     identifier_append(sql, i)
262   end
263 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
266 def select_join_sql(sql)
267   if js = @opts[:join]
268     js.each do |j|
269       literal_append(sql, j)
270       sql << ')'
271     end
272   end
273 end
select_limit_sql(sql) click to toggle source

Access uses TOP for limits

    # File lib/sequel/adapters/shared/access.rb
276 def select_limit_sql(sql)
277   if l = @opts[:limit]
278     sql << " TOP "
279     literal_append(sql, l)
280   end
281 end