Module | Sequel::Access |
In: |
lib/sequel/adapters/shared/access.rb
|
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 |
Access doesn‘t support CASE, so emulate it with nested IIF function calls.
# 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
# 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
# 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.
# File lib/sequel/adapters/shared/access.rb, line 166 166: def cross_join(table) 167: clone(:from=>@opts[:from] + [table]) 168: end
Specify a table for a SELECT … INTO query.
# File lib/sequel/adapters/shared/access.rb, line 176 176: def into(table) 177: clone(:into => table) 178: end