cassandra-driver 3.0.0.beta.1-java → 3.0.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +106 -39
- data/lib/cassandra.rb +396 -148
- data/lib/cassandra/address_resolution.rb +1 -1
- data/lib/cassandra/address_resolution/policies/ec2_multi_region.rb +1 -1
- data/lib/cassandra/address_resolution/policies/none.rb +1 -1
- data/lib/cassandra/aggregate.rb +21 -7
- data/lib/cassandra/argument.rb +2 -2
- data/lib/cassandra/attr_boolean.rb +33 -0
- data/lib/cassandra/auth.rb +6 -5
- data/lib/cassandra/auth/providers.rb +1 -1
- data/lib/cassandra/auth/providers/password.rb +5 -13
- data/lib/cassandra/cassandra_logger.rb +80 -0
- data/lib/cassandra/cluster.rb +49 -9
- data/lib/cassandra/cluster/client.rb +835 -209
- data/lib/cassandra/cluster/connection_pool.rb +2 -2
- data/lib/cassandra/cluster/connector.rb +86 -27
- data/lib/cassandra/cluster/control_connection.rb +222 -95
- data/lib/cassandra/cluster/failed_connection.rb +1 -1
- data/lib/cassandra/cluster/metadata.rb +14 -8
- data/lib/cassandra/cluster/options.rb +68 -22
- data/lib/cassandra/cluster/registry.rb +81 -17
- data/lib/cassandra/cluster/schema.rb +70 -8
- data/lib/cassandra/cluster/schema/cql_type_parser.rb +15 -10
- data/lib/cassandra/cluster/schema/fetchers.rb +601 -241
- data/lib/cassandra/cluster/schema/fqcn_type_parser.rb +39 -38
- data/lib/cassandra/cluster/schema/partitioners.rb +1 -1
- data/lib/cassandra/cluster/schema/partitioners/murmur3.rb +6 -8
- data/lib/cassandra/cluster/schema/partitioners/ordered.rb +1 -1
- data/lib/cassandra/cluster/schema/partitioners/random.rb +1 -1
- data/lib/cassandra/cluster/schema/replication_strategies.rb +1 -1
- data/lib/cassandra/cluster/schema/replication_strategies/network_topology.rb +19 -18
- data/lib/cassandra/cluster/schema/replication_strategies/none.rb +1 -1
- data/lib/cassandra/cluster/schema/replication_strategies/simple.rb +1 -1
- data/lib/cassandra/column.rb +4 -23
- data/lib/cassandra/column_container.rb +322 -0
- data/lib/cassandra/compression.rb +1 -1
- data/lib/cassandra/compression/compressors/lz4.rb +7 -8
- data/lib/cassandra/compression/compressors/snappy.rb +4 -3
- data/lib/cassandra/driver.rb +107 -46
- data/lib/cassandra/errors.rb +303 -52
- data/lib/cassandra/execution/info.rb +16 -5
- data/lib/cassandra/execution/options.rb +102 -55
- data/lib/cassandra/execution/trace.rb +16 -9
- data/lib/cassandra/executors.rb +1 -1
- data/lib/cassandra/function.rb +19 -13
- data/lib/cassandra/function_collection.rb +85 -0
- data/lib/cassandra/future.rb +101 -49
- data/lib/cassandra/host.rb +25 -5
- data/lib/cassandra/index.rb +118 -0
- data/lib/cassandra/keyspace.rb +169 -33
- data/lib/cassandra/listener.rb +1 -1
- data/lib/cassandra/load_balancing.rb +2 -2
- data/lib/cassandra/load_balancing/policies.rb +1 -1
- data/lib/cassandra/load_balancing/policies/dc_aware_round_robin.rb +39 -25
- data/lib/cassandra/load_balancing/policies/round_robin.rb +8 -1
- data/lib/cassandra/load_balancing/policies/token_aware.rb +22 -13
- data/lib/cassandra/load_balancing/policies/white_list.rb +18 -5
- data/lib/cassandra/materialized_view.rb +90 -0
- data/lib/cassandra/null_logger.rb +27 -6
- data/lib/cassandra/protocol.rb +1 -1
- data/lib/cassandra/protocol/coder.rb +81 -42
- data/lib/cassandra/protocol/cql_byte_buffer.rb +58 -44
- data/lib/cassandra/protocol/cql_protocol_handler.rb +57 -54
- data/lib/cassandra/protocol/request.rb +6 -7
- data/lib/cassandra/protocol/requests/auth_response_request.rb +3 -3
- data/lib/cassandra/protocol/requests/batch_request.rb +17 -8
- data/lib/cassandra/protocol/requests/credentials_request.rb +3 -3
- data/lib/cassandra/protocol/requests/execute_request.rb +39 -20
- data/lib/cassandra/protocol/requests/options_request.rb +1 -1
- data/lib/cassandra/protocol/requests/prepare_request.rb +5 -5
- data/lib/cassandra/protocol/requests/query_request.rb +28 -23
- data/lib/cassandra/protocol/requests/register_request.rb +2 -2
- data/lib/cassandra/protocol/requests/startup_request.rb +8 -8
- data/lib/cassandra/protocol/requests/void_query_request.rb +1 -1
- data/lib/cassandra/protocol/response.rb +3 -4
- data/lib/cassandra/protocol/responses/already_exists_error_response.rb +12 -2
- data/lib/cassandra/protocol/responses/auth_challenge_response.rb +4 -5
- data/lib/cassandra/protocol/responses/auth_success_response.rb +4 -5
- data/lib/cassandra/protocol/responses/authenticate_response.rb +4 -5
- data/lib/cassandra/protocol/responses/error_response.rb +104 -17
- data/lib/cassandra/protocol/responses/event_response.rb +3 -4
- data/lib/cassandra/protocol/responses/function_failure_error_response.rb +13 -2
- data/lib/cassandra/protocol/responses/prepared_result_response.rb +14 -9
- data/lib/cassandra/protocol/responses/raw_rows_result_response.rb +14 -9
- data/lib/cassandra/protocol/responses/read_failure_error_response.rb +26 -4
- data/lib/cassandra/protocol/responses/read_timeout_error_response.rb +22 -3
- data/lib/cassandra/protocol/responses/ready_response.rb +6 -7
- data/lib/cassandra/protocol/responses/result_response.rb +11 -10
- data/lib/cassandra/protocol/responses/rows_result_response.rb +8 -7
- data/lib/cassandra/protocol/responses/schema_change_event_response.rb +8 -8
- data/lib/cassandra/protocol/responses/schema_change_result_response.rb +19 -13
- data/lib/cassandra/protocol/responses/set_keyspace_result_response.rb +5 -6
- data/lib/cassandra/protocol/responses/status_change_event_response.rb +5 -6
- data/lib/cassandra/protocol/responses/supported_response.rb +4 -5
- data/lib/cassandra/protocol/responses/topology_change_event_response.rb +4 -5
- data/lib/cassandra/protocol/responses/unavailable_error_response.rb +20 -3
- data/lib/cassandra/protocol/responses/unprepared_error_response.rb +11 -2
- data/lib/cassandra/protocol/responses/void_result_response.rb +4 -5
- data/lib/cassandra/protocol/responses/write_failure_error_response.rb +26 -4
- data/lib/cassandra/protocol/responses/write_timeout_error_response.rb +22 -3
- data/lib/cassandra/protocol/v1.rb +98 -37
- data/lib/cassandra/protocol/v3.rb +121 -50
- data/lib/cassandra/protocol/v4.rb +172 -68
- data/lib/cassandra/reconnection.rb +1 -1
- data/lib/cassandra/reconnection/policies.rb +1 -1
- data/lib/cassandra/reconnection/policies/constant.rb +2 -4
- data/lib/cassandra/reconnection/policies/exponential.rb +6 -6
- data/lib/cassandra/result.rb +55 -20
- data/lib/cassandra/retry.rb +8 -8
- data/lib/cassandra/retry/policies.rb +1 -1
- data/lib/cassandra/retry/policies/default.rb +1 -1
- data/lib/cassandra/retry/policies/downgrading_consistency.rb +4 -2
- data/lib/cassandra/retry/policies/fallthrough.rb +1 -1
- data/lib/cassandra/session.rb +24 -16
- data/lib/cassandra/statement.rb +1 -1
- data/lib/cassandra/statements.rb +1 -1
- data/lib/cassandra/statements/batch.rb +16 -10
- data/lib/cassandra/statements/bound.rb +10 -3
- data/lib/cassandra/statements/prepared.rb +62 -18
- data/lib/cassandra/statements/simple.rb +23 -10
- data/lib/cassandra/statements/void.rb +1 -1
- data/lib/cassandra/table.rb +53 -185
- data/lib/cassandra/time.rb +11 -6
- data/lib/cassandra/time_uuid.rb +12 -14
- data/lib/cassandra/timestamp_generator.rb +37 -0
- data/lib/cassandra/timestamp_generator/simple.rb +38 -0
- data/lib/cassandra/timestamp_generator/ticking_on_duplicate.rb +58 -0
- data/lib/cassandra/tuple.rb +4 -4
- data/lib/cassandra/types.rb +109 -71
- data/lib/cassandra/udt.rb +66 -50
- data/lib/cassandra/util.rb +155 -15
- data/lib/cassandra/uuid.rb +20 -21
- data/lib/cassandra/uuid/generator.rb +7 -5
- data/lib/cassandra/version.rb +2 -2
- data/lib/cassandra_murmur3.jar +0 -0
- data/lib/datastax/cassandra.rb +1 -1
- metadata +27 -16
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
#--
|
4
|
-
# Copyright 2013-
|
4
|
+
# Copyright 2013-2016 DataStax, Inc.
|
5
5
|
#
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
7
|
# you may not use this file except in compliance with the License.
|
@@ -48,21 +48,27 @@ module Cassandra
|
|
48
48
|
#
|
49
49
|
# @raise [ArgumentError] if cql statement given is not a String
|
50
50
|
def initialize(cql, params = nil, type_hints = nil, idempotent = false)
|
51
|
-
Util.assert_instance_of(::String, cql)
|
51
|
+
Util.assert_instance_of(::String, cql) do
|
52
|
+
"cql must be a string, #{cql.inspect} given"
|
53
|
+
end
|
52
54
|
|
53
55
|
params ||= EMPTY_LIST
|
54
56
|
|
55
57
|
if params.is_a?(::Hash)
|
56
58
|
params_names = []
|
57
|
-
params = params.each_with_object([]) do |(name, value),
|
59
|
+
params = params.each_with_object([]) do |(name, value), collector|
|
58
60
|
params_names << name
|
59
|
-
|
61
|
+
collector << value
|
60
62
|
end
|
61
63
|
if type_hints && !type_hints.empty?
|
62
|
-
Util.assert_instance_of(::Hash, type_hints)
|
64
|
+
Util.assert_instance_of(::Hash, type_hints) do
|
65
|
+
'type_hints must be a Hash when using named params'
|
66
|
+
end
|
63
67
|
end
|
64
68
|
else
|
65
|
-
Util.assert_instance_of(::Array, params)
|
69
|
+
Util.assert_instance_of(::Array, params) do
|
70
|
+
"params must be an Array or a Hash, #{params.inspect} given"
|
71
|
+
end
|
66
72
|
params_names = EMPTY_LIST
|
67
73
|
end
|
68
74
|
|
@@ -71,19 +77,26 @@ module Cassandra
|
|
71
77
|
if type_hints.is_a?(::Hash)
|
72
78
|
type_hints = params_names.map {|name| type_hints[name] }
|
73
79
|
else
|
74
|
-
Util.assert_instance_of(::Array, type_hints)
|
80
|
+
Util.assert_instance_of(::Array, type_hints) do
|
81
|
+
"type_hints must be an Array or a Hash, #{type_hints.inspect} given"
|
82
|
+
end
|
75
83
|
end
|
76
84
|
|
77
85
|
@cql = cql
|
78
86
|
@params = params
|
79
|
-
@params_types = params.each_with_index.map
|
87
|
+
@params_types = params.each_with_index.map do |value, index|
|
88
|
+
(!type_hints.empty? && type_hints[index] && type_hints[index].is_a?(Type)) ?
|
89
|
+
type_hints[index] :
|
90
|
+
Util.guess_type(value)
|
91
|
+
end
|
80
92
|
@params_names = params_names
|
81
93
|
@idempotent = idempotent
|
82
94
|
end
|
83
95
|
|
84
96
|
# @return [String] a CLI-friendly simple statement representation
|
85
97
|
def inspect
|
86
|
-
"#<#{self.class.name}:0x#{
|
98
|
+
"#<#{self.class.name}:0x#{object_id.to_s(16)} @cql=#{@cql.inspect} " \
|
99
|
+
"@params=#{@params.inspect}>"
|
87
100
|
end
|
88
101
|
|
89
102
|
# @param other [Object, Cassandra::Statements::Simple] object to compare
|
@@ -94,7 +107,7 @@ module Cassandra
|
|
94
107
|
@params == other.params
|
95
108
|
end
|
96
109
|
|
97
|
-
alias
|
110
|
+
alias == eql?
|
98
111
|
end
|
99
112
|
end
|
100
113
|
end
|
data/lib/cassandra/table.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
#--
|
4
|
-
# Copyright 2013-
|
4
|
+
# Copyright 2013-2016 DataStax, Inc.
|
5
5
|
#
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
7
|
# you may not use this file except in compliance with the License.
|
@@ -20,193 +20,74 @@ module Cassandra
|
|
20
20
|
# Represents a cassandra table
|
21
21
|
# @see Cassandra::Keyspace#each_table
|
22
22
|
# @see Cassandra::Keyspace#table
|
23
|
-
class Table
|
24
|
-
# @
|
25
|
-
|
26
|
-
|
27
|
-
:gc_grace_seconds, :caching, :bloom_filter_fp_chance,
|
28
|
-
:populate_io_cache_on_flush, :memtable_flush_period_in_ms,
|
29
|
-
:default_time_to_live, :speculative_retry, :index_interval,
|
30
|
-
:replicate_on_write, :compaction_strategy, :compact_storage,
|
31
|
-
:compression_parameters
|
32
|
-
|
33
|
-
def initialize(comment, read_repair_chance, local_read_repair_chance,
|
34
|
-
gc_grace_seconds, caching, bloom_filter_fp_chance,
|
35
|
-
populate_io_cache_on_flush, memtable_flush_period_in_ms,
|
36
|
-
default_time_to_live, speculative_retry, index_interval,
|
37
|
-
replicate_on_write, min_index_interval, max_index_interval,
|
38
|
-
compaction_strategy, compression_parameters, compact_storage)
|
39
|
-
@comment = comment
|
40
|
-
@read_repair_chance = read_repair_chance
|
41
|
-
@local_read_repair_chance = local_read_repair_chance
|
42
|
-
@gc_grace_seconds = gc_grace_seconds
|
43
|
-
@caching = caching
|
44
|
-
@bloom_filter_fp_chance = bloom_filter_fp_chance
|
45
|
-
@populate_io_cache_on_flush = populate_io_cache_on_flush
|
46
|
-
@memtable_flush_period_in_ms = memtable_flush_period_in_ms
|
47
|
-
@default_time_to_live = default_time_to_live
|
48
|
-
@speculative_retry = speculative_retry
|
49
|
-
@index_interval = index_interval
|
50
|
-
@replicate_on_write = replicate_on_write
|
51
|
-
@min_index_interval = min_index_interval
|
52
|
-
@max_index_interval = max_index_interval
|
53
|
-
@compaction_strategy = compaction_strategy
|
54
|
-
@compression_parameters = compression_parameters
|
55
|
-
@compact_storage = compact_storage
|
56
|
-
end
|
57
|
-
|
58
|
-
def replicate_on_write?
|
59
|
-
@replicate_on_write
|
60
|
-
end
|
61
|
-
|
62
|
-
def populate_io_cache_on_flush?
|
63
|
-
@populate_io_cache_on_flush
|
64
|
-
end
|
65
|
-
|
66
|
-
def compact_storage?
|
67
|
-
@compact_storage
|
68
|
-
end
|
69
|
-
|
70
|
-
def to_cql
|
71
|
-
options = []
|
72
|
-
|
73
|
-
options << 'COMPACT STORAGE' if @compact_storage
|
74
|
-
options << "bloom_filter_fp_chance = #{Util.encode_object(@bloom_filter_fp_chance)}" unless @bloom_filter_fp_chance.nil?
|
75
|
-
options << "caching = #{Util.encode_object(@caching)}" unless @caching.nil?
|
76
|
-
options << "comment = #{Util.encode_object(@comment)}" unless @comment.nil?
|
77
|
-
options << "compaction = #{@compaction_strategy.to_cql}" unless @compaction_strategy.nil?
|
78
|
-
options << "compression = #{Util.encode_object(@compression_parameters)}" unless @compression_parameters.nil?
|
79
|
-
options << "dclocal_read_repair_chance = #{Util.encode_object(@local_read_repair_chance)}" unless @local_read_repair_chance.nil?
|
80
|
-
options << "default_time_to_live = #{Util.encode_object(@default_time_to_live)}" unless @default_time_to_live.nil?
|
81
|
-
options << "gc_grace_seconds = #{Util.encode_object(@gc_grace_seconds)}" unless @gc_grace_seconds.nil?
|
82
|
-
options << "index_interval = #{Util.encode_object(@index_interval)}" unless @index_interval.nil?
|
83
|
-
options << "max_index_interval = #{Util.encode_object(@max_index_interval)}" unless @max_index_interval.nil?
|
84
|
-
options << "memtable_flush_period_in_ms = #{Util.encode_object(@memtable_flush_period_in_ms)}" unless @memtable_flush_period_in_ms.nil?
|
85
|
-
options << "min_index_interval = #{Util.encode_object(@min_index_interval)}" unless @min_index_interval.nil?
|
86
|
-
options << "populate_io_cache_on_flush = '#{@populate_io_cache_on_flush}'" unless @populate_io_cache_on_flush.nil?
|
87
|
-
options << "read_repair_chance = #{Util.encode_object(@read_repair_chance)}" unless @read_repair_chance.nil?
|
88
|
-
options << "replicate_on_write = '#{@replicate_on_write}'" unless @replicate_on_write.nil?
|
89
|
-
options << "speculative_retry = #{Util.encode_object(@speculative_retry)}" unless @speculative_retry.nil?
|
90
|
-
|
91
|
-
options.join("\nAND ")
|
92
|
-
end
|
93
|
-
|
94
|
-
def eql?(other)
|
95
|
-
other.is_a?(Options) &&
|
96
|
-
@comment == other.comment &&
|
97
|
-
@read_repair_chance == other.read_repair_chance &&
|
98
|
-
@local_read_repair_chance == other.local_read_repair_chance &&
|
99
|
-
@gc_grace_seconds == other.gc_grace_seconds &&
|
100
|
-
@caching == other.caching &&
|
101
|
-
@bloom_filter_fp_chance == other.bloom_filter_fp_chance &&
|
102
|
-
@populate_io_cache_on_flush == other.populate_io_cache_on_flush &&
|
103
|
-
@memtable_flush_period_in_ms == other.memtable_flush_period_in_ms &&
|
104
|
-
@default_time_to_live == other.default_time_to_live &&
|
105
|
-
@speculative_retry == other.speculative_retry &&
|
106
|
-
@index_interval == other.index_interval &&
|
107
|
-
@replicate_on_write == other.replicate_on_write &&
|
108
|
-
@compaction_strategy == other.compaction_strategy &&
|
109
|
-
@compression_parameters == other.compression_parameters &&
|
110
|
-
@compact_storage == other.compact_storage
|
111
|
-
end
|
112
|
-
alias :== :eql?
|
113
|
-
end
|
114
|
-
|
115
|
-
# @private
|
116
|
-
class Compaction
|
117
|
-
attr_reader :klass, :options
|
23
|
+
class Table < ColumnContainer
|
24
|
+
# @return [Array<Symbol>] an array of order values (`:asc` or `:desc`) that apply to the
|
25
|
+
# `clustering_columns` array.
|
26
|
+
attr_reader :clustering_order
|
118
27
|
|
119
|
-
def initialize(klass, options)
|
120
|
-
@klass = klass
|
121
|
-
@options = options
|
122
|
-
end
|
123
|
-
|
124
|
-
def to_cql
|
125
|
-
compaction = {'class' => @klass}
|
126
|
-
compaction.merge!(@options)
|
127
|
-
|
128
|
-
Util.encode_hash(compaction)
|
129
|
-
end
|
130
|
-
|
131
|
-
def eql?(other)
|
132
|
-
other.is_a?(Compaction) &&
|
133
|
-
@klass == other.klass &&
|
134
|
-
@options == other.options
|
135
|
-
end
|
136
|
-
alias :== :eql?
|
137
|
-
end
|
138
|
-
|
139
|
-
# @private
|
140
|
-
attr_reader :keyspace
|
141
|
-
# @return [String] table name
|
142
|
-
attr_reader :name
|
143
28
|
# @private
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
@
|
154
|
-
@
|
155
|
-
@
|
156
|
-
@clustering_order = clustering_order
|
29
|
+
def initialize(keyspace,
|
30
|
+
name,
|
31
|
+
partition_key,
|
32
|
+
clustering_columns,
|
33
|
+
other_columns,
|
34
|
+
options,
|
35
|
+
clustering_order,
|
36
|
+
id)
|
37
|
+
super(keyspace, name, partition_key, clustering_columns, other_columns, options, id)
|
38
|
+
@clustering_order = clustering_order.freeze
|
39
|
+
@indexes = []
|
40
|
+
@indexes_hash = {}
|
157
41
|
end
|
158
42
|
|
159
|
-
# @param name [String]
|
160
|
-
# @return [Boolean] whether this table has a given
|
161
|
-
def
|
162
|
-
@
|
43
|
+
# @param name [String] index name
|
44
|
+
# @return [Boolean] whether this table has a given index
|
45
|
+
def has_index?(name)
|
46
|
+
@indexes_hash.key?(name)
|
163
47
|
end
|
164
48
|
|
165
|
-
# @param name [String]
|
166
|
-
# @return [Cassandra::
|
167
|
-
def
|
168
|
-
@
|
49
|
+
# @param name [String] index name
|
50
|
+
# @return [Cassandra::Index, nil] an index or nil
|
51
|
+
def index(name)
|
52
|
+
@indexes_hash[name]
|
169
53
|
end
|
170
54
|
|
171
|
-
# Yield or enumerate each
|
172
|
-
# @overload
|
173
|
-
# @yieldparam
|
55
|
+
# Yield or enumerate each index bound to this table
|
56
|
+
# @overload each_index
|
57
|
+
# @yieldparam index [Cassandra::Index] current index
|
174
58
|
# @return [Cassandra::Table] self
|
175
|
-
# @overload
|
176
|
-
# @return [Array<Cassandra::
|
177
|
-
def
|
59
|
+
# @overload each_index
|
60
|
+
# @return [Array<Cassandra::Index>] a list of indexes
|
61
|
+
def each_index(&block)
|
178
62
|
if block_given?
|
179
|
-
@
|
63
|
+
@indexes.each(&block)
|
180
64
|
self
|
181
65
|
else
|
182
|
-
@
|
66
|
+
@indexes.freeze
|
183
67
|
end
|
184
68
|
end
|
185
|
-
alias
|
69
|
+
alias indexes each_index
|
186
70
|
|
187
71
|
# @return [String] a cql representation of this table
|
188
72
|
def to_cql
|
189
|
-
cql = "CREATE TABLE #{Util.escape_name(@keyspace)}.#{Util.escape_name(@name)} (\n"
|
190
|
-
primary_key =
|
191
|
-
if @partition_key.one? && @clustering_columns.empty?
|
192
|
-
primary_key = @partition_key.first.name
|
193
|
-
end
|
73
|
+
cql = "CREATE TABLE #{Util.escape_name(@keyspace.name)}.#{Util.escape_name(@name)} (\n"
|
74
|
+
primary_key = @partition_key.first.name if @partition_key.one? && @clustering_columns.empty?
|
194
75
|
|
195
76
|
first = true
|
196
|
-
@columns.each do |
|
77
|
+
@columns.each do |column|
|
197
78
|
if first
|
198
79
|
first = false
|
199
80
|
else
|
200
|
-
cql << ",\n"
|
81
|
+
cql << ",\n"
|
201
82
|
end
|
202
|
-
cql << " #{column.name} #{type_to_cql(column.type, column.frozen?)}"
|
83
|
+
cql << " #{Util.escape_name(column.name)} #{type_to_cql(column.type, column.frozen?)}"
|
203
84
|
cql << ' PRIMARY KEY' if primary_key && column.name == primary_key
|
204
85
|
end
|
205
86
|
|
206
87
|
unless primary_key
|
207
88
|
cql << ",\n PRIMARY KEY ("
|
208
89
|
if @partition_key.one?
|
209
|
-
cql << @partition_key.first.name
|
90
|
+
cql << Util.escape_name(@partition_key.first.name)
|
210
91
|
else
|
211
92
|
cql << '('
|
212
93
|
first = true
|
@@ -216,12 +97,12 @@ module Cassandra
|
|
216
97
|
else
|
217
98
|
cql << ', '
|
218
99
|
end
|
219
|
-
cql << column.name
|
100
|
+
cql << Util.escape_name(column.name)
|
220
101
|
end
|
221
102
|
cql << ')'
|
222
103
|
end
|
223
104
|
@clustering_columns.each do |column|
|
224
|
-
cql << ", #{column.name}"
|
105
|
+
cql << ", #{Util.escape_name(column.name)}"
|
225
106
|
end
|
226
107
|
cql << ')'
|
227
108
|
end
|
@@ -229,7 +110,7 @@ module Cassandra
|
|
229
110
|
cql << "\n)\nWITH "
|
230
111
|
|
231
112
|
if @clustering_order.any? {|o| o != :asc}
|
232
|
-
cql <<
|
113
|
+
cql << 'CLUSTERING ORDER BY ('
|
233
114
|
first = true
|
234
115
|
@clustering_columns.zip(@clustering_order) do |column, order|
|
235
116
|
if first
|
@@ -237,7 +118,7 @@ module Cassandra
|
|
237
118
|
else
|
238
119
|
cql << ', '
|
239
120
|
end
|
240
|
-
cql << "#{column.name} #{order.to_s.upcase}"
|
121
|
+
cql << "#{Util.escape_name(column.name)} #{order.to_s.upcase}"
|
241
122
|
end
|
242
123
|
cql << ")\n AND "
|
243
124
|
end
|
@@ -248,22 +129,19 @@ module Cassandra
|
|
248
129
|
end
|
249
130
|
|
250
131
|
# @private
|
251
|
-
def
|
252
|
-
|
132
|
+
def add_index(index)
|
133
|
+
@indexes << index
|
134
|
+
@indexes_hash[index.name] = index
|
253
135
|
end
|
254
136
|
|
255
137
|
# @private
|
256
138
|
def eql?(other)
|
257
139
|
other.is_a?(Table) &&
|
258
|
-
|
259
|
-
@
|
260
|
-
@
|
261
|
-
@clustering_columns == other.clustering_columns &&
|
262
|
-
@columns == other.raw_columns &&
|
263
|
-
@options == other.options &&
|
264
|
-
@clustering_order == other.clustering_order
|
140
|
+
super.eql?(other) &&
|
141
|
+
@clustering_order == other.clustering_order &&
|
142
|
+
@indexes == other.indexes
|
265
143
|
end
|
266
|
-
alias
|
144
|
+
alias == eql?
|
267
145
|
|
268
146
|
private
|
269
147
|
|
@@ -273,7 +151,7 @@ module Cassandra
|
|
273
151
|
when :tuple
|
274
152
|
"frozen <#{type}>"
|
275
153
|
when :udt
|
276
|
-
if @keyspace == type.keyspace
|
154
|
+
if @keyspace.name == type.keyspace
|
277
155
|
"frozen <#{Util.escape_name(type.name)}>"
|
278
156
|
else
|
279
157
|
"frozen <#{Util.escape_name(type.keyspace)}.#{Util.escape_name(type.name)}>"
|
@@ -282,19 +160,9 @@ module Cassandra
|
|
282
160
|
if is_frozen
|
283
161
|
"frozen <#{type}>"
|
284
162
|
else
|
285
|
-
|
163
|
+
type.to_s
|
286
164
|
end
|
287
165
|
end
|
288
166
|
end
|
289
|
-
|
290
|
-
attr_reader :clustering_columns, :clustering_order
|
291
|
-
protected :clustering_columns, :clustering_order
|
292
|
-
|
293
|
-
protected
|
294
|
-
|
295
|
-
# @private
|
296
|
-
def raw_columns
|
297
|
-
@columns
|
298
|
-
end
|
299
167
|
end
|
300
168
|
end
|
data/lib/cassandra/time.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
#--
|
4
|
-
# Copyright 2013-
|
4
|
+
# Copyright 2013-2016 DataStax, Inc.
|
5
5
|
#
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
7
|
# you may not use this file except in compliance with the License.
|
@@ -35,7 +35,7 @@ module Cassandra
|
|
35
35
|
# @private
|
36
36
|
def initialize(nanoseconds = 0)
|
37
37
|
if nanoseconds < 0 && nanoseconds > NANOSECONDS_IN_DAY - 1
|
38
|
-
raise ::ArgumentError,
|
38
|
+
raise ::ArgumentError, 'value must be between 0 and ' \
|
39
39
|
"#{NANOSECONDS_IN_DAY}, #{value.inspect} given"
|
40
40
|
end
|
41
41
|
|
@@ -57,18 +57,23 @@ module Cassandra
|
|
57
57
|
# @return [Integer] an integer between 0 and 60, the number of full seconds
|
58
58
|
# since the last full minutes that this time represents
|
59
59
|
def seconds
|
60
|
-
(@nanoseconds -
|
60
|
+
(@nanoseconds -
|
61
|
+
(hours * NANOSECONDS_IN_HOUR) -
|
62
|
+
(minutes * NANOSECONDS_IN_MINUTE)) / NANOSECONDS_IN_SECOND
|
61
63
|
end
|
62
64
|
|
63
65
|
# @return [Integer] an integer between 0 and 60, the number of full
|
64
66
|
# miliseconds since the last full second that this time represents
|
65
67
|
def miliseconds
|
66
|
-
(@nanoseconds -
|
68
|
+
(@nanoseconds -
|
69
|
+
(hours * NANOSECONDS_IN_HOUR) -
|
70
|
+
(minutes * NANOSECONDS_IN_MINUTE) -
|
71
|
+
(seconds * NANOSECONDS_IN_SECOND)) / NANOSECONDS_IN_MILISECOND
|
67
72
|
end
|
68
73
|
|
69
74
|
# @return [String] a "%H:%M%S.%3N" formatted time string
|
70
75
|
def to_s
|
71
|
-
'%.2d:%.2d:%.2d.%.3d'
|
76
|
+
format('%.2d:%.2d:%.2d.%.3d', hours, minutes, seconds, miliseconds)
|
72
77
|
end
|
73
78
|
|
74
79
|
# @return [Integer] an integer between 0 and 86400000000000, the number of
|
@@ -81,7 +86,7 @@ module Cassandra
|
|
81
86
|
def eql?(other)
|
82
87
|
other.is_a?(Time) && other.to_nanoseconds == @nanoseconds
|
83
88
|
end
|
84
|
-
alias
|
89
|
+
alias == eql?
|
85
90
|
|
86
91
|
# @private
|
87
92
|
def <=>(other)
|