Class: Groonga::Context
- Inherits:
-
Object
- Object
- Groonga::Context
- Defined in:
- ext/groonga/rb-grn-context.c,
lib/groonga/context.rb,
lib/groonga/context/command-executor.rb
Overview
groonga全体に渡る情報を管理するオブジェクト。通常のアプリ ケーションでは1つのコンテキストを作成し、それを利用する。 複数のコンテキストを利用する必要はない。
デフォルトで使用されるコンテキストは default でアクセスできる。コンテキ ストを指定できる箇所でコンテキストの指定を省略したり +nil+ を指定した場合は default が利用さ れる。
また、デフォルトのコンテキストは必要になると暗黙のうちに 作成される。そのため、コンテキストを意識することは少ない。
暗黙のうちに作成されるコンテキストにオプションを指定する 場合は default_options= を使用 する。
Defined Under Namespace
Classes: CommandExecutor
Instance Method Summary collapse
-
#create_database(path = nil, &block) ⇒ Object
This is convenience method.
- #execute_command(name, parameters = {}) ⇒ Object
- #object_created(object) ⇒ Object private
-
#open_database(path, &block) ⇒ Object
path にある既存のデータベースを開く。ブロックを指定した場 合はブロックに開いたデータベースを渡し、ブロックを抜けると きに閉じる。.
-
#pop_memory_pool ⇒ void
Pops the pushed memory pool.
-
#push_memory_pool ⇒ Object
Pushes a new memory pool to the context.
-
#register_plugin(name_or_options) ⇒ Object
groongaのプラグインディレクトリにあるプラグイン name を登録する。 path を指定するとプラグインディレクトリ以 外にあるプラグインを登録することができる。.
-
#restore(dumped_commands) {|command, response| ... } ⇒ void
Restore commands dumped by "grndump" command.
-
#select(table, options = {}) ⇒ Object
table から指定した条件にマッチするレコードの値を取得 する。 table はテーブル名かテーブルオブジェクトを指定 する。.
Instance Method Details
#create_database ⇒ Groonga::Database #create_database {|database| ... } ⇒ Object #create_database(path) ⇒ Groonga::Database #create_database(path) {|database| ... } ⇒ Object
This is convenience method. It wraps Database.create for the context.
100 101 102 103 104 105 106 107 |
# File 'lib/groonga/context.rb', line 100 def create_database(path=nil, &block) = {:context => self} if path [:path] = path end Database.create(, &block) end |
#execute_command(name, parameters = {}) ⇒ Object
138 139 140 141 |
# File 'lib/groonga/context.rb', line 138 def execute_command(name, parameters={}) executor = CommandExecutor.new(self) executor.execute(name, parameters) end |
#object_created(object) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
313 314 315 316 317 |
# File 'lib/groonga/context.rb', line 313 def object_created(object) return if @memory_pools.empty? memory_pool = @memory_pools.last memory_pool.register(object) end |
#open_database(path, &block) ⇒ Object
path にある既存のデータベースを開く。ブロックを指定した場 合はブロックに開いたデータベースを渡し、ブロックを抜けると きに閉じる。
26 27 28 29 30 |
# File 'lib/groonga/context.rb', line 26 def open_database(path, &block) = {:context => self} Database.open(path, , &block) end |
#pop_memory_pool ⇒ void
This method returns an undefined value.
Pops the pushed memory pool.
307 308 309 310 |
# File 'lib/groonga/context.rb', line 307 def pop_memory_pool memory_pool = @memory_pools.pop memory_pool.close end |
#push_memory_pool ⇒ void #push_memory_pool({}) { ... } ⇒ Object
Pushes a new memory pool to the context. Temporary objects that are created between pushing a new memory pool and popping the new memory pool are closed automatically when popping the new memory pool.
It is useful for request and response style applications. These style applications can close temporary objects between a request and resopnse pair. There are some merits for closing temporary objects explicilty rather than closing implicitly by GC:
- Less memory consumption
- Faster
The "less memory consumption" merit is caused by temporary objects are closed each request and response pair. The max memory consumption in these applications is the same as the max memory consumption in a request and response pair. If temporary objects are closed by GC, the max memory consumption in these applications is the same as the max memory consumption between the current GC and the next GC. These applications process many request and response pairs during two GCs.
The "faster" merit is caused by reducing GC. You can reduce GC, your application run faster because GC is a heavy process. You can reduce GC because memory consumption is reduced.
You can nest #push_memory_pool and #pop_memory_pool pair.
288 289 290 291 292 293 294 295 296 297 298 |
# File 'lib/groonga/context.rb', line 288 def push_memory_pool memory_pool = MemoryPool.new @memory_pools.push(memory_pool) return unless block_given? begin yield ensure pop_memory_pool end end |
#register_plugin(name_or_options) ⇒ Object
groongaのプラグインディレクトリにあるプラグイン name を登録する。 path を指定するとプラグインディレクトリ以 外にあるプラグインを登録することができる。
112 113 114 115 116 117 118 119 120 |
# File 'lib/groonga/context.rb', line 112 def register_plugin() = {:context => self} if .is_a?(String) name = Plugin.register(name, ) else Plugin.register(.merge()) end end |
#restore(dumped_commands) {|command, response| ... } ⇒ void
This method returns an undefined value.
Restore commands dumped by "grndump" command.
If block is given, a response is yielded.
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/groonga/context.rb', line 171 def restore(dumped_commands) buffer = "" continued = false dumped_commands.each_line do |line| line = line.chomp case line when /\\\z/ continued = true buffer << $PREMATCH else continued = false buffer << line send(buffer) _, response = receive if block_given? not_shared_command = continued ? buffer.dup : line yield(not_shared_command, response) end buffer.clear end end unless buffer.empty? send(buffer) _, response = receive yield(buffer.dup, response) if block_given? end end |
#select(table, options = {}) ⇒ Object
table から指定した条件にマッチするレコードの値を取得 する。 table はテーブル名かテーブルオブジェクトを指定 する。
options に指定できるキーは以下の通り。
134 135 136 |
# File 'lib/groonga/context.rb', line 134 def select(table, ={}) execute_command("select", {:table => table}.merge()) end |