class OpalORM::QueryBuilder
Constants
- DATATYPES
Attributes
query[R]
Public Class Methods
create_table_query(name, &prc)
click to toggle source
# File lib/opal_orm/query_builder.rb, line 12 def self.create_table_query(name, &prc) manager = new(name) prc.call(manager) manager.build! end
new(name)
click to toggle source
# File lib/opal_orm/query_builder.rb, line 21 def initialize(name) @table_name = name @columns = [] @foreign_keys = [] end
Public Instance Methods
build!()
click to toggle source
def foreign_key(ref_name)
@foreign_keys << ref_name
end
# File lib/opal_orm/query_builder.rb, line 47 def build! query_start = "CREATE TABLE #{@table_name} (" column_queries = @columns.map do |col_info| result = ["#{col_info[:name]}"] result << get_datatype_string(col_info[:type]) unless col_info[:options].nil? col_info[:options].each do |key| case col_info[:options] when :null result << "NOT NULL" unless col_info[:options][:null] end end end result.join(" ") end column_queries.unshift("id INTEGER PRIMARY KEY") foreign_keys = @foreign_keys.map do |ref_name| if foreign_key_valid?(ref_name) "FOREIGN KEY(#{ref_name}) REFERENCES #{@table_name.singularize}(id)" else raise ForeignKeyMissingError, "Error adding foreign key constraint for #{ref_name}: couldn't find column named #{ref_name}." end end query_end = ");" @query = query_start + column_queries.concat(foreign_keys).join(",\n") + query_end @query end
float(name, *options)
click to toggle source
# File lib/opal_orm/query_builder.rb, line 35 def float(name, *options) @columns << {type: :float, name: name, options: options} end
foreign_key_valid?(key)
click to toggle source
# File lib/opal_orm/query_builder.rb, line 85 def foreign_key_valid?(key) @columns.any? {|col| key == col[:name]} end
get_datatype_string(type)
click to toggle source
# File lib/opal_orm/query_builder.rb, line 81 def get_datatype_string(type) DATATYPES[type] end
integer(name, *options)
click to toggle source
# File lib/opal_orm/query_builder.rb, line 31 def integer(name, *options) @columns << {type: :integer, name: name, options: options} end
string(name, *options)
click to toggle source
# File lib/opal_orm/query_builder.rb, line 27 def string(name, *options) @columns << {type: :string, name: name, options: options} end
text(name, *options)
click to toggle source
# File lib/opal_orm/query_builder.rb, line 39 def text(name, *options) @columns << {type: :text, name: name, options: options} end