clickhouse-activerecord 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/active_record/connection_adapters/clickhouse/oid/map.rb +23 -9
- data/lib/active_record/connection_adapters/clickhouse/schema_statements.rb +7 -1
- data/lib/active_record/connection_adapters/clickhouse/table_definition.rb +1 -1
- data/lib/active_record/connection_adapters/clickhouse_adapter.rb +6 -4
- data/lib/clickhouse-activerecord/schema_dumper.rb +15 -3
- data/lib/clickhouse-activerecord/tasks.rb +2 -2
- data/lib/clickhouse-activerecord/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b40a04fe93423fd3469b65a66429ecb41e4c5c25440777c69617e69081e578b4
|
4
|
+
data.tar.gz: 43586cb853dec4d3453a6b6938158e5f1197504678c2e1aa824b8521a6a1c628
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38073e81994dd027caf7fab5463a715eac7f15ec8373c1415d0064611118b0f2b0c391cae0db9b7670ebb8a3141c023879b3d1425c7059f4c00450579bcff64c
|
7
|
+
data.tar.gz: 0ce78412004ae3590bc97877141e66f74f9de1ad0aab2cdc1af5a3369157c01e0e29fe10b4921c96487cad66fa16e50163f9c34941381357f1960cc3c7f20fbc
|
@@ -7,15 +7,16 @@ module ActiveRecord
|
|
7
7
|
class Map < Type::Value # :nodoc:
|
8
8
|
|
9
9
|
def initialize(sql_type)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
10
|
+
case sql_type
|
11
|
+
when /U?Int(\d+)/
|
12
|
+
@subtype = :integer
|
13
|
+
@limit = bits_to_limit(Regexp.last_match(1)&.to_i)
|
14
|
+
when /DateTime/
|
15
|
+
@subtype = :datetime
|
16
|
+
when /Date/
|
17
|
+
@subtype = :date
|
18
|
+
else
|
19
|
+
@subtype = :string
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
@@ -65,6 +66,19 @@ module ActiveRecord
|
|
65
66
|
end
|
66
67
|
end
|
67
68
|
|
69
|
+
private
|
70
|
+
|
71
|
+
def bits_to_limit(bits)
|
72
|
+
case bits
|
73
|
+
when 8 then 1
|
74
|
+
when 16 then 2
|
75
|
+
when 32 then 4
|
76
|
+
when 64 then 8
|
77
|
+
when 128 then 16
|
78
|
+
when 256 then 32
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
68
82
|
end
|
69
83
|
end
|
70
84
|
end
|
@@ -72,8 +72,14 @@ module ActiveRecord
|
|
72
72
|
result['data'].flatten
|
73
73
|
end
|
74
74
|
|
75
|
+
def materialized_views(name = nil)
|
76
|
+
result = do_system_execute("SHOW TABLES WHERE engine = 'MaterializedView'", name)
|
77
|
+
return [] if result.nil?
|
78
|
+
result['data'].flatten
|
79
|
+
end
|
80
|
+
|
75
81
|
def functions
|
76
|
-
result = do_system_execute("SELECT name FROM system.functions WHERE origin = 'SQLUserDefined'")
|
82
|
+
result = do_system_execute("SELECT name FROM system.functions WHERE origin = 'SQLUserDefined' ORDER BY name")
|
77
83
|
return [] if result.nil?
|
78
84
|
result['data'].flatten
|
79
85
|
end
|
@@ -102,7 +102,7 @@ module ActiveRecord
|
|
102
102
|
private
|
103
103
|
|
104
104
|
def valid_column_definition_options
|
105
|
-
super + [:array, :low_cardinality, :fixed_string, :value, :type, :map, :codec]
|
105
|
+
super + [:array, :low_cardinality, :fixed_string, :value, :type, :map, :codec, :unsigned]
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
@@ -191,6 +191,8 @@ module ActiveRecord
|
|
191
191
|
nil
|
192
192
|
when /(Nullable)?\(?U?Int64\)?/
|
193
193
|
8
|
194
|
+
when /(Nullable)?\(?U?Int128\)?/
|
195
|
+
16
|
194
196
|
else
|
195
197
|
super
|
196
198
|
end
|
@@ -312,7 +314,7 @@ module ActiveRecord
|
|
312
314
|
end
|
313
315
|
end
|
314
316
|
|
315
|
-
def create_view(table_name, **options)
|
317
|
+
def create_view(table_name, request_settings: {}, **options)
|
316
318
|
options.merge!(view: true)
|
317
319
|
options = apply_replica(table_name, options)
|
318
320
|
td = create_table_definition(apply_cluster(table_name), **options)
|
@@ -322,10 +324,10 @@ module ActiveRecord
|
|
322
324
|
drop_table(table_name, options.merge(if_exists: true))
|
323
325
|
end
|
324
326
|
|
325
|
-
do_execute(schema_creation.accept(td), format: nil)
|
327
|
+
do_execute(schema_creation.accept(td), format: nil, settings: request_settings)
|
326
328
|
end
|
327
329
|
|
328
|
-
def create_table(table_name, **options, &block)
|
330
|
+
def create_table(table_name, request_settings: {}, **options, &block)
|
329
331
|
options = apply_replica(table_name, options)
|
330
332
|
td = create_table_definition(apply_cluster(table_name), **options)
|
331
333
|
block.call td if block_given?
|
@@ -339,7 +341,7 @@ module ActiveRecord
|
|
339
341
|
drop_table(table_name, options.merge(if_exists: true))
|
340
342
|
end
|
341
343
|
|
342
|
-
do_execute(schema_creation.accept(td), format: nil)
|
344
|
+
do_execute(schema_creation.accept(td), format: nil, settings: request_settings)
|
343
345
|
|
344
346
|
if options[:with_distributed]
|
345
347
|
distributed_table_name = options.delete(:with_distributed)
|
@@ -15,13 +15,16 @@ module ClickhouseActiverecord
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def tables(stream)
|
18
|
-
functions = @connection.functions
|
18
|
+
functions = @connection.functions.sort
|
19
19
|
functions.each do |function|
|
20
20
|
function(function, stream)
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
|
23
|
+
view_tables = @connection.views.sort
|
24
|
+
materialized_view_tables = @connection.materialized_views.sort
|
25
|
+
sorted_tables = @connection.tables.sort - view_tables - materialized_view_tables
|
26
|
+
|
27
|
+
(sorted_tables + view_tables + materialized_view_tables).each do |table_name|
|
25
28
|
table(table_name, stream) unless ignored?(table_name)
|
26
29
|
end
|
27
30
|
end
|
@@ -109,6 +112,15 @@ module ClickhouseActiverecord
|
|
109
112
|
end
|
110
113
|
end
|
111
114
|
|
115
|
+
def column_spec_for_primary_key(column)
|
116
|
+
spec = super
|
117
|
+
|
118
|
+
id = ActiveRecord::ConnectionAdapters::ClickhouseAdapter::NATIVE_DATABASE_TYPES.invert[{name: column.sql_type.gsub(/\(\d+\)/, "")}]
|
119
|
+
spec[:id] = id.inspect if id.present?
|
120
|
+
|
121
|
+
spec.except!(:limit, :unsigned) # This can be removed at some date, it is only here to clean up existing schemas which have dumped these values already
|
122
|
+
end
|
123
|
+
|
112
124
|
def function(function, stream)
|
113
125
|
stream.puts " # FUNCTION: #{function}"
|
114
126
|
sql = @connection.show_create_function(function)
|
@@ -47,12 +47,12 @@ module ClickhouseActiverecord
|
|
47
47
|
tables.sort_by! {|table| table.match(/^CREATE\s+(MATERIALIZED\s+)?VIEW/) ? 1 : 0}
|
48
48
|
|
49
49
|
# get all functions
|
50
|
-
functions = connection.execute("SELECT create_query FROM system.functions WHERE origin = 'SQLUserDefined'")['data'].flatten
|
50
|
+
functions = connection.execute("SELECT create_query FROM system.functions WHERE origin = 'SQLUserDefined' ORDER BY name")['data'].flatten
|
51
51
|
|
52
52
|
# put to file
|
53
53
|
File.open(args.first, 'w:utf-8') do |file|
|
54
54
|
functions.each do |function|
|
55
|
-
file.puts function + ";\n\n"
|
55
|
+
file.puts function.gsub('\\n', "\n") + ";\n\n"
|
56
56
|
end
|
57
57
|
|
58
58
|
tables.each do |table|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clickhouse-activerecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey Odintsov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|