Module: Sequel::DB2::DatasetMethods

Includes:
EmulateOffsetWithRowNumber
Included in:
IBMDB::Dataset, JDBC::DB2::Dataset
Defined in:
lib/sequel/adapters/shared/db2.rb

Constant Summary collapse

PAREN_CLOSE =
Dataset::PAREN_CLOSE
PAREN_OPEN =
Dataset::PAREN_OPEN
BITWISE_METHOD_MAP =
{:& =>:BITAND, :| => :BITOR, :^ => :BITXOR, :'B~'=>:BITNOT}
EMULATED_FUNCTION_MAP =
{:char_length=>'length'.freeze}
BOOL_TRUE =
'1'.freeze
BOOL_FALSE =
'0'.freeze
CAST_STRING_OPEN =
"RTRIM(CHAR(".freeze
CAST_STRING_CLOSE =
"))".freeze
FETCH_FIRST_ROW_ONLY =
" FETCH FIRST ROW ONLY".freeze
FETCH_FIRST =
" FETCH FIRST ".freeze
ROWS_ONLY =
" ROWS ONLY".freeze
EMPTY_FROM_TABLE =
' FROM "SYSIBM"."SYSDUMMY1"'.freeze
HSTAR =
"H*".freeze
BLOB_OPEN =
"BLOB(X'".freeze
BLOB_CLOSE =
"')".freeze

Instance Method Summary collapse

Methods included from EmulateOffsetWithRowNumber

#empty?, #select_sql, #supports_offsets_in_correlated_subqueries?

Instance Method Details

#cast_sql_append(sql, expr, type) ⇒ Object

DB2 casts strings using RTRIM and CHAR instead of VARCHAR.



290
291
292
293
294
295
296
297
298
# File 'lib/sequel/adapters/shared/db2.rb', line 290

def cast_sql_append(sql, expr, type)
  if(type == String)
    sql << CAST_STRING_OPEN
    literal_append(sql, expr)
    sql << CAST_STRING_CLOSE
  else
    super
  end
end

#complex_expression_sql_append(sql, op, args) ⇒ Object



300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
# File 'lib/sequel/adapters/shared/db2.rb', line 300

def complex_expression_sql_append(sql, op, args)
  case op
  when :&, :|, :^, :%, :<<, :>>
    complex_expression_emulate_append(sql, op, args)
  when :'B~'
    literal_append(sql, SQL::Function.new(:BITNOT, *args))
  when :extract
    sql << args.at(0).to_s
    sql << PAREN_OPEN
    literal_append(sql, args.at(1))
    sql << PAREN_CLOSE
  else
    super
  end
end

#supports_cte?(type = :select) ⇒ Boolean

Returns:

  • (Boolean)


316
317
318
# File 'lib/sequel/adapters/shared/db2.rb', line 316

def supports_cte?(type=:select)
  type == :select
end

#supports_group_cube?Boolean

DB2 supports GROUP BY CUBE

Returns:

  • (Boolean)


321
322
323
# File 'lib/sequel/adapters/shared/db2.rb', line 321

def supports_group_cube?
  true
end

#supports_group_rollup?Boolean

DB2 supports GROUP BY ROLLUP

Returns:

  • (Boolean)


326
327
328
# File 'lib/sequel/adapters/shared/db2.rb', line 326

def supports_group_rollup?
  true
end

#supports_grouping_sets?Boolean

DB2 supports GROUPING SETS

Returns:

  • (Boolean)


331
332
333
# File 'lib/sequel/adapters/shared/db2.rb', line 331

def supports_grouping_sets?
  true
end

#supports_is_true?Boolean

DB2 does not support IS TRUE.

Returns:

  • (Boolean)


336
337
338
# File 'lib/sequel/adapters/shared/db2.rb', line 336

def supports_is_true?
  false
end

#supports_lateral_subqueries?Boolean

DB2 supports lateral subqueries

Returns:

  • (Boolean)


341
342
343
# File 'lib/sequel/adapters/shared/db2.rb', line 341

def supports_lateral_subqueries?
  true
end

#supports_multiple_column_in?Boolean

DB2 does not support multiple columns in IN.

Returns:

  • (Boolean)


346
347
348
# File 'lib/sequel/adapters/shared/db2.rb', line 346

def supports_multiple_column_in?
  false
end

#supports_select_all_and_column?Boolean

DB2 only allows * in SELECT if it is the only thing being selected.

Returns:

  • (Boolean)


351
352
353
# File 'lib/sequel/adapters/shared/db2.rb', line 351

def supports_select_all_and_column?
  false
end

#supports_timestamp_usecs?Boolean

DB2 does not support fractional seconds in timestamps.

Returns:

  • (Boolean)


356
357
358
# File 'lib/sequel/adapters/shared/db2.rb', line 356

def supports_timestamp_usecs?
  false
end

#supports_where_true?Boolean

DB2 does not support WHERE 1.

Returns:

  • (Boolean)


366
367
368
# File 'lib/sequel/adapters/shared/db2.rb', line 366

def supports_where_true?
  false
end

#supports_window_functions?Boolean

DB2 supports window functions

Returns:

  • (Boolean)


361
362
363
# File 'lib/sequel/adapters/shared/db2.rb', line 361

def supports_window_functions?
  true
end