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
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