module Sequel::Access::DatasetMethods
Constants
- CAST_TYPES
- EXTRACT_MAP
- OPS
Public Instance Methods
Source
# 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
Access
doesn’t support CASE, so emulate it with nested IIF function calls.
Source
# 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
Access
doesn’t support CAST, it uses separate functions for type conversion
Source
# 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
Source
# 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
Use Date(), Now(), and Time() for CURRENT_DATE, CURRENT_TIMESTAMP, and CURRENT_TIME
Source
# File lib/sequel/adapters/shared/access.rb 171 def cross_join(table) 172 clone(:from=>@opts[:from] + [table]) 173 end
Emulate cross join by using multiple tables in the FROM clause.
Source
# File lib/sequel/adapters/shared/access.rb 176 def escape_like(string) 177 string.gsub(/[\\*#?\[]/){|m| "[#{m}]"} 178 end
Access
uses [] to escape metacharacters, instead of backslashes.
Source
# File lib/sequel/adapters/shared/access.rb 181 def into(table) 182 clone(:into => table) 183 end
Specify a table for a SELECT … INTO query.
Source
# File lib/sequel/adapters/shared/access.rb 187 def quoted_identifier_append(sql, v) 188 sql << '[' << v.to_s << ']' 189 end
Access
uses [] for quoting identifiers, and can’t handle ] inside identifiers.
Source
# File lib/sequel/adapters/shared/access.rb 192 def supports_derived_column_lists? 193 false 194 end
Access
does not support derived column lists.
Source
# File lib/sequel/adapters/shared/access.rb 197 def supports_intersect_except? 198 false 199 end
Access
doesn’t support INTERSECT or EXCEPT
Source
# File lib/sequel/adapters/shared/access.rb 202 def supports_is_true? 203 false 204 end
Access
does not support IS TRUE
Source
# File lib/sequel/adapters/shared/access.rb 207 def supports_join_using? 208 false 209 end
Access
doesn’t support JOIN USING
Source
# File lib/sequel/adapters/shared/access.rb 212 def supports_multiple_column_in? 213 false 214 end
Access
does not support multiple columns for the IN/NOT IN operators
Source
# File lib/sequel/adapters/shared/access.rb 217 def truncate 218 delete 219 nil 220 end
Access
doesn’t support truncate, so do a delete instead.
Private Instance Methods
Source
# File lib/sequel/adapters/shared/access.rb 225 def literal_date(d) 226 d.strftime('#%Y-%m-%d#') 227 end
Access
uses # to quote dates
Source
# File lib/sequel/adapters/shared/access.rb 230 def literal_datetime(t) 231 t.strftime('#%Y-%m-%d %H:%M:%S#') 232 end
Access
uses # to quote datetimes
Source
# File lib/sequel/adapters/shared/access.rb 236 def literal_false 237 '0' 238 end
Use 0 for false on MSSQL
Source
# File lib/sequel/adapters/shared/access.rb 241 def literal_true 242 '-1' 243 end
Use -1 for true on MSSQL
Source
# 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
Emulate the char_length function with len
Source
# File lib/sequel/adapters/shared/access.rb 255 def requires_emulating_nulls_first? 256 true 257 end
Access
does not natively support NULLS FIRST/LAST.
Source
# File lib/sequel/adapters/shared/access.rb 260 def requires_like_escape? 261 false 262 end
Access
doesn’t support ESCAPE for LIKE.
Source
# 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
Access
requires parentheses when joining more than one table
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
Source
# 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
Access
requires parentheses when joining more than one table
Source
# 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
Access
uses TOP for limits