arql 0.2.12 → 0.3.1

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.
@@ -1,3 +1,4 @@
1
+ require 'arql/concerns'
1
2
  module Arql
2
3
  module Extension
3
4
  extend ActiveSupport::Concern
@@ -34,6 +35,10 @@ module Arql
34
35
  [self].write_excel(filename, *fields, **options)
35
36
  end
36
37
 
38
+ def dump(filename, batch_size=500)
39
+ [self].dump(filename, batch_size)
40
+ end
41
+
37
42
  included do
38
43
  end
39
44
 
@@ -65,6 +70,10 @@ module Arql
65
70
  def to_create_sql
66
71
  ActiveRecord::Base.connection.exec_query("show create table #{table_name}").rows.last.last
67
72
  end
73
+
74
+ def dump(filename, no_create_table=false)
75
+ Arql::Mysqldump.new.dump_table(filename, table_name, no_create_table)
76
+ end
68
77
  end
69
78
  end
70
79
 
@@ -145,6 +154,7 @@ module Arql
145
154
  @@models = []
146
155
  ActiveRecord::Base.connection.tap do |conn|
147
156
  Object.const_set('ArqlModel', Class.new(ActiveRecord::Base) do
157
+ include ::Arql::Concerns::TableDataDefinition
148
158
  self.abstract_class = true
149
159
 
150
160
  define_singleton_method(:indexes) do
@@ -158,230 +168,6 @@ module Arql
158
168
  }
159
169
  end.t
160
170
  end
161
- # Add a new +type+ column named +column_name+ to +table_name+.
162
- #
163
- # The +type+ parameter is normally one of the migrations native types,
164
- # which is one of the following:
165
- # <tt>:primary_key</tt>, <tt>:string</tt>, <tt>:text</tt>,
166
- # <tt>:integer</tt>, <tt>:bigint</tt>, <tt>:float</tt>, <tt>:decimal</tt>, <tt>:numeric</tt>,
167
- # <tt>:datetime</tt>, <tt>:time</tt>, <tt>:date</tt>,
168
- # <tt>:binary</tt>, <tt>:boolean</tt>.
169
- #
170
- # You may use a type not in this list as long as it is supported by your
171
- # database (for example, "polygon" in MySQL), but this will not be database
172
- # agnostic and should usually be avoided.
173
- #
174
- # Available options are (none of these exists by default):
175
- # * <tt>:limit</tt> -
176
- # Requests a maximum column length. This is the number of characters for a <tt>:string</tt> column
177
- # and number of bytes for <tt>:text</tt>, <tt>:binary</tt>, and <tt>:integer</tt> columns.
178
- # This option is ignored by some backends.
179
- # * <tt>:default</tt> -
180
- # The column's default value. Use +nil+ for +NULL+.
181
- # * <tt>:null</tt> -
182
- # Allows or disallows +NULL+ values in the column.
183
- # * <tt>:precision</tt> -
184
- # Specifies the precision for the <tt>:decimal</tt>, <tt>:numeric</tt>,
185
- # <tt>:datetime</tt>, and <tt>:time</tt> columns.
186
- # * <tt>:scale</tt> -
187
- # Specifies the scale for the <tt>:decimal</tt> and <tt>:numeric</tt> columns.
188
- # * <tt>:collation</tt> -
189
- # Specifies the collation for a <tt>:string</tt> or <tt>:text</tt> column. If not specified, the
190
- # column will have the same collation as the table.
191
- # * <tt>:comment</tt> -
192
- # Specifies the comment for the column. This option is ignored by some backends.
193
- #
194
- # Note: The precision is the total number of significant digits,
195
- # and the scale is the number of digits that can be stored following
196
- # the decimal point. For example, the number 123.45 has a precision of 5
197
- # and a scale of 2. A decimal with a precision of 5 and a scale of 2 can
198
- # range from -999.99 to 999.99.
199
- #
200
- # Please be aware of different RDBMS implementations behavior with
201
- # <tt>:decimal</tt> columns:
202
- # * The SQL standard says the default scale should be 0, <tt>:scale</tt> <=
203
- # <tt>:precision</tt>, and makes no comments about the requirements of
204
- # <tt>:precision</tt>.
205
- # * MySQL: <tt>:precision</tt> [1..63], <tt>:scale</tt> [0..30].
206
- # Default is (10,0).
207
- # * PostgreSQL: <tt>:precision</tt> [1..infinity],
208
- # <tt>:scale</tt> [0..infinity]. No default.
209
- # * SQLite3: No restrictions on <tt>:precision</tt> and <tt>:scale</tt>,
210
- # but the maximum supported <tt>:precision</tt> is 16. No default.
211
- # * Oracle: <tt>:precision</tt> [1..38], <tt>:scale</tt> [-84..127].
212
- # Default is (38,0).
213
- # * DB2: <tt>:precision</tt> [1..63], <tt>:scale</tt> [0..62].
214
- # Default unknown.
215
- # * SqlServer: <tt>:precision</tt> [1..38], <tt>:scale</tt> [0..38].
216
- # Default (38,0).
217
- #
218
- # == Examples
219
- #
220
- # User.add_column(:picture, :binary, limit: 2.megabytes)
221
- # # ALTER TABLE "users" ADD "picture" blob(2097152)
222
- #
223
- # Article.add_column(:status, :string, limit: 20, default: 'draft', null: false)
224
- # # ALTER TABLE "articles" ADD "status" varchar(20) DEFAULT 'draft' NOT NULL
225
- #
226
- # Answer.add_column(:bill_gates_money, :decimal, precision: 15, scale: 2)
227
- # # ALTER TABLE "answers" ADD "bill_gates_money" decimal(15,2)
228
- #
229
- # Measurement.add_column(:sensor_reading, :decimal, precision: 30, scale: 20)
230
- # # ALTER TABLE "measurements" ADD "sensor_reading" decimal(30,20)
231
- #
232
- # # While :scale defaults to zero on most databases, it
233
- # # probably wouldn't hurt to include it.
234
- # Measurement.add_column(:huge_integer, :decimal, precision: 30)
235
- # # ALTER TABLE "measurements" ADD "huge_integer" decimal(30)
236
- #
237
- # # Defines a column that stores an array of a type.
238
- # User.add_column(:skills, :text, array: true)
239
- # # ALTER TABLE "users" ADD "skills" text[]
240
- #
241
- # # Defines a column with a database-specific type.
242
- # Shape.add_column(:triangle, 'polygon')
243
- # # ALTER TABLE "shapes" ADD "triangle" polygon
244
- define_singleton_method(:add_column) do |column_name, type, **options|
245
- conn.add_column(table_name, column_name, type, **options)
246
- end
247
-
248
- # Changes the column's definition according to the new options.
249
- # See TableDefinition#column for details of the options you can use.
250
- #
251
- # Supplier.change_column(:name, :string, limit: 80)
252
- # Post.change_column(:description, :text)
253
- #
254
- define_singleton_method(:change_column) do |column_name, type, options = {}|
255
- conn.change_column(table_name, column_name, type, options)
256
- end
257
-
258
- # Removes the column from the table definition.
259
- #
260
- # Supplier.remove_column(:qualification)
261
- #
262
- # The +type+ and +options+ parameters will be ignored if present. It can be helpful
263
- # to provide these in a migration's +change+ method so it can be reverted.
264
- # In that case, +type+ and +options+ will be used by #add_column.
265
- # Indexes on the column are automatically removed.
266
- define_singleton_method(:remove_column) do |column_name, type = nil, **options|
267
- conn.remove_column(table_name, column_name, type, **options)
268
- end
269
-
270
- # Adds a new index to the table. +column_name+ can be a single Symbol, or
271
- # an Array of Symbols.
272
- #
273
- # The index will be named after the table and the column name(s), unless
274
- # you pass <tt>:name</tt> as an option.
275
- #
276
- # ====== Creating a simple index
277
- #
278
- # Supplier.add_index(:name)
279
- #
280
- # generates:
281
- #
282
- # CREATE INDEX suppliers_name_index ON suppliers(name)
283
- #
284
- # ====== Creating a unique index
285
- #
286
- # Account.add_index([:branch_id, :party_id], unique: true)
287
- #
288
- # generates:
289
- #
290
- # CREATE UNIQUE INDEX accounts_branch_id_party_id_index ON accounts(branch_id, party_id)
291
- #
292
- # ====== Creating a named index
293
- #
294
- # Account.add_index([:branch_id, :party_id], unique: true, name: 'by_branch_party')
295
- #
296
- # generates:
297
- #
298
- # CREATE UNIQUE INDEX by_branch_party ON accounts(branch_id, party_id)
299
- #
300
- # ====== Creating an index with specific key length
301
- #
302
- # Account.add_index(:name, name: 'by_name', length: 10)
303
- #
304
- # generates:
305
- #
306
- # CREATE INDEX by_name ON accounts(name(10))
307
- #
308
- # ====== Creating an index with specific key lengths for multiple keys
309
- #
310
- # Account.add_index([:name, :surname], name: 'by_name_surname', length: {name: 10, surname: 15})
311
- #
312
- # generates:
313
- #
314
- # CREATE INDEX by_name_surname ON accounts(name(10), surname(15))
315
- #
316
- # Note: SQLite doesn't support index length.
317
- #
318
- # ====== Creating an index with a sort order (desc or asc, asc is the default)
319
- #
320
- # Account.add_index([:branch_id, :party_id, :surname], order: {branch_id: :desc, party_id: :asc})
321
- #
322
- # generates:
323
- #
324
- # CREATE INDEX by_branch_desc_party ON accounts(branch_id DESC, party_id ASC, surname)
325
- #
326
- # Note: MySQL only supports index order from 8.0.1 onwards (earlier versions accepted the syntax but ignored it).
327
- #
328
- # ====== Creating a partial index
329
- #
330
- # Account.add_index([:branch_id, :party_id], unique: true, where: "active")
331
- #
332
- # generates:
333
- #
334
- # CREATE UNIQUE INDEX index_accounts_on_branch_id_and_party_id ON accounts(branch_id, party_id) WHERE active
335
- #
336
- # Note: Partial indexes are only supported for PostgreSQL and SQLite 3.8.0+.
337
- #
338
- # ====== Creating an index with a specific method
339
- #
340
- # Developer.add_index(:name, using: 'btree')
341
- #
342
- # generates:
343
- #
344
- # CREATE INDEX index_developers_on_name ON developers USING btree (name) -- PostgreSQL
345
- # CREATE INDEX index_developers_on_name USING btree ON developers (name) -- MySQL
346
- #
347
- # Note: only supported by PostgreSQL and MySQL
348
- #
349
- # ====== Creating an index with a specific operator class
350
- #
351
- # Developer.add_index(:name, using: 'gist', opclass: :gist_trgm_ops)
352
- # # CREATE INDEX developers_on_name ON developers USING gist (name gist_trgm_ops) -- PostgreSQL
353
- #
354
- # Developer.add_index([:name, :city], using: 'gist', opclass: { city: :gist_trgm_ops })
355
- # # CREATE INDEX developers_on_name_and_city ON developers USING gist (name, city gist_trgm_ops) -- PostgreSQL
356
- #
357
- # Developer.add_index([:name, :city], using: 'gist', opclass: :gist_trgm_ops)
358
- # # CREATE INDEX developers_on_name_and_city ON developers USING gist (name gist_trgm_ops, city gist_trgm_ops) -- PostgreSQL
359
- #
360
- # Note: only supported by PostgreSQL
361
- #
362
- # ====== Creating an index with a specific type
363
- #
364
- # Developer.add_index(:name, type: :fulltext)
365
- #
366
- # generates:
367
- #
368
- # CREATE FULLTEXT INDEX index_developers_on_name ON developers (name) -- MySQL
369
- #
370
- # Note: only supported by MySQL.
371
- #
372
- # ====== Creating an index with a specific algorithm
373
- #
374
- # Developer.add_index(:name, algorithm: :concurrently)
375
- # # CREATE INDEX CONCURRENTLY developers_on_name on developers (name)
376
- #
377
- # Note: only supported by PostgreSQL.
378
- #
379
- # Concurrently adding an index is not supported in a transaction.
380
- #
381
- # For more information see the {"Transactional Migrations" section}[rdoc-ref:Migration].
382
- define_singleton_method(:add_index) do |column_name, options = {}|
383
- conn.add_index(table_name, column_name, options)
384
- end
385
171
  end)
386
172
  conn.tables.each do |table_name|
387
173
  table_comment = conn.table_comment(table_name)
@@ -459,6 +245,9 @@ module Arql
459
245
  records.write_excel(filename, *fields, **options)
460
246
  end
461
247
 
248
+ def dump(filename, batch_size=500)
249
+ records.dump(filename, batch_size)
250
+ end
462
251
  end
463
252
  end
464
253
  end
@@ -127,4 +127,13 @@ class Array
127
127
  end
128
128
  end
129
129
  end
130
+
131
+ def dump(filename, batch_size=500)
132
+ File.open(File.expand_path(filename), 'w') do |file|
133
+ group_by(&:class).each do |(klass, records)|
134
+ file.puts(klass.to_upsert_sql(records, batch_size))
135
+ end
136
+ end
137
+ {size: size, file: File.expand_path(filename)}
138
+ end
130
139
  end
@@ -1,6 +1,9 @@
1
+ require 'arql/concerns'
1
2
  module Kernel
2
3
  CSV_BOM = "\xef\xbb\xbf"
3
4
 
5
+ include ::Arql::Concerns::GlobalDataDefinition
6
+
4
7
  def sql(sql)
5
8
  ActiveRecord::Base.connection.exec_query(sql)
6
9
  end
@@ -92,7 +95,7 @@ module Kernel
92
95
  def generate_excel(filename)
93
96
  Axlsx::Package.new do |package|
94
97
  yield(package.workbook)
95
- package.serialize(filename)
98
+ package.serialize(File.expand_path(filename))
96
99
  end
97
100
  end
98
101
 
@@ -106,159 +109,4 @@ module Kernel
106
109
  end
107
110
  end
108
111
 
109
- # Example:
110
- #
111
- # create_table :post, id: false, primary_key: :id do |t|
112
- # t.column :id, :bigint, precison: 19, comment: 'ID'
113
- # t.column :name, :string, comment: '名称'
114
- # t.column :gmt_created, :datetime, comment: '创建时间'
115
- # t.column :gmt_modified, :datetime, comment: '最后修改时间'
116
- # end
117
- #
118
- # Creates a new table with the name +table_name+. +table_name+ may either
119
- # be a String or a Symbol.
120
- #
121
- # There are two ways to work with #create_table. You can use the block
122
- # form or the regular form, like this:
123
- #
124
- # === Block form
125
- #
126
- # # create_table() passes a TableDefinition object to the block.
127
- # # This form will not only create the table, but also columns for the
128
- # # table.
129
- #
130
- # create_table(:suppliers) do |t|
131
- # t.column :name, :string, limit: 60
132
- # # Other fields here
133
- # end
134
- #
135
- # === Block form, with shorthand
136
- #
137
- # # You can also use the column types as method calls, rather than calling the column method.
138
- # create_table(:suppliers) do |t|
139
- # t.string :name, limit: 60
140
- # # Other fields here
141
- # end
142
- #
143
- # === Regular form
144
- #
145
- # # Creates a table called 'suppliers' with no columns.
146
- # create_table(:suppliers)
147
- # # Add a column to 'suppliers'.
148
- # add_column(:suppliers, :name, :string, {limit: 60})
149
- #
150
- # The +options+ hash can include the following keys:
151
- # [<tt>:id</tt>]
152
- # Whether to automatically add a primary key column. Defaults to true.
153
- # Join tables for {ActiveRecord::Base.has_and_belongs_to_many}[rdoc-ref:Associations::ClassMethods#has_and_belongs_to_many] should set it to false.
154
- #
155
- # A Symbol can be used to specify the type of the generated primary key column.
156
- # [<tt>:primary_key</tt>]
157
- # The name of the primary key, if one is to be added automatically.
158
- # Defaults to +id+. If <tt>:id</tt> is false, then this option is ignored.
159
- #
160
- # If an array is passed, a composite primary key will be created.
161
- #
162
- # Note that Active Record models will automatically detect their
163
- # primary key. This can be avoided by using
164
- # {self.primary_key=}[rdoc-ref:AttributeMethods::PrimaryKey::ClassMethods#primary_key=] on the model
165
- # to define the key explicitly.
166
- #
167
- # [<tt>:options</tt>]
168
- # Any extra options you want appended to the table definition.
169
- # [<tt>:temporary</tt>]
170
- # Make a temporary table.
171
- # [<tt>:force</tt>]
172
- # Set to true to drop the table before creating it.
173
- # Set to +:cascade+ to drop dependent objects as well.
174
- # Defaults to false.
175
- # [<tt>:if_not_exists</tt>]
176
- # Set to true to avoid raising an error when the table already exists.
177
- # Defaults to false.
178
- # [<tt>:as</tt>]
179
- # SQL to use to generate the table. When this option is used, the block is
180
- # ignored, as are the <tt>:id</tt> and <tt>:primary_key</tt> options.
181
- #
182
- # ====== Add a backend specific option to the generated SQL (MySQL)
183
- #
184
- # create_table(:suppliers, options: 'ENGINE=InnoDB DEFAULT CHARSET=utf8mb4')
185
- #
186
- # generates:
187
- #
188
- # CREATE TABLE suppliers (
189
- # id bigint auto_increment PRIMARY KEY
190
- # ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
191
- #
192
- # ====== Rename the primary key column
193
- #
194
- # create_table(:objects, primary_key: 'guid') do |t|
195
- # t.column :name, :string, limit: 80
196
- # end
197
- #
198
- # generates:
199
- #
200
- # CREATE TABLE objects (
201
- # guid bigint auto_increment PRIMARY KEY,
202
- # name varchar(80)
203
- # )
204
- #
205
- # ====== Change the primary key column type
206
- #
207
- # create_table(:tags, id: :string) do |t|
208
- # t.column :label, :string
209
- # end
210
- #
211
- # generates:
212
- #
213
- # CREATE TABLE tags (
214
- # id varchar PRIMARY KEY,
215
- # label varchar
216
- # )
217
- #
218
- # ====== Create a composite primary key
219
- #
220
- # create_table(:orders, primary_key: [:product_id, :client_id]) do |t|
221
- # t.belongs_to :product
222
- # t.belongs_to :client
223
- # end
224
- #
225
- # generates:
226
- #
227
- # CREATE TABLE order (
228
- # product_id bigint NOT NULL,
229
- # client_id bigint NOT NULL
230
- # );
231
- #
232
- # ALTER TABLE ONLY "orders"
233
- # ADD CONSTRAINT orders_pkey PRIMARY KEY (product_id, client_id);
234
- #
235
- # ====== Do not add a primary key column
236
- #
237
- # create_table(:categories_suppliers, id: false) do |t|
238
- # t.column :category_id, :bigint
239
- # t.column :supplier_id, :bigint
240
- # end
241
- #
242
- # generates:
243
- #
244
- # CREATE TABLE categories_suppliers (
245
- # category_id bigint,
246
- # supplier_id bigint
247
- # )
248
- #
249
- # ====== Create a temporary table based on a query
250
- #
251
- # create_table(:long_query, temporary: true,
252
- # as: "SELECT * FROM orders INNER JOIN line_items ON order_id=orders.id")
253
- #
254
- # generates:
255
- #
256
- # CREATE TEMPORARY TABLE long_query AS
257
- # SELECT * FROM orders INNER JOIN line_items ON order_id=orders.id
258
- #
259
- # See also TableDefinition#column for details on how to create columns.
260
-
261
- def create_table(table_name, **options, &blk)
262
- ActiveRecord::Base.connection.create_table(table_name, **options, &blk)
263
- end
264
112
  end
@@ -2,4 +2,12 @@ class String
2
2
  def p
3
3
  puts self
4
4
  end
5
+
6
+ def expa
7
+ File.expand_path(self)
8
+ end
9
+
10
+ def f
11
+ expa
12
+ end
5
13
  end
@@ -0,0 +1,44 @@
1
+ module Arql
2
+ class Mysqldump
3
+
4
+ def initialize(options = nil)
5
+ options ||= App.connect_options
6
+ @options = options
7
+ if options[:socket]
8
+ port_or_sock = "-S #{options[:socket]}"
9
+ else
10
+ port_or_sock = "-P #{options[:port] || 3306}"
11
+ end
12
+ @base_dump_cmd = "mysqldump -u %{user} -h %{host} %{port_or_sock} %{password} --skip-lock-tables " % {
13
+ user: options[:username],
14
+ host: options[:host],
15
+ password: options[:password].presence.try { |e| "-p#{e}" } || '',
16
+ port_or_sock: port_or_sock
17
+ }
18
+ end
19
+
20
+ def dump_table(filename, table_name, no_create_table = false)
21
+ system dump_table_cmd(table_name, no_create_table) + " > #{filename}"
22
+ end
23
+
24
+ def dump_database(filename, no_create_db = false)
25
+ system dump_database_cmd(no_create_db) + " > #{filename}"
26
+ end
27
+
28
+ def dump_table_cmd(table_name, no_create_table = false)
29
+ @base_dump_cmd + " " + if no_create_table
30
+ "--no-create-info #{@options[:database]} #{table_name}"
31
+ else
32
+ "--add-drop-table #{@options[:database]} #{table_name}"
33
+ end
34
+ end
35
+
36
+ def dump_database_cmd(no_create_db = false)
37
+ @base_dump_cmd + " " + if no_create_db
38
+ "--no-create-db --add-drop-database --databases #{@options[:database]}"
39
+ else
40
+ "--add-drop-database --add-drop-table --databases #{@options[:database]}"
41
+ end
42
+ end
43
+ end
44
+ end
data/lib/arql/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Arql
2
- VERSION = "0.2.12"
2
+ VERSION = "0.3.1"
3
3
  end
data/lib/arql.rb CHANGED
@@ -10,6 +10,7 @@ require "arql/repl"
10
10
  require "arql/ssh_proxy"
11
11
  require "arql/app"
12
12
  require "arql/cli"
13
+ require "arql/mysqldump"
13
14
 
14
15
  module Arql
15
16
  end
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.2.12
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Liu Xiang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-02 00:00:00.000000000 Z
11
+ date: 2021-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mysql2
@@ -42,16 +42,22 @@ dependencies:
42
42
  name: activerecord
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 6.0.3
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: 6.2.0
48
51
  type: :runtime
49
52
  prerelease: false
50
53
  version_requirements: !ruby/object:Gem::Requirement
51
54
  requirements:
52
- - - "~>"
55
+ - - ">="
53
56
  - !ruby/object:Gem::Version
54
57
  version: 6.0.3
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: 6.2.0
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: composite_primary_keys
57
63
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +134,14 @@ dependencies:
128
134
  requirements:
129
135
  - - "~>"
130
136
  - !ruby/object:Gem::Version
131
- version: 1.1.0
137
+ version: 1.2.0
132
138
  type: :runtime
133
139
  prerelease: false
134
140
  version_requirements: !ruby/object:Gem::Requirement
135
141
  requirements:
136
142
  - - "~>"
137
143
  - !ruby/object:Gem::Version
138
- version: 1.1.0
144
+ version: 1.2.0
139
145
  - !ruby/object:Gem::Dependency
140
146
  name: rainbow
141
147
  requirement: !ruby/object:Gem::Requirement
@@ -237,6 +243,9 @@ files:
237
243
  - lib/arql/commands/redefine.rb
238
244
  - lib/arql/commands/show_sql.rb
239
245
  - lib/arql/commands/table.rb
246
+ - lib/arql/concerns.rb
247
+ - lib/arql/concerns/global_data_definition.rb
248
+ - lib/arql/concerns/table_data_definition.rb
240
249
  - lib/arql/connection.rb
241
250
  - lib/arql/definition.rb
242
251
  - lib/arql/ext.rb
@@ -248,6 +257,7 @@ files:
248
257
  - lib/arql/ext/time.rb
249
258
  - lib/arql/id.rb
250
259
  - lib/arql/multi_io.rb
260
+ - lib/arql/mysqldump.rb
251
261
  - lib/arql/repl.rb
252
262
  - lib/arql/ssh_proxy.rb
253
263
  - lib/arql/ssh_proxy_patch.rb
@@ -264,14 +274,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
264
274
  requirements:
265
275
  - - ">="
266
276
  - !ruby/object:Gem::Version
267
- version: 2.3.0
277
+ version: 2.6.0
268
278
  required_rubygems_version: !ruby/object:Gem::Requirement
269
279
  requirements:
270
280
  - - ">="
271
281
  - !ruby/object:Gem::Version
272
282
  version: '0'
273
283
  requirements: []
274
- rubygems_version: 3.1.4
284
+ rubygems_version: 3.2.3
275
285
  signing_key:
276
286
  specification_version: 4
277
287
  summary: Rails ActiveRecord + Pry is the best SQL query editor