class Cassandra::Cluster::Schema

@private

Public Class Methods

new() click to toggle source
   # File lib/cassandra/cluster/schema.rb
25 def initialize
26   @keyspaces = ::Hash.new
27   @listeners = ::Set.new
28 
29   mon_initialize
30 end

Public Instance Methods

add_listener(listener) click to toggle source
   # File lib/cassandra/cluster/schema.rb
60 def add_listener(listener)
61   synchronize do
62     @listeners = @listeners.dup.add(listener)
63   end
64 
65   self
66 end
delete_aggregate(keyspace_name, aggregate_name, aggregate_arg_types) click to toggle source
    # File lib/cassandra/cluster/schema.rb
326 def delete_aggregate(keyspace_name, aggregate_name, aggregate_arg_types)
327   keyspace = @keyspaces[keyspace_name]
328 
329   return self unless keyspace
330 
331   aggregate = keyspace.aggregate(aggregate_name, *aggregate_arg_types)
332 
333   return self unless aggregate
334 
335   keyspace = keyspace.delete_aggregate(aggregate_name, aggregate_arg_types)
336 
337   synchronize do
338     keyspaces = @keyspaces.dup
339     keyspaces[keyspace_name] = keyspace
340     @keyspaces = keyspaces
341   end
342 
343   keyspace_changed(keyspace)
344 
345   self
346 end
delete_function(keyspace_name, function_name, function_arg_types) click to toggle source
    # File lib/cassandra/cluster/schema.rb
282 def delete_function(keyspace_name, function_name, function_arg_types)
283   keyspace = @keyspaces[keyspace_name]
284 
285   return self unless keyspace
286 
287   function = keyspace.function(function_name, *function_arg_types)
288 
289   return self unless function
290 
291   keyspace = keyspace.delete_function(function_name, function_arg_types)
292 
293   synchronize do
294     keyspaces = @keyspaces.dup
295     keyspaces[keyspace_name] = keyspace
296     @keyspaces = keyspaces
297   end
298 
299   keyspace_changed(keyspace)
300 
301   self
302 end
delete_keyspace(keyspace_name) click to toggle source
    # File lib/cassandra/cluster/schema.rb
112 def delete_keyspace(keyspace_name)
113   keyspace = @keyspaces[keyspace_name]
114 
115   return self unless keyspace
116 
117   synchronize do
118     keyspaces = @keyspaces.dup
119     keyspaces.delete(keyspace_name)
120     @keyspaces = keyspaces
121   end
122 
123   keyspace_dropped(keyspace)
124 
125   self
126 end
delete_materialized_view(keyspace_name, view_name) click to toggle source
    # File lib/cassandra/cluster/schema.rb
194 def delete_materialized_view(keyspace_name, view_name)
195   keyspace = @keyspaces[keyspace_name]
196 
197   return self unless keyspace
198 
199   view = keyspace.materialized_view(view_name)
200 
201   return self unless view
202 
203   keyspace = keyspace.delete_materialized_view(view_name)
204 
205   synchronize do
206     keyspaces = @keyspaces.dup
207     keyspaces[keyspace_name] = keyspace
208     @keyspaces = keyspaces
209   end
210 
211   keyspace_changed(keyspace)
212 
213   self
214 end
delete_table(keyspace_name, table_name) click to toggle source
    # File lib/cassandra/cluster/schema.rb
150 def delete_table(keyspace_name, table_name)
151   keyspace = @keyspaces[keyspace_name]
152 
153   return self unless keyspace
154 
155   table = keyspace.table(table_name)
156 
157   return self unless table
158 
159   keyspace = keyspace.delete_table(table_name)
160 
161   synchronize do
162     keyspaces = @keyspaces.dup
163     keyspaces[keyspace_name] = keyspace
164     @keyspaces = keyspaces
165   end
166 
167   keyspace_changed(keyspace)
168 
169   self
170 end
delete_type(keyspace_name, type_name) click to toggle source
    # File lib/cassandra/cluster/schema.rb
238 def delete_type(keyspace_name, type_name)
239   keyspace = @keyspaces[keyspace_name]
240 
241   return self unless keyspace
242 
243   type = keyspace.type(type_name)
244 
245   return self unless type
246 
247   keyspace = keyspace.delete_type(type_name)
248 
249   synchronize do
250     keyspaces = @keyspaces.dup
251     keyspaces[keyspace_name] = keyspace
252     @keyspaces = keyspaces
253   end
254 
255   keyspace_changed(keyspace)
256 
257   self
258 end
each_keyspace(&block) click to toggle source
    # File lib/cassandra/cluster/schema.rb
356 def each_keyspace(&block)
357   if block_given?
358     @keyspaces.each_value(&block)
359     self
360   else
361     @keyspaces.values
362   end
363 end
Also aliased as: keyspaces
get_pk_idx(metadata) click to toggle source
   # File lib/cassandra/cluster/schema.rb
32 def get_pk_idx(metadata)
33   return EMPTY_LIST unless metadata
34 
35   # metadata is an array of column-specs; each column-spec is an array
36   # of keyspace_name, tablename, other stuff. We only care about the first two.
37   # See read_prepared_metadata_v4 in coder.rb for more details.
38   # NB: sandman: I think all of the column specs have the same keyspace and
39   # table name in this context, so we can safely grab the first.
40 
41   keyspace_name, table_name = metadata.first
42   return EMPTY_LIST unless keyspace_name && table_name
43 
44   keyspace = @keyspaces[keyspace_name]
45   return EMPTY_LIST unless keyspace
46 
47   table = keyspace.table(table_name)
48   return EMPTY_LIST unless table
49 
50   partition_key = table.partition_key
51   return EMPTY_LIST unless partition_key && partition_key.size <= metadata.size
52 
53   partition_key.map do |column|
54     i = metadata.index {|(_, _, name, _)| name == column.name}
55     return EMPTY_LIST if i.nil?
56     i
57   end
58 end
has_keyspace?(name) click to toggle source
    # File lib/cassandra/cluster/schema.rb
348 def has_keyspace?(name)
349   @keyspaces.include?(name)
350 end
keyspace(name) click to toggle source
    # File lib/cassandra/cluster/schema.rb
352 def keyspace(name)
353   @keyspaces[name]
354 end
keyspaces(&block)
Alias for: each_keyspace
remove_listener(listener) click to toggle source
   # File lib/cassandra/cluster/schema.rb
68 def remove_listener(listener)
69   synchronize do
70     @listeners = @listeners.dup.delete(listener)
71   end
72 
73   self
74 end
replace(keyspaces) click to toggle source
   # File lib/cassandra/cluster/schema.rb
76 def replace(keyspaces)
77   current_keyspaces = ::Set.new
78 
79   keyspaces.each do |keyspace|
80     current_keyspaces << keyspace.name
81 
82     replace_keyspace(keyspace)
83   end
84 
85   @keyspaces.each do |name, _keyspace|
86     delete_keyspace(name) unless current_keyspaces.include?(name)
87   end
88 
89   self
90 end
replace_aggregate(aggregate) click to toggle source
    # File lib/cassandra/cluster/schema.rb
304 def replace_aggregate(aggregate)
305   keyspace = @keyspaces[aggregate.keyspace]
306 
307   return self unless keyspace
308 
309   old_aggregate = keyspace.aggregate(aggregate.name, *aggregate.argument_types)
310 
311   return self if old_aggregate == aggregate
312 
313   keyspace = keyspace.update_aggregate(aggregate)
314 
315   synchronize do
316     keyspaces = @keyspaces.dup
317     keyspaces[keyspace.name] = keyspace
318     @keyspaces = keyspaces
319   end
320 
321   keyspace_changed(keyspace)
322 
323   self
324 end
replace_function(function) click to toggle source
    # File lib/cassandra/cluster/schema.rb
260 def replace_function(function)
261   keyspace = @keyspaces[function.keyspace]
262 
263   return self unless keyspace
264 
265   old_function = keyspace.function(function.name, *function.argument_types)
266 
267   return self if old_function == function
268 
269   keyspace = keyspace.update_function(function)
270 
271   synchronize do
272     keyspaces = @keyspaces.dup
273     keyspaces[keyspace.name] = keyspace
274     @keyspaces = keyspaces
275   end
276 
277   keyspace_changed(keyspace)
278 
279   self
280 end
replace_keyspace(keyspace) click to toggle source
    # File lib/cassandra/cluster/schema.rb
 92 def replace_keyspace(keyspace)
 93   old_keyspace = @keyspaces[keyspace.name]
 94 
 95   return self if old_keyspace == keyspace
 96 
 97   synchronize do
 98     keyspaces = @keyspaces.dup
 99     keyspaces[keyspace.name] = keyspace
100     @keyspaces = keyspaces
101   end
102 
103   if old_keyspace
104     keyspace_changed(keyspace)
105   else
106     keyspace_created(keyspace)
107   end
108 
109   self
110 end
replace_materialized_view(view) click to toggle source
    # File lib/cassandra/cluster/schema.rb
172 def replace_materialized_view(view)
173   keyspace = view.keyspace
174 
175   return self unless keyspace
176 
177   old_view = keyspace.materialized_view(view.name)
178 
179   return self if old_view == view
180 
181   keyspace = keyspace.update_materialized_view(view)
182 
183   synchronize do
184     keyspaces = @keyspaces.dup
185     keyspaces[keyspace.name] = keyspace
186     @keyspaces = keyspaces
187   end
188 
189   keyspace_changed(keyspace)
190 
191   self
192 end
replace_table(table) click to toggle source
    # File lib/cassandra/cluster/schema.rb
128 def replace_table(table)
129   keyspace = table.keyspace
130 
131   return self unless keyspace
132 
133   old_table = keyspace.table(table.name)
134 
135   return self if old_table == table
136 
137   keyspace = keyspace.update_table(table)
138 
139   synchronize do
140     keyspaces = @keyspaces.dup
141     keyspaces[keyspace.name] = keyspace
142     @keyspaces = keyspaces
143   end
144 
145   keyspace_changed(keyspace)
146 
147   self
148 end
replace_type(type) click to toggle source
    # File lib/cassandra/cluster/schema.rb
216 def replace_type(type)
217   keyspace = @keyspaces[type.keyspace]
218 
219   return self unless keyspace
220 
221   old_type = keyspace.type(type.name)
222 
223   return self if old_type == type
224 
225   keyspace = keyspace.update_type(type)
226 
227   synchronize do
228     keyspaces = @keyspaces.dup
229     keyspaces[keyspace.name] = keyspace
230     @keyspaces = keyspaces
231   end
232 
233   keyspace_changed(keyspace)
234 
235   self
236 end

Private Instance Methods

keyspace_changed(keyspace) click to toggle source
    # File lib/cassandra/cluster/schema.rb
378 def keyspace_changed(keyspace)
379   @listeners.each do |listener|
380     begin
381       listener.keyspace_changed(keyspace)
382     rescue
383       nil
384     end
385   end
386 end
keyspace_created(keyspace) click to toggle source
    # File lib/cassandra/cluster/schema.rb
368 def keyspace_created(keyspace)
369   @listeners.each do |listener|
370     begin
371       listener.keyspace_created(keyspace)
372     rescue
373       nil
374     end
375   end
376 end
keyspace_dropped(keyspace) click to toggle source
    # File lib/cassandra/cluster/schema.rb
388 def keyspace_dropped(keyspace)
389   @listeners.each do |listener|
390     begin
391       listener.keyspace_dropped(keyspace)
392     rescue
393       nil
394     end
395   end
396 end