| Module | Sequel::SqlAnywhere::DatasetMethods |
| In: |
lib/sequel/adapters/shared/sqlanywhere.rb
|
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 288
288: def complex_expression_sql_append(sql, op, args)
289: case op
290: when '||''||'
291: super(sql, :+, args)
292: when :<<, :>>
293: complex_expression_emulate_append(sql, op, args)
294: when :LIKE, "NOT LIKE""NOT LIKE"
295: sql << '('
296: literal_append(sql, args[0])
297: sql << (op == :LIKE ? ' REGEXP ' : ' NOT REGEXP ')
298: pattern = String.new
299: last_c = ''
300: args[1].each_char do |c|
301: if c == '_' and not pattern.end_with?('\\') and last_c != '\\'
302: pattern << '.'
303: elsif c == '%' and not pattern.end_with?('\\') and last_c != '\\'
304: pattern << '.*'
305: elsif c == '[' and not pattern.end_with?('\\') and last_c != '\\'
306: pattern << '\['
307: elsif c == ']' and not pattern.end_with?('\\') and last_c != '\\'
308: pattern << '\]'
309: elsif c == '*' and not pattern.end_with?('\\') and last_c != '\\'
310: pattern << '\*'
311: elsif c == '?' and not pattern.end_with?('\\') and last_c != '\\'
312: pattern << '\?'
313: else
314: pattern << c
315: end
316: if c == '\\' and last_c == '\\'
317: last_c = ''
318: else
319: last_c = c
320: end
321: end
322: literal_append(sql, pattern)
323: sql << " ESCAPE "
324: literal_append(sql, "\\")
325: sql << ')'
326: when :ILIKE, "NOT ILIKE""NOT ILIKE"
327: super(sql, (op == :ILIKE ? :LIKE : "NOT LIKE""NOT LIKE"), args)
328: when :extract
329: sql << 'datepart('
330: literal_append(sql, args[0])
331: sql << ','
332: literal_append(sql, args[1])
333: sql << ')'
334: else
335: super
336: end
337: end
Use today() for CURRENT_DATE and now() for CURRENT_TIMESTAMP and CURRENT_TIME
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 345
345: def constant_sql_append(sql, constant)
346: case constant
347: when :CURRENT_DATE
348: sql << 'today()'
349: when :CURRENT_TIMESTAMP, :CURRENT_TIME
350: sql << 'now()'
351: else
352: super
353: end
354: end
Whether to convert smallint to boolean arguments for this dataset. Defaults to the IBMDB module setting.
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 240
240: def convert_smallint_to_bool
241: opts.has_key?(:convert_smallint_to_bool) ? opts[:convert_smallint_to_bool] : db.convert_smallint_to_bool
242: end
SqlAnywhere uses \ to escape metacharacters, but a ’]’ should not be escaped
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 340
340: def escape_like(string)
341: string.gsub(/[\\%_\[]/){|m| "\\#{m}"}
342: end
Specify a table for a SELECT … INTO query.
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 357
357: def into(table)
358: clone(:into => table)
359: end
SqlAnywhere requires recursive CTEs to have column aliases.
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 284
284: def recursive_cte_requires_column_aliases?
285: true
286: end
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 249
249: def supports_cte?(type=:select)
250: type == :select
251: end
SQLAnywhere supports GROUPING SETS
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 254
254: def supports_grouping_sets?
255: true
256: end
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 266
266: def supports_is_true?
267: false
268: end
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 270
270: def supports_join_using?
271: false
272: end
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 258
258: def supports_multiple_column_in?
259: false
260: end
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 274
274: def supports_timestamp_usecs?
275: false
276: end
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 262
262: def supports_where_true?
263: false
264: end
Return a cloned dataset with the convert_smallint_to_bool option set.
# File lib/sequel/adapters/shared/sqlanywhere.rb, line 245
245: def with_convert_smallint_to_bool(v)
246: clone(:convert_smallint_to_bool=>v)
247: end