activerecord-yugabytedb-adapter 7.0.4.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.
- checksums.yaml +7 -0
- data/.rubocop.yml +13 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +67 -0
- data/README.md +31 -0
- data/Rakefile +8 -0
- data/activerecord-yugabytedb-adapter.gemspec +39 -0
- data/lib/active_record/connection_adapters/yugabytedb/column.rb +69 -0
- data/lib/active_record/connection_adapters/yugabytedb/database_statements.rb +156 -0
- data/lib/active_record/connection_adapters/yugabytedb/database_tasks.rb +19 -0
- data/lib/active_record/connection_adapters/yugabytedb/explain_pretty_printer.rb +44 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/array.rb +91 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/bit.rb +53 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/bit_varying.rb +15 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/bytea.rb +17 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/cidr.rb +48 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/date.rb +31 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/date_time.rb +36 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/decimal.rb +15 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/enum.rb +20 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/hstore.rb +109 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/inet.rb +15 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/interval.rb +49 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/jsonb.rb +15 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/legacy_point.rb +44 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/macaddr.rb +25 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/money.rb +41 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/oid.rb +15 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/point.rb +64 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/range.rb +115 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/specialized_string.rb +18 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/timestamp.rb +15 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/timestamp_with_time_zone.rb +30 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/type_map_initializer.rb +125 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/uuid.rb +35 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/vector.rb +28 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid/xml.rb +30 -0
- data/lib/active_record/connection_adapters/yugabytedb/oid.rb +38 -0
- data/lib/active_record/connection_adapters/yugabytedb/quoting.rb +205 -0
- data/lib/active_record/connection_adapters/yugabytedb/referential_integrity.rb +77 -0
- data/lib/active_record/connection_adapters/yugabytedb/schema_creation.rb +100 -0
- data/lib/active_record/connection_adapters/yugabytedb/schema_definitions.rb +243 -0
- data/lib/active_record/connection_adapters/yugabytedb/schema_dumper.rb +74 -0
- data/lib/active_record/connection_adapters/yugabytedb/schema_statements.rb +812 -0
- data/lib/active_record/connection_adapters/yugabytedb/type_metadata.rb +44 -0
- data/lib/active_record/connection_adapters/yugabytedb/utils.rb +80 -0
- data/lib/active_record/connection_adapters/yugabytedb_adapter.rb +1069 -0
- data/lib/activerecord-yugabytedb-adapter.rb +11 -0
- data/lib/arel/visitors/yugabytedb.rb +99 -0
- data/lib/version.rb +5 -0
- data/sig/activerecord-yugabytedb-adapter.rbs +4 -0
- metadata +124 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
# :stopdoc:
|
5
|
+
module ConnectionAdapters
|
6
|
+
module YugabyteDB
|
7
|
+
class TypeMetadata < DelegateClass(SqlTypeMetadata)
|
8
|
+
undef to_yaml if method_defined?(:to_yaml)
|
9
|
+
|
10
|
+
include Deduplicable
|
11
|
+
|
12
|
+
attr_reader :oid, :fmod
|
13
|
+
|
14
|
+
def initialize(type_metadata, oid: nil, fmod: nil)
|
15
|
+
super(type_metadata)
|
16
|
+
@oid = oid
|
17
|
+
@fmod = fmod
|
18
|
+
end
|
19
|
+
|
20
|
+
def ==(other)
|
21
|
+
other.is_a?(TypeMetadata) &&
|
22
|
+
__getobj__ == other.__getobj__ &&
|
23
|
+
oid == other.oid &&
|
24
|
+
fmod == other.fmod
|
25
|
+
end
|
26
|
+
alias eql? ==
|
27
|
+
|
28
|
+
def hash
|
29
|
+
TypeMetadata.hash ^
|
30
|
+
__getobj__.hash ^
|
31
|
+
oid.hash ^
|
32
|
+
fmod.hash
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
def deduplicated
|
37
|
+
__setobj__(__getobj__.deduplicate)
|
38
|
+
super
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
YugabyteDBTypeMetadata = YugabyteDB::TypeMetadata
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module ConnectionAdapters
|
5
|
+
module YugabyteDB
|
6
|
+
# Value Object to hold a schema qualified name.
|
7
|
+
# This is usually the name of a PostgreSQL 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
|
+
YugabyteYSQL::Connection.quote_ident(schema) << SEPARATOR << YugabyteYSQL::Connection.quote_ident(identifier)
|
25
|
+
else
|
26
|
+
YugabyteYSQL::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::PostgreSQL::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 PostgreSQL, 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
|
+
YugabyteDB::Name.new(schema, table)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|