Module: Cyrel::AST

Defined in:
lib/cyrel/ast/node.rb,
lib/cyrel/ast/compiler.rb,
lib/cyrel/ast/set_node.rb,
lib/cyrel/ast/call_node.rb,
lib/cyrel/ast/skip_node.rb,
lib/cyrel/ast/with_node.rb,
lib/cyrel/ast/limit_node.rb,
lib/cyrel/ast/match_node.rb,
lib/cyrel/ast/merge_node.rb,
lib/cyrel/ast/union_node.rb,
lib/cyrel/ast/where_node.rb,
lib/cyrel/ast/clause_node.rb,
lib/cyrel/ast/create_node.rb,
lib/cyrel/ast/delete_node.rb,
lib/cyrel/ast/remove_node.rb,
lib/cyrel/ast/return_node.rb,
lib/cyrel/ast/unwind_node.rb,
lib/cyrel/ast/foreach_node.rb,
lib/cyrel/ast/literal_node.rb,
lib/cyrel/ast/pattern_node.rb,
lib/cyrel/ast/load_csv_node.rb,
lib/cyrel/ast/order_by_node.rb,
lib/cyrel/ast/clause_adapter.rb,
lib/cyrel/ast/expression_node.rb,
lib/cyrel/ast/optimized_nodes.rb,
lib/cyrel/ast/query_integrated_compiler.rb

Defined Under Namespace

Modules: OptimizedNodes Classes: CallNode, CallSubqueryNode, ClauseAdapter, ClauseNode, Compiler, CreateNode, DeleteNode, ExpressionNode, ForeachNode, HybridApproach, LimitNode, LoadCsvNode, MatchNode, MergeNode, Node, OptimizedCache, OrderByNode, PatternNode, QueryIntegratedCompiler, RemoveNode, ReturnNode, SetNode, SkipNode, UnionNode, UnwindNode, WhereNode, WithNode

Constant Summary collapse

LiteralNode =

Immutable AST node for literal values using Ruby’s Data class Because sometimes you just want to say what you mean, immutably

Data.define(:value) do
  def accept(visitor)
    visitor.visit_literal_node(self)
  end

  def to_ast
    self
  end

  # Pattern matching support
  def deconstruct
    [value]
  end

  def deconstruct_keys(_keys)
    { value: value }
  end

  # Type inference
  def inferred_type
    case value
    when String then :string
    when Symbol then :parameter
    when Integer then :integer
    when Float then :float
    when TrueClass, FalseClass then :boolean
    when NilClass then :null
    else :unknown
    end
  end
end