Module: ApacheAge::Entities::Node

Extended by:
ActiveSupport::Concern
Included in:
Node
Defined in:
lib/apache_age/entities/node.rb

Instance Method Summary collapse

Instance Method Details

#age_typeObject



19
# File 'lib/apache_age/entities/node.rb', line 19

def age_type = 'vertex'

#create_sqlObject

AgeSchema::Nodes::Company.create(company_name: 'Bedrock Quarry') SELECT * FROM cypher('age_schema', $$ CREATE (company:Company 'Bedrock Quarry') RETURN company $$) as (Company agtype);



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/apache_age/entities/node.rb', line 27

def create_sql
  alias_name = age_alias || age_label.downcase
  sanitized_properties =
    self
      .to_h.reject { |k, v| k == :id }.reject { |k, v| v.nil? }
      .map { |k, v| "#{k}: #{ActiveRecord::Base.sanitize_sql(["?", v])}" }
      .join(', ')

  <<~SQL.squish
    SELECT *
    FROM cypher('#{age_graph}', $$
        CREATE (#{alias_name}:#{age_label} {#{sanitized_properties}})
    RETURN #{alias_name}
    $$) as (#{age_label} agtype);
  SQL
end

#update_sqlObject

So far just properties of string type with '' around them



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/apache_age/entities/node.rb', line 45

def update_sql
  alias_name = ActiveRecord::Base.sanitize_sql_like(age_alias || age_label.downcase)
  sanitized_set_clause = age_properties.map do |k, v|
    if v
      sanitized_value = ActiveRecord::Base.sanitize_sql(["?", v])
      "#{alias_name}.#{k} = #{sanitized_value}"
    else
      "#{alias_name}.#{k} = NULL"
    end
  end.join(', ')

  sanitized_id = ActiveRecord::Base.sanitize_sql(["?", id])

  <<-SQL
    SELECT *
    FROM cypher('#{age_graph}', $$
        MATCH (#{alias_name}:#{age_label})
        WHERE id(#{alias_name}) = #{sanitized_id}
        SET #{sanitized_set_clause}
        RETURN #{alias_name}
    $$) as (#{age_label} agtype);
  SQL
end