Module Sequel::Access
In: lib/sequel/adapters/shared/access.rb

Methods

Included Modules

EmulateOffsetWithReverseAndCount UnmodifiedIdentifiers::DatasetMethods

Classes and Modules

Module Sequel::Access::DatabaseMethods
Module Sequel::Access::DatasetMethods

Constants

EXTRACT_MAP = {:year=>"'yyyy'", :month=>"'m'", :day=>"'d'", :hour=>"'h'", :minute=>"'n'", :second=>"'s'"}.freeze
OPS = {:'%'=>' Mod '.freeze, :'||'=>' & '.freeze}.freeze
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

Public Instance methods

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

[Source]

    # File lib/sequel/adapters/shared/access.rb, line 93
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

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

[Source]

     # File lib/sequel/adapters/shared/access.rb, line 99
 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

[Source]

     # File lib/sequel/adapters/shared/access.rb, line 106
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''NOT ILIKE'
111:           complex_expression_sql_append(sql, 'NOT LIKE''NOT LIKE', args)
112:         when :LIKE, 'NOT LIKE''NOT LIKE'
113:           sql << '('
114:           literal_append(sql, args[0])
115:           sql << ' ' << op.to_s << ' '
116:           literal_append(sql, args[1])
117:           sql << ')'
118:         when '!=''!='
119:           sql << '('
120:           literal_append(sql, args[0])
121:           sql << ' <> '
122:           literal_append(sql, args[1])
123:           sql << ')'
124:         when '%''%', '||''||'
125:           sql << '('
126:           c = false
127:           op_str = OPS[op]
128:           args.each do |a|
129:             sql << op_str if c
130:             literal_append(sql, a)
131:             c ||= true
132:           end
133:           sql << ')'
134:         when :**
135:           sql << '('
136:           literal_append(sql, args[0])
137:           sql << ' ^ '
138:           literal_append(sql, args[1])
139:           sql << ')'
140:         when :extract
141:           part = args[0]
142:           raise(Sequel::Error, "unsupported extract argument: #{part.inspect}") unless format = EXTRACT_MAP[part]
143:           sql << "datepart(" << format.to_s << ', '
144:           literal_append(sql, args[1])
145:           sql << ')'
146:         else
147:           super
148:         end
149:       end

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

[Source]

     # File lib/sequel/adapters/shared/access.rb, line 152
152:       def constant_sql_append(sql, constant)
153:         case constant
154:         when :CURRENT_DATE
155:           sql << 'Date()'
156:         when :CURRENT_TIMESTAMP
157:           sql << 'Now()'
158:         when :CURRENT_TIME
159:           sql << 'Time()'
160:         else
161:           super
162:         end
163:       end

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

[Source]

     # File lib/sequel/adapters/shared/access.rb, line 166
166:       def cross_join(table)
167:         clone(:from=>@opts[:from] + [table])
168:       end

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

[Source]

     # File lib/sequel/adapters/shared/access.rb, line 171
171:       def escape_like(string)
172:         string.gsub(/[\\*#?\[]/){|m| "[#{m}]"}
173:       end

Specify a table for a SELECT … INTO query.

[Source]

     # File lib/sequel/adapters/shared/access.rb, line 176
176:       def into(table)
177:         clone(:into => table)
178:       end

Access does not support derived column lists.

[Source]

     # File lib/sequel/adapters/shared/access.rb, line 181
181:       def supports_derived_column_lists?
182:         false
183:       end

Access doesn‘t support INTERSECT or EXCEPT

[Source]

     # File lib/sequel/adapters/shared/access.rb, line 186
186:       def supports_intersect_except?
187:         false
188:       end

Access does not support IS TRUE

[Source]

     # File lib/sequel/adapters/shared/access.rb, line 191
191:       def supports_is_true?
192:         false
193:       end

Access doesn‘t support JOIN USING

[Source]

     # File lib/sequel/adapters/shared/access.rb, line 196
196:       def supports_join_using?
197:         false
198:       end

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

[Source]

     # File lib/sequel/adapters/shared/access.rb, line 201
201:       def supports_multiple_column_in?
202:         false
203:       end

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

[Source]

     # File lib/sequel/adapters/shared/access.rb, line 206
206:       def truncate
207:         delete
208:         nil
209:       end

[Validate]