Module Sequel::Oracle
In: lib/sequel/adapters/shared/oracle.rb
lib/sequel/adapters/oracle.rb

Methods

Classes and Modules

Module Sequel::Oracle::DatabaseMethods
Module Sequel::Oracle::DatasetMethods
Class Sequel::Oracle::Database
Class Sequel::Oracle::Dataset

Public Instance methods

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 289
289:       def complex_expression_sql_append(sql, op, args)
290:         case op
291:         when :&
292:           complex_expression_arg_pairs_append(sql, args, &BITAND_PROC)
293:         when :|
294:           complex_expression_arg_pairs_append(sql, args){|a, b| Sequel.lit(["(", " - ", " + ", ")"], a, complex_expression_arg_pairs([a, b], &BITAND_PROC), b)}
295:         when :^
296:           complex_expression_arg_pairs_append(sql, args) do |*x|
297:             s1 = complex_expression_arg_pairs(x){|a, b| Sequel.lit(["(", " - ", " + ", ")"], a, complex_expression_arg_pairs([a, b], &BITAND_PROC), b)}
298:             s2 = complex_expression_arg_pairs(x, &BITAND_PROC)
299:             Sequel.lit(["(", " - ", ")"], s1, s2)
300:           end
301:         when :%, :<<, :>>, 'B~''B~'
302:           complex_expression_emulate_append(sql, op, args)
303:         else
304:           super
305:         end
306:       end

Oracle doesn‘t support CURRENT_TIME, as it doesn‘t have a type for storing just time values without a date, so use CURRENT_TIMESTAMP in its place.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 311
311:       def constant_sql_append(sql, c)
312:         if c == :CURRENT_TIME
313:           super(sql, :CURRENT_TIMESTAMP)
314:         else
315:           super
316:         end
317:       end

Use a custom expression with EXISTS to determine whether a dataset is empty.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 327
327:       def empty?
328:         db[:dual].where(@opts[:offset] ? exists : unordered.exists).get(1) == nil
329:       end

Oracle uses MINUS instead of EXCEPT, and doesn‘t support EXCEPT ALL

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 320
320:       def except(dataset, opts=OPTS)
321:         raise(Sequel::Error, "EXCEPT ALL not supported") if opts[:all]
322:         compound_clone(:minus, dataset, opts)
323:       end

Oracle requires recursive CTEs to have column aliases.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 375
375:       def recursive_cte_requires_column_aliases?
376:         true
377:       end

Oracle requires SQL standard datetimes

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 332
332:       def requires_sql_standard_datetimes?
333:         true
334:       end

Handle LIMIT by using a unlimited subselect filtered with ROWNUM.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 344
344:       def select_sql
345:         return super if @opts[:sql]
346:         if o = @opts[:offset]
347:           columns = clone(:append_sql=>'', :placeholder_literal_null=>true).columns
348:           dsa1 = dataset_alias(1)
349:           rn = row_number_column
350:           limit = @opts[:limit]
351:           ds = unlimited.
352:             from_self(:alias=>dsa1).
353:             select_append(ROW_NUMBER_EXPRESSION.as(rn)).
354:             from_self(:alias=>dsa1).
355:             select(*columns).
356:             where(SQL::Identifier.new(rn) > o)
357:           ds = ds.where(SQL::Identifier.new(rn) <= Sequel.+(o, limit)) if limit
358:           sql = @opts[:append_sql] || ''
359:           subselect_sql_append(sql, ds)
360:           sql
361:         elsif limit = @opts[:limit]
362:           ds = clone(:limit=>nil)
363:           # Lock doesn't work in subselects, so don't use a subselect when locking.
364:           # Don't use a subselect if custom SQL is used, as it breaks somethings.
365:           ds = ds.from_self unless @opts[:lock]
366:           sql = @opts[:append_sql] || ''
367:           subselect_sql_append(sql, ds.where(SQL::ComplexExpression.new(:<=, ROW_NUMBER_EXPRESSION, limit)))
368:           sql
369:         else
370:           super
371:         end
372:       end

Create a copy of this dataset associated to the given sequence name, which will be used when calling insert to find the most recently inserted value for the sequence.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 339
339:       def sequence(s)
340:         clone(:sequence=>s)
341:       end

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 379
379:       def supports_cte?(type=:select)
380:         type == :select
381:       end

Oracle does not support derived column lists

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 384
384:       def supports_derived_column_lists?
385:         false
386:       end

Oracle supports GROUP BY CUBE

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 389
389:       def supports_group_cube?
390:         true
391:       end

Oracle supports GROUP BY ROLLUP

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 394
394:       def supports_group_rollup?
395:         true
396:       end

Oracle does not support INTERSECT ALL or EXCEPT ALL

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 399
399:       def supports_intersect_except_all?
400:         false
401:       end

Oracle does not support IS TRUE.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 404
404:       def supports_is_true?
405:         false
406:       end

Oracle does not support limits in correlated subqueries.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 409
409:       def supports_limits_in_correlated_subqueries?
410:         false
411:       end

Oracle does not support offsets in correlated subqueries.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 414
414:       def supports_offsets_in_correlated_subqueries?
415:         false
416:       end

Oracle does not support SELECT *, column

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 419
419:       def supports_select_all_and_column?
420:         false
421:       end

Oracle supports timezones in literal timestamps.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 424
424:       def supports_timestamp_timezones?
425:         true
426:       end

Oracle does not support WHERE ‘Y’ for WHERE TRUE.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 429
429:       def supports_where_true?
430:         false
431:       end

Oracle supports window functions

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 434
434:       def supports_window_functions?
435:         true
436:       end

[Validate]