cequel 1.9.1 → 1.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c8ca34779c245ed3e27bb1e4a848d6339e24fb3b
4
- data.tar.gz: 0a05736a716c5cd814cdf2023bd839638cda5295
3
+ metadata.gz: a7ff155091be0d5464305a705c0ec81c48f43b63
4
+ data.tar.gz: 6ddea2f0ae77a64b050cb77d44ead1970b3b1fec
5
5
  SHA512:
6
- metadata.gz: d57a0397a6b72febadce5c620605d65f55e63b37825564fd55e5fc1131178ee59a65112fcc0ea3957da877116b47afb7db431b27180978c3edf1dc40165c4ed9
7
- data.tar.gz: ab9cc098f8b0ed157f513ded783d523975703f779296f5b68ce3dd3e62715292f602c5da9e9c6ca60a8adada1432eadfa7eed29ca1b30837eedae18155ccd914
6
+ metadata.gz: dc693f1b953c426aaac6b65d51f5ae7038933d8040efe7272733f809784522a60b5575ff3fb9744f2f69c1a51f9c5348eb7195e9a4149faa1ad6f0a8c827e4ce
7
+ data.tar.gz: b91aee5ec4d83c483a733cac281d1b1c91ac326f63f3b44a95458707edade557420ffcdcd1cd7018421d02504ea8861e585c0e516ad589c426469014664f1912
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 1.10.0
2
+
3
+ * `:foreign_key` option for belongs_to associations
4
+ ([PR 287](https://github.com/cequel/cequel/pull/287))
5
+ * `:client_compression` option in cequel.yaml
6
+ ([PR 304](https://github.com/cequel/cequel/pull/304))
7
+
1
8
  ## 1.9.1
2
9
 
3
10
  * fix dirty checking for timestamps more precise than Cassandra can store
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cequel (1.9.1)
4
+ cequel (1.10.0)
5
5
  activemodel (~> 4.0)
6
6
  cassandra-driver (~> 2.0)
7
7
 
data/README.md CHANGED
@@ -83,6 +83,9 @@ The `auto` option for the `key` declaration means Cequel will initialize new
83
83
  records with a UUID already generated. This option is only valid for `:uuid` and
84
84
  `:timeuuid` key columns.
85
85
 
86
+ The `belongs_to` association accepts a `:foreign_key` option which allows you to
87
+ specify the attribute used as the partition key.
88
+
86
89
  Note that the `belongs_to` declaration must come *before* the `key` declaration.
87
90
  This is because `belongs_to` defines the
88
91
  [partition key](http://www.datastax.com/documentation/cql/3.0/webhelp/index.html#cql/ddl/../../cassandra/glossary/gloss_glossary.html#glossentry_dhv_s24_bk); the `id` column is
@@ -382,6 +385,20 @@ Post.consistency(:one).find_each { |post| puts post.title }
382
385
 
383
386
  Both read and write consistency default to `QUORUM`.
384
387
 
388
+ ### Compression ###
389
+
390
+ Cassandra supports [frame compression](http://datastax.github.io/ruby-driver/features/#compression),
391
+ which can give you a performance boost if your requests or responses are big. To enable it you can
392
+ specify `client_compression` to use in cequel.yaml.
393
+
394
+ ```yaml
395
+ development:
396
+ host: '127.0.0.1'
397
+ port: 9042
398
+ keyspace: Blog
399
+ client_compression: :lz4
400
+ ```
401
+
385
402
  ### ActiveModel Support ###
386
403
 
387
404
  Cequel supports ActiveModel functionality, such as callbacks, validations,
@@ -32,6 +32,8 @@ module Cequel
32
32
  attr_reader :credentials
33
33
  # @return [Hash] SSL Configuration options
34
34
  attr_reader :ssl_config
35
+ # @return [Symbol] The client compression option
36
+ attr_reader :client_compression
35
37
 
36
38
  #
37
39
  # @!method write(statement, *bind_vars)
@@ -139,6 +141,7 @@ module Cequel
139
141
 
140
142
  @name = configuration[:keyspace]
141
143
  @default_consistency = configuration[:default_consistency].try(:to_sym)
144
+ @client_compression = configuration[:client_compression].try(:to_sym)
142
145
 
143
146
  # reset the connections
144
147
  clear_active_connections!
@@ -284,6 +287,7 @@ module Cequel
284
287
  {hosts: hosts, port: port}.tap do |options|
285
288
  options.merge!(credentials) if credentials
286
289
  options.merge!(ssl_config) if ssl_config
290
+ options.merge!(compression: client_compression) if client_compression
287
291
  end
288
292
  end
289
293
 
@@ -108,14 +108,16 @@ module Cequel
108
108
  "belongs_to association must be declared before declaring " \
109
109
  "key(s)"
110
110
  end
111
-
111
+
112
112
  key_options = options.extract!(:partition)
113
113
 
114
114
  self.parent_association =
115
115
  BelongsToAssociation.new(self, name.to_sym, options)
116
116
 
117
- parent_association.association_key_columns.each do |column|
118
- key :"#{name}_#{column.name}", column.type, key_options
117
+ parent_association.association_key_columns.each_with_index do |column, i|
118
+ foreign_key_parts = self.parent_association.foreign_keys
119
+ foreign_key = foreign_key_parts.any? ? foreign_key_parts[i] : "#{name}_#{column.name}"
120
+ key foreign_key.to_sym, column.type, key_options
119
121
  end
120
122
  def_parent_association_accessors
121
123
  end
@@ -17,6 +17,8 @@ module Cequel
17
17
  attr_reader :name
18
18
  # @return [String] name of parent class
19
19
  attr_reader :association_class_name
20
+ # @return [Array] array of foreign key symbols
21
+ attr_reader :foreign_keys
20
22
 
21
23
  # @!attribute [r] association_key_columns
22
24
  # @return [Array<Schema::Column>] key columns on the parent class
@@ -31,8 +33,9 @@ module Cequel
31
33
  # @api private
32
34
  #
33
35
  def initialize(owner_class, name, options = {})
34
- options.assert_valid_keys(:class_name)
36
+ options.assert_valid_keys(:class_name, :foreign_key)
35
37
 
38
+ @foreign_keys = Array(options.fetch(:foreign_key, [])).map { |x| x.to_sym }
36
39
  @owner_class, @name = owner_class, name.to_sym
37
40
  @association_class_name =
38
41
  options.fetch(:class_name, @name.to_s.classify)
@@ -1,5 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Cequel
3
3
  # The current version of the library
4
- VERSION = '1.9.1'
4
+ VERSION = '1.10.0'
5
5
  end
@@ -104,6 +104,18 @@ describe Cequel::Metal::Keyspace do
104
104
  end
105
105
  end
106
106
 
107
+ describe "#client_compression" do
108
+ let(:client_compression) { :lz4 }
109
+ let(:connect) do
110
+ Cequel.connect host: Cequel::SpecSupport::Helpers.host,
111
+ port: Cequel::SpecSupport::Helpers.port,
112
+ client_compression: client_compression
113
+ end
114
+ it "client compression settings get extracted correctly for sending to cluster" do
115
+ expect(connect.client_compression).to eq client_compression
116
+ end
117
+ end
118
+
107
119
  describe "#execute" do
108
120
  let(:statement) { "SELECT id FROM posts" }
109
121
 
@@ -186,6 +186,51 @@ describe Cequel::Record::Associations do
186
186
  end
187
187
  end
188
188
 
189
+ context 'with foreign_key option' do
190
+ model :Parent do
191
+ key :parent_id, :uuid, auto: true
192
+ column :name, :text
193
+ has_many :children, class_name: 'Child'
194
+ end
195
+
196
+ model :Child do
197
+ belongs_to :parent, partition: true, foreign_key: [:parent_id]
198
+ key :child_id, :uuid, auto: true
199
+ column :name, :text
200
+ end
201
+
202
+ it "should add parent's keys as first keys" do
203
+ expect(Child.key_column_names.first(2)).to eq([:parent_id, :child_id])
204
+ end
205
+
206
+ it "should add parent's keys as partition keys" do
207
+ expect(Child.partition_key_column_names).to eq([:parent_id])
208
+ end
209
+
210
+ context 'with multiple foreign_keys' do
211
+ model :Foo do
212
+ key :account_id, :uuid, auto: true
213
+ key :parent_id, :uuid, auto: true
214
+ column :name, :text
215
+ has_many :children, class_name: 'Child'
216
+ end
217
+
218
+ model :Bar do
219
+ belongs_to :foo, partition: true, foreign_key: [:account_id, :parent_id]
220
+ key :child_id, :uuid, auto: true
221
+ column :name, :text
222
+ end
223
+
224
+ it "should add parent's keys as first keys" do
225
+ expect(Bar.key_column_names).to eq([:account_id, :parent_id, :child_id])
226
+ end
227
+
228
+ it "should add parent's keys as partition keys" do
229
+ expect(Bar.partition_key_column_names).to eq([:account_id, :parent_id])
230
+ end
231
+ end
232
+ end
233
+
189
234
  end
190
235
 
191
236
  describe '::has_many' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.1
4
+ version: 1.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mat Brown
@@ -29,7 +29,7 @@ authors:
29
29
  autorequire:
30
30
  bindir: bin
31
31
  cert_chain: []
32
- date: 2016-05-15 00:00:00.000000000 Z
32
+ date: 2016-06-28 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: activemodel