Methods
Public Instance
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
Access doesn’t support CASE, so emulate it with nested IIF function calls.
# 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
Access doesn’t support CAST, it uses separate functions for type conversion
# 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
# 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
Use Date(), Now(), and Time() for CURRENT_DATE, CURRENT_TIMESTAMP, and CURRENT_TIME
# 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
Emulate cross join by using multiple tables in the FROM clause.
# File lib/sequel/adapters/shared/access.rb 173 def cross_join(table) 174 clone(:from=>@opts[:from] + [table]) 175 end
Access uses [] to escape metacharacters, instead of backslashes.
# File lib/sequel/adapters/shared/access.rb 178 def escape_like(string) 179 string.gsub(/[\\*#?\[]/){|m| "[#{m}]"} 180 end
Specify a table for a SELECT … INTO query.
# File lib/sequel/adapters/shared/access.rb 183 def into(table) 184 clone(:into => table) 185 end
Access uses [] for quoting identifiers, and can’t handle ] inside identifiers.
# 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
Access does not support derived column lists.
# File lib/sequel/adapters/shared/access.rb 196 def supports_derived_column_lists? 197 false 198 end
Access doesn’t support INTERSECT or EXCEPT
# File lib/sequel/adapters/shared/access.rb 201 def supports_intersect_except? 202 false 203 end
Access does not support IS TRUE
# File lib/sequel/adapters/shared/access.rb 206 def supports_is_true? 207 false 208 end
Access doesn’t support JOIN USING
# File lib/sequel/adapters/shared/access.rb 211 def supports_join_using? 212 false 213 end
Access does not support multiple columns for the IN/NOT IN operators
# File lib/sequel/adapters/shared/access.rb 216 def supports_multiple_column_in? 217 false 218 end
Access doesn’t support truncate, so do a delete instead.
# File lib/sequel/adapters/shared/access.rb 221 def truncate 222 delete 223 nil 224 end