| 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 '!=''!='
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, line 146
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, line 160
160: def cross_join(table)
161: clone(:from=>@opts[:from] + [table])
162: end
Specify a table for a SELECT … INTO query.
# File lib/sequel/adapters/shared/access.rb, line 170
170: def into(table)
171: clone(:into => table)
172: end