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

Methods

Classes and Modules

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

Public Class methods

[Source]

    # File lib/sequel/adapters/shared/oracle.rb, line 9
 9:     def self.mock_adapter_setup(db)
10:       db.instance_eval do
11:         @server_version = 11000000
12:         @primary_key_sequences = {}
13:       end
14:     end

Public Instance methods

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 324
324:       def complex_expression_sql_append(sql, op, args)
325:         case op
326:         when :&
327:           complex_expression_arg_pairs_append(sql, args, &BITAND_PROC)
328:         when :|
329:           complex_expression_arg_pairs_append(sql, args){|a, b| Sequel.lit(["(", " - ", " + ", ")"], a, complex_expression_arg_pairs([a, b], &BITAND_PROC), b)}
330:         when :^
331:           complex_expression_arg_pairs_append(sql, args) do |*x|
332:             s1 = complex_expression_arg_pairs(x){|a, b| Sequel.lit(["(", " - ", " + ", ")"], a, complex_expression_arg_pairs([a, b], &BITAND_PROC), b)}
333:             s2 = complex_expression_arg_pairs(x, &BITAND_PROC)
334:             Sequel.lit(["(", " - ", ")"], s1, s2)
335:           end
336:         when :~, '!~''!~', '~*''~*', '!~*''!~*'
337:           raise InvalidOperation, "Pattern matching via regular expressions is not supported in this Oracle version" unless supports_regexp?
338:           if op == '!~''!~' || op == '!~*''!~*'
339:             sql << 'NOT '
340:           end
341:           sql << 'REGEXP_LIKE('
342:           literal_append(sql, args.at(0))
343:           sql << ','
344:           literal_append(sql, args.at(1))
345:           if op == '~*''~*' || op == '!~*''!~*'
346:             sql << ", 'i'"
347:           end
348:           sql << ')'
349:         when :%, :<<, :>>, 'B~''B~'
350:           complex_expression_emulate_append(sql, op, args)
351:         else
352:           super
353:         end
354:       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 359
359:       def constant_sql_append(sql, c)
360:         if c == :CURRENT_TIME
361:           super(sql, :CURRENT_TIMESTAMP)
362:         else
363:           super
364:         end
365:       end

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

[Source]

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

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

[Source]

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

Oracle requires recursive CTEs to have column aliases.

[Source]

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

Oracle requires SQL standard datetimes

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 380
380:       def requires_sql_standard_datetimes?
381:         true
382:       end

Handle LIMIT by using a unlimited subselect filtered with ROWNUM.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 392
392:       def select_sql
393:         return super if @opts[:sql]
394:         if o = @opts[:offset]
395:           columns = clone(:append_sql=>String.new, :placeholder_literal_null=>true).columns
396:           dsa1 = dataset_alias(1)
397:           rn = row_number_column
398:           limit = @opts[:limit]
399:           ds = unlimited.
400:             from_self(:alias=>dsa1).
401:             select_append(ROW_NUMBER_EXPRESSION.as(rn)).
402:             from_self(:alias=>dsa1).
403:             select(*columns).
404:             where(SQL::Identifier.new(rn) > o)
405:           ds = ds.where(SQL::Identifier.new(rn) <= Sequel.+(o, limit)) if limit
406:           sql = @opts[:append_sql] || String.new
407:           subselect_sql_append(sql, ds)
408:           sql
409:         elsif limit = @opts[:limit]
410:           ds = clone(:limit=>nil)
411:           # Lock doesn't work in subselects, so don't use a subselect when locking.
412:           # Don't use a subselect if custom SQL is used, as it breaks somethings.
413:           ds = ds.from_self unless @opts[:lock]
414:           sql = @opts[:append_sql] || String.new
415:           subselect_sql_append(sql, ds.where(SQL::ComplexExpression.new(:<=, ROW_NUMBER_EXPRESSION, limit)))
416:           sql
417:         else
418:           super
419:         end
420:       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 387
387:       def sequence(s)
388:         clone(:sequence=>s)
389:       end

The version of the database server

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 497
497:       def server_version
498:         db.server_version(@opts[:server])
499:       end

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 427
427:       def supports_cte?(type=:select)
428:         type == :select
429:       end

Oracle does not support derived column lists

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 432
432:       def supports_derived_column_lists?
433:         false
434:       end

Oracle supports GROUP BY CUBE

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 437
437:       def supports_group_cube?
438:         true
439:       end

Oracle supports GROUP BY ROLLUP

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 442
442:       def supports_group_rollup?
443:         true
444:       end

Oracle supports GROUPING SETS

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 447
447:       def supports_grouping_sets?
448:         true
449:       end

Oracle does not support INTERSECT ALL or EXCEPT ALL

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 452
452:       def supports_intersect_except_all?
453:         false
454:       end

Oracle does not support IS TRUE.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 457
457:       def supports_is_true?
458:         false
459:       end

Oracle does not support limits in correlated subqueries.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 462
462:       def supports_limits_in_correlated_subqueries?
463:         false
464:       end

Oracle does not support offsets in correlated subqueries.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 467
467:       def supports_offsets_in_correlated_subqueries?
468:         false
469:       end

Oracle supports pattern matching via regular expressions

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 502
502:       def supports_regexp?
503:         server_version >= 10010002
504:       end

Oracle does not support SELECT *, column

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 472
472:       def supports_select_all_and_column?
473:         false
474:       end

Oracle supports SKIP LOCKED.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 477
477:       def supports_skip_locked?
478:         true
479:       end

Oracle supports timezones in literal timestamps.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 482
482:       def supports_timestamp_timezones?
483:         true
484:       end

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

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 487
487:       def supports_where_true?
488:         false
489:       end

Oracle supports window functions

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 492
492:       def supports_window_functions?
493:         true
494:       end

[Validate]