Class: ActiveFacts::CQL::Compiler::SetExclusionConstraint

Inherits:
SetComparisonConstraint show all
Defined in:
lib/activefacts/cql/compiler/constraint.rb

Instance Attribute Summary

Attributes inherited from Definition

#constellation, #source, #vocabulary

Instance Method Summary collapse

Methods inherited from SetConstraint

#build_join_nodes, #build_join_steps, #role_sequences_for_common_bindings, #warn_ignored_joins

Methods inherited from Constraint

#all_bindings_in_readings, #bind_readings, #common_bindings, #loose_bind_roles, #loose_bind_wherever_possible, #warn_ignored_joins

Constructor Details

#initialize(context_note, enforcement, readings_lists, roles, quantifier) ⇒ SetExclusionConstraint

Returns a new instance of SetExclusionConstraint.



487
488
489
490
491
# File 'lib/activefacts/cql/compiler/constraint.rb', line 487

def initialize context_note, enforcement, readings_lists, roles, quantifier
  super context_note, enforcement, readings_lists
  @roles = roles || []
  @quantifier = quantifier
end

Instance Method Details

#compileObject



493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
# File 'lib/activefacts/cql/compiler/constraint.rb', line 493

def compile
  bind_readings
  common_bindings

  role_sequences =
    role_sequences_for_common_bindings

  @constraint = @constellation.SetExclusionConstraint(
    :new,
    :vocabulary => @vocabulary,
    :is_mandatory => @quantifier.min == 1
  )
  @enforcement.compile(@constellation, @constraint) if @enforcement
  role_sequences.each_with_index do |role_sequence, i|
    @constellation.SetComparisonRoles(@constraint, i, :role_sequence => role_sequence)
  end
  super
end

#loose_bindingObject

In a SetExclusionConstraint, each role in “for each XYZ” must occur in each readings_list



513
514
515
516
517
518
519
# File 'lib/activefacts/cql/compiler/constraint.rb', line 513

def loose_binding
  if @roles.size == 0
    loose_bind_wherever_possible
  else
    loose_bind_roles
  end
end