lib/conceptql/operators/numeric.rb in conceptql-0.2.0 vs lib/conceptql/operators/numeric.rb in conceptql-0.3.0

- old
+ new

@@ -10,44 +10,63 @@ # # Accepts two params: # - Either a number value or a symbol representing a column name # - An optional stream class Numeric < PassThru + register __FILE__ + desc <<-EOF -Represents a operator that will either: -- create a value_as_number value for every person in the database -- change the value_as_number value for every every result passed in - - either to a number - - or a value from a column in the origin row +Represents an operator that will either: +- Create a value_as_number value for every person in the database +- Change the value_as_number value for every result passed in + - Either to a number + - Or a value from a column in the origin row Accepts two params: - Either a number value or a symbol representing a column name - An optional stream EOF argument :value, type: :float allows_one_upstream + validate_at_most_one_upstream + validate_one_argument + default_query_columns + require_column :value_as_number + def query_cols + dynamic_columns - [:value_as_number] + [:value_as_number] + end + def query(db) stream.nil? ? as_criterion(db) : with_kids(db) end - def types + def domains(db) stream.nil? ? [:person] : super end private def with_kids(db) db.from(stream.evaluate(db)) - .select(*(COLUMNS - [:value_as_number])) - .select_append(Sequel.lit('?', arguments.first).cast(Float).as(:value_as_number)) + .select(*(dynamic_columns - [:value_as_number])) + .select_append(first_argument.cast(Float).as(:value_as_number)) .from_self end def as_criterion(db) - db.from(select_it(db.from(:person), :person)) - .select(*(COLUMNS - [:value_as_number])) - .select_append(Sequel.lit('?', arguments.first).cast(Float).as(:value_as_number)) + db.from(select_it(db.from(:person).clone(:force_columns=>table_columns(:person)), :person)) + .select(*(dynamic_columns - [:value_as_number])) + .select_append(first_argument.cast(Float).as(:value_as_number)) .from_self + end + + def first_argument + case arguments.first + when String + Sequel.identifier(arguments.first) + else + Sequel.expr(arguments.first) + end end end end end