YUKI Hiroshi
null+****@clear*****
Thu Apr 24 15:13:27 JST 2014
YUKI Hiroshi 2014-04-24 15:13:27 +0900 (Thu, 24 Apr 2014) New Revision: bae926b0aef60ec3b1e0e258bc10cdeb374be89e https://github.com/droonga/droonga-engine/commit/bae926b0aef60ec3b1e0e258bc10cdeb374be89e Message: groonga: Accept "filter" for Groonga's delete Modified files: lib/droonga/plugins/groonga/delete.rb lib/droonga/plugins/groonga/generic_command.rb test/unit/plugins/groonga/test_delete.rb Modified: lib/droonga/plugins/groonga/delete.rb (+15 -9) =================================================================== --- lib/droonga/plugins/groonga/delete.rb 2014-04-24 14:21:04 +0900 (5d198ab) +++ lib/droonga/plugins/groonga/delete.rb 2014-04-24 15:13:27 +0900 (8edb0db) @@ -66,14 +66,6 @@ module Droonga :message => message, :result => false) end - - #XXX this must be removed after it is implemented - if filter - message = "\"filter\" is not supported yet" - raise CommandError.new(:status => Status::INVALID_ARGUMENT, - :message => message, - :result => false) - end end def delete_record(table_name, parameters={}) @@ -81,9 +73,23 @@ module Droonga if parameters[:id] record = table[parameters[:id].to_i] record.delete if record and record.valid_id? - else + else if parameters[:key] record = table[parameters[:key]] record.delete unless record.nil? + else + filter = Groonga::Expression.new(:context => @context) + begin + filter.parse(parameters[:filter].dump, :syntax => :script) + records = table.select(filter) + records.each do |record| + record.delete + end + rescue ::Groonga::SyntaxError + message = "syntax error in filter: <#{parameters[:filter].to_s}>" + raise CommandError.new(:status => Status::SYNTAX_ERROR, + :message => message, + :result => false) + end end true end Modified: lib/droonga/plugins/groonga/generic_command.rb (+1 -0) =================================================================== --- lib/droonga/plugins/groonga/generic_command.rb 2014-04-24 14:21:04 +0900 (1d41be2) +++ lib/droonga/plugins/groonga/generic_command.rb 2014-04-24 15:13:27 +0900 (9613da7) @@ -21,6 +21,7 @@ module Droonga module Status SUCCESS = 0 INVALID_ARGUMENT = -22 + SYNTAX_ERROR = -63 end class GenericCommand Modified: test/unit/plugins/groonga/test_delete.rb (+19 -15) =================================================================== --- test/unit/plugins/groonga/test_delete.rb 2014-04-24 14:21:04 +0900 (32b7fad) +++ test/unit/plugins/groonga/test_delete.rb 2014-04-24 15:13:27 +0900 (04080f2) @@ -79,21 +79,6 @@ class DeleteTest < GroongaHandlerTest ) end - def test_not_implemented_identifier - Groonga::Schema.define(:context => @context) do |schema| - schema.create_table("Books", :type => :hash) - end - message = { - "table" => "Books", - "filter" => "filter", - } - response = process(:delete, message) - assert_equal( - [NORMALIZED_HEADER_INVALID_ARGUMENT, false], - [normalize_header(response.first), response.last] - ) - end - class DeleteTest < self def test_key Groonga::Schema.define(:context => @context) do |schema| @@ -118,5 +103,24 @@ table_create Books TABLE_HASH_KEY --key_type ShortText table_create Ages TABLE_NO_KEY DUMP end + + def test_filter + Groonga::Schema.define(:context => @context) do |schema| + schema.create_table("Books", :type => :hash) + end + table = Groonga::Context.default["Books"] + table.add("Groonga") + table.add("Droonga") + process(:delete, + {"table" => "Books", "filter" => '_key @^ "D"'}) + assert_equal(<<-DUMP, dump) +table_create Books TABLE_HASH_KEY --key_type ShortText +load --table Books +[ + ["_key"], + ["Groonga"] +] + DUMP + end end end -------------- next part -------------- HTML����������������������������...Download