diff --git a/src/avram/base_query_template.cr b/src/avram/base_query_template.cr index 244b7a83f..4772f486b 100644 --- a/src/avram/base_query_template.cr +++ b/src/avram/base_query_template.cr @@ -4,7 +4,7 @@ class Avram::BaseQueryTemplate private class Nothing end - include Avram::Queryable({{ type }}) + include Avram::PrimaryKeyQueryable({{ type }}) def database : Avram::Database.class {{ type }}.database diff --git a/src/avram/primary_key_queryable.cr b/src/avram/primary_key_queryable.cr new file mode 100644 index 000000000..921fdf34d --- /dev/null +++ b/src/avram/primary_key_queryable.cr @@ -0,0 +1,27 @@ +require "./errors" +require "./queryable" + +module Avram::PrimaryKeyQueryable(T) + abstract def id + abstract def id(id_val) + + macro included + include Avram::Queryable(T) + + def self.find(id) + new.find(id) + end + + def find(id) + id(id).limit(1).first? || raise Avram::RecordNotFoundError.new(model: @@table_name, id: id.to_s) + end + + private def ordered_query + if query.ordered? + query + else + id.asc_order.query + end + end + end +end diff --git a/src/avram/queryable.cr b/src/avram/queryable.cr index 09fcf5532..e66532647 100644 --- a/src/avram/queryable.cr +++ b/src/avram/queryable.cr @@ -1,8 +1,6 @@ module Avram::Queryable(T) include Enumerable(T) - abstract def id - @query : Avram::QueryBuilder? setter query @@ -17,10 +15,6 @@ module Avram::Queryable(T) new end - def self.find(id) - new.find(id) - end - def self.first new.first end @@ -155,10 +149,6 @@ module Avram::Queryable(T) self end - def find(id) - id(id).limit(1).first? || raise RecordNotFoundError.new(model: @@table_name, id: id.to_s) - end - def first? ordered_query.limit(1) results.first? @@ -213,11 +203,7 @@ module Avram::Queryable(T) end private def ordered_query - if query.ordered? - query - else - id.asc_order.query - end + query end def to_sql