253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
|
# File 'lib/activefacts/cql/parser/FactTypes.rb', line 253
def ast
clauses_ast = query_clauses.ast
conditions = !ctail.empty? ? ctail.a.ast : []
returning = respond_to?(:returning_clause) ? returning_clause.ast : nil
value_derivation = clauses_ast.detect{|r| r.is_equality_comparison}
if !value_derivation and
conditions.empty? and
clauses_ast.detect{|r| r.includes_literals}
raise "Fact instances may not contain conditions" unless conditions.empty? && !returning
Compiler::Fact.new clauses_ast
elsif (clauses_ast.size == 1 &&
clauses_ast[0].phrases.size == 1 &&
(popname = clauses_ast[0].phrases[0]) &&
!popname.is_a?(Compiler::Reference) &&
conditions.detect{|r| r.includes_literals}
)
Compiler::Fact.new conditions, popname
else
Compiler::FactType.new nil, clauses_ast, conditions, returning
end
end
|