brick 1.0.189 → 1.0.190
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 +4 -4
- data/lib/brick/extensions.rb +30 -15
- data/lib/brick/frameworks/rails/engine.rb +5 -2
- data/lib/brick/version_number.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: 3e7a12940f4ac57eea3c53bb3b437472f90bbaa857bd6611d3e871463add46f2
|
4
|
+
data.tar.gz: 8afb6e47cebd99a9b4172aa82d9447b71dd66e6df750249063b66b9b9ba939a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5379ddb6c61675b5606730a771a3f95638829b8359b42fd78c0509836635a93d36b787b09f21a0b9321623c917a149508b643a68ff4474baf7b40739ad5eeed
|
7
|
+
data.tar.gz: 40b6c6dc4fd31b10632fafb572608ec1c6473b6efa1dab346f1c82fc4f9daa1faba6d3675b336a780291595e25ace20358a95205a9284e7c42ddf450efe1d0a4
|
data/lib/brick/extensions.rb
CHANGED
@@ -98,6 +98,7 @@ module ActiveRecord
|
|
98
98
|
end
|
99
99
|
|
100
100
|
def _br_quoted_name(name)
|
101
|
+
name = name.join('.') if name.is_a?(Array)
|
101
102
|
if name == '*'
|
102
103
|
name
|
103
104
|
elsif is_mysql
|
@@ -2895,24 +2896,32 @@ ORDER BY 1, 2, c.internal_column_id, acc.position"
|
|
2895
2896
|
# end
|
2896
2897
|
# end
|
2897
2898
|
# schema = ::Brick.default_schema # Reset back for this next round of fun
|
2899
|
+
kcus = nil
|
2898
2900
|
case ActiveRecord::Base.connection.adapter_name
|
2899
2901
|
when 'PostgreSQL', 'Mysql2', 'Trilogy', 'SQLServer'
|
2900
|
-
|
2901
|
-
|
2902
|
+
# All KCUs -- use this to virtually JOIN against fk_references in Ruby code
|
2903
|
+
sql = "SELECT CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, ORDINAL_POSITION,
|
2904
|
+
TABLE_NAME, COLUMN_NAME
|
2905
|
+
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE#{"
|
2906
|
+
WHERE CONSTRAINT_SCHEMA = COALESCE(current_setting('SEARCH_PATH'), 'public')" if is_postgres && schema }"
|
2907
|
+
kcus = ActiveRecord::Base.execute_sql(sql).each_with_object({}) do |v, s|
|
2908
|
+
key = "#{v['constraint_name']}.#{v['constraint_schema']}.#{v['constraint_catalog']}.#{v['ordinal_position']}"
|
2909
|
+
key << ".#{v['table_name']}.#{v['column_name']}" unless is_postgres || is_mssql
|
2910
|
+
s[key] = [v['constraint_schema'], v['table_name']]
|
2911
|
+
end
|
2912
|
+
|
2913
|
+
sql = "SELECT kcu.CONSTRAINT_SCHEMA, kcu.TABLE_NAME, kcu.COLUMN_NAME,
|
2914
|
+
#{# These will get filled in with real values (effectively doing the JOIN in Ruby)
|
2915
|
+
is_postgres || is_mssql ? 'NULL as primary_schema, NULL as primary_table' :
|
2916
|
+
'kcu.REFERENCED_TABLE_NAME, kcu.REFERENCED_COLUMN_NAME'},
|
2917
|
+
kcu.CONSTRAINT_NAME AS CONSTRAINT_SCHEMA_FK,
|
2918
|
+
rc.UNIQUE_CONSTRAINT_NAME, rc.UNIQUE_CONSTRAINT_SCHEMA, rc.UNIQUE_CONSTRAINT_CATALOG, kcu.ORDINAL_POSITION
|
2902
2919
|
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS rc
|
2903
|
-
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS
|
2904
|
-
ON
|
2905
|
-
AND
|
2906
|
-
AND
|
2907
|
-
|
2908
|
-
ON kcu2.CONSTRAINT_CATALOG = rc.UNIQUE_CONSTRAINT_CATALOG
|
2909
|
-
AND kcu2.CONSTRAINT_SCHEMA = rc.UNIQUE_CONSTRAINT_SCHEMA
|
2910
|
-
AND kcu2.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME#{"
|
2911
|
-
AND kcu2.TABLE_NAME = kcu1.REFERENCED_TABLE_NAME
|
2912
|
-
AND kcu2.COLUMN_NAME = kcu1.REFERENCED_COLUMN_NAME" unless is_postgres || is_mssql }
|
2913
|
-
AND kcu2.ORDINAL_POSITION = kcu1.ORDINAL_POSITION#{"
|
2914
|
-
WHERE kcu1.CONSTRAINT_SCHEMA = COALESCE(current_setting('SEARCH_PATH'), 'public')" if is_postgres && schema }"
|
2915
|
-
# AND kcu2.TABLE_NAME = ?;", Apartment::Tenant.current, table_name
|
2920
|
+
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS kcu
|
2921
|
+
ON kcu.CONSTRAINT_CATALOG = rc.CONSTRAINT_CATALOG
|
2922
|
+
AND kcu.CONSTRAINT_SCHEMA = rc.CONSTRAINT_SCHEMA
|
2923
|
+
AND kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME#{"
|
2924
|
+
WHERE kcu.CONSTRAINT_SCHEMA = COALESCE(current_setting('SEARCH_PATH'), 'public')" if is_postgres && schema }"
|
2916
2925
|
fk_references = ActiveRecord::Base.execute_sql(sql)
|
2917
2926
|
when 'SQLite'
|
2918
2927
|
sql = "SELECT NULL AS constraint_schema, m.name, fkl.\"from\", NULL AS primary_schema, fkl.\"table\", m.name || '_' || fkl.\"from\" AS constraint_name
|
@@ -2943,6 +2952,11 @@ ORDER BY 1, 2, c.internal_column_id, acc.position"
|
|
2943
2952
|
::Brick.default_schema ||= 'public' if ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
|
2944
2953
|
fk_references&.each do |fk|
|
2945
2954
|
fk = fk.values unless fk.is_a?(Array)
|
2955
|
+
# Virtually JOIN against fk_references in order to change out the primary schema and primary table
|
2956
|
+
if (kcu = kcus&.fetch("#{fk[6]}.#{fk[7]}.#{fk[8]}.#{fk[9]}", nil))
|
2957
|
+
fk[3] = kcu[0]
|
2958
|
+
fk[4] = kcu[1]
|
2959
|
+
end
|
2946
2960
|
# Multitenancy makes things a little more general overall, except for non-tenanted tables
|
2947
2961
|
if ::Brick.is_apartment_excluded_table(::Brick.namify(fk[1]))
|
2948
2962
|
fk[0] = ::Brick.apartment_default_tenant
|
@@ -2967,6 +2981,7 @@ ORDER BY 1, 2, c.internal_column_id, acc.position"
|
|
2967
2981
|
end
|
2968
2982
|
::Brick._add_bt_and_hm(fk, relations)
|
2969
2983
|
end
|
2984
|
+
kcus = nil # Allow this large item to be garbage collected
|
2970
2985
|
end
|
2971
2986
|
|
2972
2987
|
table_name_lookup = (::Brick.table_name_lookup ||= {})
|
@@ -738,8 +738,11 @@ window.addEventListener(\"popstate\", linkSchemas);
|
|
738
738
|
hms_columns << hm_entry
|
739
739
|
end
|
740
740
|
when 'show', 'new', 'update'
|
741
|
+
predicates = nil
|
741
742
|
hm_stuff << if hm_fk_name
|
742
|
-
if
|
743
|
+
if (hm_fk_name.is_a?(Array) && # Composite key?
|
744
|
+
hm_fk_name.all? { |hm_fk_part| hm_assoc.klass.column_names.include?(hm_fk_part) }) ||
|
745
|
+
hm_assoc.klass.column_names.include?(hm_fk_name.to_s) ||
|
743
746
|
(hm_fk_name.is_a?(String) && hm_fk_name.include?('.')) # HMT? (Could do a better check for this)
|
744
747
|
predicates = path_keys(hm_assoc, hm_fk_name, pk).map do |k, v|
|
745
748
|
if v == '[sti_type]'
|
@@ -1638,7 +1641,7 @@ end
|
|
1638
1641
|
end
|
1639
1642
|
s << "<table id=\"#{hm_name}\" class=\"shadow\">
|
1640
1643
|
<tr><th>#{hm[1]}#{' poly' if hm[0].options[:as]} #{hm[3]}
|
1641
|
-
<% if respond_to?(:new_#{partial_new_path_name = hm.first.klass._brick_index(:singular)}_path) %>
|
1644
|
+
<% if predicates && respond_to?(:new_#{partial_new_path_name = hm.first.klass._brick_index(:singular)}_path) %>
|
1642
1645
|
<span class = \"add-hm-related\"><%=
|
1643
1646
|
pk_val = (obj_pk = model.primary_key).is_a?(String) ? obj.send(obj_pk) : obj_pk.map { |pk_part| obj.send(pk_part) }
|
1644
1647
|
pk_val_arr = [pk_val] unless pk_val.is_a?(Array)
|
data/lib/brick/version_number.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.190
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lorin Thwaits
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|