Module: YADM::Adapters::CommonSQL
- Included in:
- MySQL, PostgreSQL, Sqlite
- Defined in:
- lib/yadm/adapters/common_sql.rb
Class Method Summary collapse
Instance Method Summary collapse
- #add(table_name, new_attributes) ⇒ Object
- #change(table_name, id, new_attributes) ⇒ Object
- #count(table_name) ⇒ Object
- #filter(dataset, condition, arguments) ⇒ Object
- #from(table_name) ⇒ Object
- #get(table_name, id) ⇒ Object
- #limit(dataset, limit, arguments) ⇒ Object
- #migrate(block) ⇒ Object
- #order(dataset, order, arguments) ⇒ Object
- #remove(table_name, id) ⇒ Object
- #send_query(table_name, query) ⇒ Object
Class Method Details
.sequelize(node, arguments) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/yadm/adapters/common_sql.rb', line 91 def sequelize(node, arguments) case node when Criteria::Expression operator = sequelize_operator(node.method_name) receiver = sequelize(node.receiver, arguments) arguments = node.arguments.map { |arg| sequelize(arg, arguments) } Sequel::SQL::ComplexExpression.new(operator, receiver, *arguments) when Criteria::Attribute Sequel::SQL::Identifier.new(node.name) when Criteria::Argument node.fetch_from(arguments) else node end end |
Instance Method Details
#add(table_name, new_attributes) ⇒ Object
13 14 15 16 17 |
# File 'lib/yadm/adapters/common_sql.rb', line 13 def add(table_name, new_attributes) new_attributes = new_attributes.dup new_attributes.delete(:id) connection[table_name].insert(new_attributes) end |
#change(table_name, id, new_attributes) ⇒ Object
19 20 21 |
# File 'lib/yadm/adapters/common_sql.rb', line 19 def change(table_name, id, new_attributes) connection[table_name].where(id: id).update(new_attributes) end |
#count(table_name) ⇒ Object
27 28 29 |
# File 'lib/yadm/adapters/common_sql.rb', line 27 def count(table_name) connection[table_name].count end |
#filter(dataset, condition, arguments) ⇒ Object
43 44 45 46 47 48 49 50 |
# File 'lib/yadm/adapters/common_sql.rb', line 43 def filter(dataset, condition, arguments) if condition.nil? dataset else sequel_expression = sequelize(condition.expression, arguments) dataset.where(sequel_expression) end end |
#from(table_name) ⇒ Object
39 40 41 |
# File 'lib/yadm/adapters/common_sql.rb', line 39 def from(table_name) connection[table_name] end |
#get(table_name, id) ⇒ Object
9 10 11 |
# File 'lib/yadm/adapters/common_sql.rb', line 9 def get(table_name, id) connection[table_name][id: id] end |
#limit(dataset, limit, arguments) ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/yadm/adapters/common_sql.rb', line 63 def limit(dataset, limit, arguments) if limit.nil? || limit.limit.nil? dataset else take(dataset, limit.limit, arguments) end end |
#migrate(block) ⇒ Object
71 72 73 |
# File 'lib/yadm/adapters/common_sql.rb', line 71 def migrate(block) block.call(connection) end |
#order(dataset, order, arguments) ⇒ Object
52 53 54 55 56 57 58 59 60 61 |
# File 'lib/yadm/adapters/common_sql.rb', line 52 def order(dataset, order, arguments) if order.nil? dataset else order.clauses.inject(dataset) do |dataset, clause| sequel_expression = sequelize(clause.expression, arguments) dataset.order_more(sequel_expression.send(clause.type)) end end end |
#remove(table_name, id) ⇒ Object
23 24 25 |
# File 'lib/yadm/adapters/common_sql.rb', line 23 def remove(table_name, id) connection[table_name].where(id: id).delete end |
#send_query(table_name, query) ⇒ Object
31 32 33 34 35 36 37 |
# File 'lib/yadm/adapters/common_sql.rb', line 31 def send_query(table_name, query) result = filter(from(table_name), query.criteria.condition, query.arguments) result = order(result, query.criteria.order, query.arguments) result = limit(result, query.criteria.limit, query.arguments) result.to_a end |