Module: Sequel::DB2::DatasetMethods

Includes:
EmulateOffsetWithRowNumber
Included in:
Dataset, 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

#select_sql

Instance Method Details

#cast_sql_append(sql, expr, type) ⇒ Object

DB2 casts strings using RTRIM and CHAR instead of VARCHAR.



224
225
226
227
228
229
230
231
232
# File 'lib/sequel/adapters/shared/db2.rb', line 224

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

Handle DB2 specific LIKE and bitwise operator support, and emulate the extract method, which DB2 doesn’t natively support.



236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
# File 'lib/sequel/adapters/shared/db2.rb', line 236

def complex_expression_sql_append(sql, op, args)
  case op
  when :ILIKE
    super(sql, :LIKE, [SQL::Function.new(:upper, args.at(0)), SQL::Function.new(:upper, args.at(1)) ])
  when :"NOT ILIKE"
    super(sql, :"NOT LIKE", [SQL::Function.new(:upper, args.at(0)), SQL::Function.new(:upper, args.at(1)) ])
  when :&, :|, :^
    # works with db2 v9.5 and after
    op = BITWISE_METHOD_MAP[op]
    sql << complex_expression_arg_pairs(args){|a, b| literal(SQL::Function.new(op, a, b))}
  when :<<
    sql << complex_expression_arg_pairs(args){|a, b| "(#{literal(a)} * POWER(2, #{literal(b)}))"}
  when :>>
    sql << complex_expression_arg_pairs(args){|a, b| "(#{literal(a)} / POWER(2, #{literal(b)}))"}
  when :%
    sql << complex_expression_arg_pairs(args){|a, b| "MOD(#{literal(a)}, #{literal(b)})"}
  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_group_cube?Boolean

DB2 supports GROUP BY CUBE

Returns:

  • (Boolean)


265
266
267
# File 'lib/sequel/adapters/shared/db2.rb', line 265

def supports_group_cube?
  true
end

#supports_group_rollup?Boolean

DB2 supports GROUP BY ROLLUP

Returns:

  • (Boolean)


270
271
272
# File 'lib/sequel/adapters/shared/db2.rb', line 270

def supports_group_rollup?
  true
end

#supports_is_true?Boolean

DB2 does not support IS TRUE.

Returns:

  • (Boolean)


275
276
277
# File 'lib/sequel/adapters/shared/db2.rb', line 275

def supports_is_true?
  false
end

#supports_multiple_column_in?Boolean

DB2 does not support multiple columns in IN.

Returns:

  • (Boolean)


280
281
282
# File 'lib/sequel/adapters/shared/db2.rb', line 280

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)


285
286
287
# File 'lib/sequel/adapters/shared/db2.rb', line 285

def supports_select_all_and_column?
  false
end

#supports_timestamp_usecs?Boolean

DB2 does not support fractional seconds in timestamps.

Returns:

  • (Boolean)


290
291
292
# File 'lib/sequel/adapters/shared/db2.rb', line 290

def supports_timestamp_usecs?
  false
end

#supports_where_true?Boolean

DB2 does not support WHERE 1.

Returns:

  • (Boolean)


300
301
302
# File 'lib/sequel/adapters/shared/db2.rb', line 300

def supports_where_true?
  false
end

#supports_window_functions?Boolean

DB2 supports window functions

Returns:

  • (Boolean)


295
296
297
# File 'lib/sequel/adapters/shared/db2.rb', line 295

def supports_window_functions?
  true
end