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
-
#cast_sql_append(sql, expr, type) ⇒ Object
DB2 casts strings using RTRIM and CHAR instead of VARCHAR.
-
#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.
-
#supports_group_cube? ⇒ Boolean
DB2 supports GROUP BY CUBE.
-
#supports_group_rollup? ⇒ Boolean
DB2 supports GROUP BY ROLLUP.
-
#supports_is_true? ⇒ Boolean
DB2 does not support IS TRUE.
-
#supports_multiple_column_in? ⇒ Boolean
DB2 does not support multiple columns in IN.
-
#supports_select_all_and_column? ⇒ Boolean
DB2 only allows * in SELECT if it is the only thing being selected.
-
#supports_timestamp_usecs? ⇒ Boolean
DB2 does not support fractional seconds in timestamps.
-
#supports_where_true? ⇒ Boolean
DB2 does not support WHERE 1.
-
#supports_window_functions? ⇒ Boolean
DB2 supports window functions.
Methods included from EmulateOffsetWithRowNumber
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
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
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.
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.
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.
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.
290 291 292 |
# File 'lib/sequel/adapters/shared/db2.rb', line 290 def false end |
#supports_where_true? ⇒ Boolean
DB2 does not support WHERE 1.
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
295 296 297 |
# File 'lib/sequel/adapters/shared/db2.rb', line 295 def supports_window_functions? true end |