module Sequel::Access::DatasetMethods
Constants
- CAST_TYPES
- EXTRACT_MAP
- OPS
Public Instance Methods
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
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
# 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
Use Date(), Now(), and Time() for CURRENT_DATE, CURRENT_TIMESTAMP, and CURRENT_TIME
# 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
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
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
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
Access
does not support derived column lists.
# File lib/sequel/adapters/shared/access.rb 175 def supports_derived_column_lists? 176 false 177 end
Access
doesn't support INTERSECT or EXCEPT
# File lib/sequel/adapters/shared/access.rb 180 def supports_intersect_except? 181 false 182 end
Access
does not support IS TRUE
# File lib/sequel/adapters/shared/access.rb 185 def supports_is_true? 186 false 187 end
Access
doesn't support JOIN USING
# File lib/sequel/adapters/shared/access.rb 190 def supports_join_using? 191 false 192 end
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
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
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
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
Use 0 for false on MSSQL
# File lib/sequel/adapters/shared/access.rb 219 def literal_false 220 '0' 221 end
Use -1 for true on MSSQL
# File lib/sequel/adapters/shared/access.rb 224 def literal_true 225 '-1' 226 end
Emulate the char_length function with len
# 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
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
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
Access
doesn't support ESCAPE for LIKE.
# File lib/sequel/adapters/shared/access.rb 243 def requires_like_escape? 244 false 245 end
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
# 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
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
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