activerecord-materialize-adapter 0.2.0
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 +7 -0
- data/LICENSE +22 -0
- data/lib/active_record/connection_adapters/materialize/column.rb +30 -0
- data/lib/active_record/connection_adapters/materialize/database_statements.rb +199 -0
- data/lib/active_record/connection_adapters/materialize/explain_pretty_printer.rb +44 -0
- data/lib/active_record/connection_adapters/materialize/oid/array.rb +91 -0
- data/lib/active_record/connection_adapters/materialize/oid/bit.rb +53 -0
- data/lib/active_record/connection_adapters/materialize/oid/bit_varying.rb +15 -0
- data/lib/active_record/connection_adapters/materialize/oid/bytea.rb +17 -0
- data/lib/active_record/connection_adapters/materialize/oid/cidr.rb +50 -0
- data/lib/active_record/connection_adapters/materialize/oid/date.rb +23 -0
- data/lib/active_record/connection_adapters/materialize/oid/date_time.rb +23 -0
- data/lib/active_record/connection_adapters/materialize/oid/decimal.rb +15 -0
- data/lib/active_record/connection_adapters/materialize/oid/enum.rb +20 -0
- data/lib/active_record/connection_adapters/materialize/oid/hstore.rb +70 -0
- data/lib/active_record/connection_adapters/materialize/oid/inet.rb +15 -0
- data/lib/active_record/connection_adapters/materialize/oid/jsonb.rb +15 -0
- data/lib/active_record/connection_adapters/materialize/oid/legacy_point.rb +44 -0
- data/lib/active_record/connection_adapters/materialize/oid/money.rb +41 -0
- data/lib/active_record/connection_adapters/materialize/oid/oid.rb +15 -0
- data/lib/active_record/connection_adapters/materialize/oid/point.rb +64 -0
- data/lib/active_record/connection_adapters/materialize/oid/range.rb +96 -0
- data/lib/active_record/connection_adapters/materialize/oid/specialized_string.rb +18 -0
- data/lib/active_record/connection_adapters/materialize/oid/type_map_initializer.rb +112 -0
- data/lib/active_record/connection_adapters/materialize/oid/uuid.rb +25 -0
- data/lib/active_record/connection_adapters/materialize/oid/vector.rb +28 -0
- data/lib/active_record/connection_adapters/materialize/oid/xml.rb +30 -0
- data/lib/active_record/connection_adapters/materialize/oid.rb +35 -0
- data/lib/active_record/connection_adapters/materialize/quoting.rb +205 -0
- data/lib/active_record/connection_adapters/materialize/referential_integrity.rb +43 -0
- data/lib/active_record/connection_adapters/materialize/schema_creation.rb +76 -0
- data/lib/active_record/connection_adapters/materialize/schema_definitions.rb +222 -0
- data/lib/active_record/connection_adapters/materialize/schema_dumper.rb +49 -0
- data/lib/active_record/connection_adapters/materialize/schema_statements.rb +742 -0
- data/lib/active_record/connection_adapters/materialize/type_metadata.rb +36 -0
- data/lib/active_record/connection_adapters/materialize/utils.rb +80 -0
- data/lib/active_record/connection_adapters/materialize/version.rb +9 -0
- data/lib/active_record/connection_adapters/materialize_adapter.rb +952 -0
- data/lib/active_record/tasks/materialize_database_tasks.rb +130 -0
- data/lib/activerecord-materialize-adapter.rb +3 -0
- data/lib/materialize/errors/database_error.rb +10 -0
- data/lib/materialize/errors/incomplete_input.rb +10 -0
- metadata +170 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
# :stopdoc:
|
5
|
+
module ConnectionAdapters
|
6
|
+
module Materialize
|
7
|
+
class TypeMetadata < DelegateClass(SqlTypeMetadata)
|
8
|
+
undef to_yaml if method_defined?(:to_yaml)
|
9
|
+
|
10
|
+
attr_reader :oid, :fmod
|
11
|
+
|
12
|
+
def initialize(type_metadata, oid: nil, fmod: nil)
|
13
|
+
super(type_metadata)
|
14
|
+
@oid = oid
|
15
|
+
@fmod = fmod
|
16
|
+
end
|
17
|
+
|
18
|
+
def ==(other)
|
19
|
+
other.is_a?(TypeMetadata) &&
|
20
|
+
__getobj__ == other.__getobj__ &&
|
21
|
+
oid == other.oid &&
|
22
|
+
fmod == other.fmod
|
23
|
+
end
|
24
|
+
alias eql? ==
|
25
|
+
|
26
|
+
def hash
|
27
|
+
TypeMetadata.hash ^
|
28
|
+
__getobj__.hash ^
|
29
|
+
oid.hash ^
|
30
|
+
fmod.hash
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
MaterializeTypeMetadata = Materialize::TypeMetadata
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module ConnectionAdapters
|
5
|
+
module Materialize
|
6
|
+
# Value Object to hold a schema qualified name.
|
7
|
+
# This is usually the name of a Materialize relation but it can also represent
|
8
|
+
# schema qualified type names. +schema+ and +identifier+ are unquoted to prevent
|
9
|
+
# double quoting.
|
10
|
+
class Name # :nodoc:
|
11
|
+
SEPARATOR = "."
|
12
|
+
attr_reader :schema, :identifier
|
13
|
+
|
14
|
+
def initialize(schema, identifier)
|
15
|
+
@schema, @identifier = unquote(schema), unquote(identifier)
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
parts.join SEPARATOR
|
20
|
+
end
|
21
|
+
|
22
|
+
def quoted
|
23
|
+
if schema
|
24
|
+
PG::Connection.quote_ident(schema) << SEPARATOR << PG::Connection.quote_ident(identifier)
|
25
|
+
else
|
26
|
+
PG::Connection.quote_ident(identifier)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def ==(o)
|
31
|
+
o.class == self.class && o.parts == parts
|
32
|
+
end
|
33
|
+
alias_method :eql?, :==
|
34
|
+
|
35
|
+
def hash
|
36
|
+
parts.hash
|
37
|
+
end
|
38
|
+
|
39
|
+
protected
|
40
|
+
def parts
|
41
|
+
@parts ||= [@schema, @identifier].compact
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
def unquote(part)
|
46
|
+
if part && part.start_with?('"')
|
47
|
+
part[1..-2]
|
48
|
+
else
|
49
|
+
part
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
module Utils # :nodoc:
|
55
|
+
extend self
|
56
|
+
|
57
|
+
# Returns an instance of <tt>ActiveRecord::ConnectionAdapters::Materialize::Name</tt>
|
58
|
+
# extracted from +string+.
|
59
|
+
# +schema+ is +nil+ if not specified in +string+.
|
60
|
+
# +schema+ and +identifier+ exclude surrounding quotes (regardless of whether provided in +string+)
|
61
|
+
# +string+ supports the range of schema/table references understood by Materialize, for example:
|
62
|
+
#
|
63
|
+
# * <tt>table_name</tt>
|
64
|
+
# * <tt>"table.name"</tt>
|
65
|
+
# * <tt>schema_name.table_name</tt>
|
66
|
+
# * <tt>schema_name."table.name"</tt>
|
67
|
+
# * <tt>"schema_name".table_name</tt>
|
68
|
+
# * <tt>"schema.name"."table name"</tt>
|
69
|
+
def extract_schema_qualified_name(string)
|
70
|
+
schema, table = string.scan(/[^".]+|"[^"]*"/)
|
71
|
+
if table.nil?
|
72
|
+
table = schema
|
73
|
+
schema = nil
|
74
|
+
end
|
75
|
+
Materialize::Name.new(schema, table)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|