arql 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5ab8f5f261c0a207fa3d1d44798ec7f86864a0ff28fbb162bae3aa6abdae2311
4
- data.tar.gz: 8c8a4238ad33800d565ff9546539213233a0c71f7759d77ad3f273825352f94c
3
+ metadata.gz: 50c397f035d89506f745002163459930acf16862c71aba29f61e3843da9fefef
4
+ data.tar.gz: b4dce80cde7add1ec3aafbb54e9d12736bc5e0d661f0f28aebcaf66c3bbc98a3
5
5
  SHA512:
6
- metadata.gz: 3d4e836e5b0622c66ec1295bac29faa5ec6aa671fe6f88be30be69bb13366b150cf81193085d1618b6f9f63222996b750166e72fa2b944da6a9010f72314315e
7
- data.tar.gz: 7f6ba7270d4b9125906dff1d4c7a0d4a22b806a97b2ffbbecec7036524a9d53b0e1b2f7bd3f09d4d966dfc2cb625602631291b6074d0c5c8e22eed6266e7beb2
6
+ metadata.gz: c60d3e7cd72361b59239c26967079e9c9baa0f28ff16caec7b20074d3a08636670e41afc7290fea95bfe00bc8ca4e78586aa89a996974c37364dc99c1e8c4855
7
+ data.tar.gz: 64f66abb0e4494b3f2b49b6972af3aab5a5e030f5b9ee9f51e074136a01eeeb2b8647aacad7c8d7501f5ea1c195d9100b93040a634c4db4e552d23d141df046c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- arql (0.1.4)
4
+ arql (0.1.5)
5
5
  activerecord (~> 6.0.3)
6
6
  activesupport (~> 6.0.3)
7
7
  mysql2 (~> 0.5.3)
@@ -1,4 +1,32 @@
1
1
  module Arql
2
+ module Extension
3
+ extend ActiveSupport::Concern
4
+
5
+ def to_insert_sql
6
+ self.class.to_insert_sql([self])
7
+ end
8
+
9
+ def to_upsert_sql
10
+ self.class.to_upsert_sql([self])
11
+ end
12
+
13
+ class_methods do
14
+ def to_insert_sql(records, batch_size=1)
15
+ to_sql(records, :skip, batch_size)
16
+ end
17
+
18
+ def to_upsert_sql(records, batch_size=1)
19
+ to_sql(records, :update, batch_size)
20
+ end
21
+
22
+ def to_sql(records, on_duplicate, batch_size)
23
+ records.in_groups_of(batch_size, false).map do |group|
24
+ ActiveRecord::InsertAll.new(self, group.map(&:attributes), on_duplicate: on_duplicate).send(:to_sql) + ';'
25
+ end.join("\n")
26
+ end
27
+ end
28
+ end
29
+
2
30
  class Definition
3
31
  class << self
4
32
  def models
@@ -15,6 +43,7 @@ module Arql
15
43
  const_name = 'Modul' if const_name == 'Module'
16
44
  const_name = 'Clazz' if const_name == 'Class'
17
45
  Class.new(ActiveRecord::Base) do
46
+ include Arql::Extension
18
47
  self.primary_key = pkey
19
48
  self.table_name = table_name
20
49
  self.inheritance_column = nil
@@ -0,0 +1,15 @@
1
+ class Array
2
+ def to_insert_sql(batch_size=500)
3
+ raise 'All element should be an ActiveRecord instance object' unless all? { |e| e.is_a?(ActiveRecord::Base) }
4
+ group_by(&:class).map do |(klass, records)|
5
+ klass.to_insert_sql(records, batch_size)
6
+ end.join("\n")
7
+ end
8
+
9
+ def to_upsert_sql(batch_size=500)
10
+ raise 'All element should be an ActiveRecord instance object' unless all? { |e| e.is_a?(ActiveRecord::Base) }
11
+ group_by(&:class).map do |(klass, records)|
12
+ klass.to_upsert_sql(records, batch_size)
13
+ end.join("\n")
14
+ end
15
+ end
data/lib/arql/ext.rb ADDED
@@ -0,0 +1 @@
1
+ require 'arql/ext/array'
data/lib/arql/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Arql
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
data/lib/arql.rb CHANGED
@@ -4,6 +4,7 @@ require 'table_print'
4
4
  require "arql/version"
5
5
  require 'arql/id'
6
6
  require 'arql/multi_io'
7
+ require 'arql/ext'
7
8
  require "arql/connection"
8
9
  require "arql/definition"
9
10
  require "arql/repl"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Liu Xiang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-08 00:00:00.000000000 Z
11
+ date: 2020-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mysql2
@@ -178,6 +178,8 @@ files:
178
178
  - lib/arql/commands/table.rb
179
179
  - lib/arql/connection.rb
180
180
  - lib/arql/definition.rb
181
+ - lib/arql/ext.rb
182
+ - lib/arql/ext/array.rb
181
183
  - lib/arql/id.rb
182
184
  - lib/arql/multi_io.rb
183
185
  - lib/arql/repl.rb