brick 1.0.188 → 1.0.190
Sign up to get free protection for your applications and to get access to all the features.
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
|
@@ -729,12 +730,12 @@ module ActiveRecord
|
|
729
730
|
cc_part_idx -= 1
|
730
731
|
end
|
731
732
|
end
|
732
|
-
selects << "#{tbl_name}.#{cc_part.last} AS #{col_alias}"
|
733
|
+
selects << "#{_br_quoted_name(tbl_name)}.#{_br_quoted_name(cc_part.last)} AS #{_br_quoted_name(col_alias)}"
|
733
734
|
cc_part << col_alias
|
734
735
|
end
|
735
736
|
# Add a key column unless we've already got it
|
736
737
|
if key_alias && !used_col_aliases.key?(key_alias)
|
737
|
-
selects << "#{key_tbl_name}.#{dest_pk} AS #{key_alias}"
|
738
|
+
selects << "#{_br_quoted_name(key_tbl_name)}.#{_br_quoted_name(dest_pk)} AS #{_br_quoted_name(key_alias)}"
|
738
739
|
used_col_aliases[key_alias] = nil
|
739
740
|
end
|
740
741
|
cc[2] = key_alias ? [key_klass, key_alias] : nil
|
@@ -1018,7 +1019,7 @@ JOIN (SELECT #{hm_selects.map { |s| _br_quoted_name("#{'br_t0.' if from_clause}#
|
|
1018
1019
|
selects, where_values_hash, nil, translations: translations, join_array: join_array,
|
1019
1020
|
cust_col_override: { '_br' => (descrip_cols = [pieces, my_dsl]) }
|
1020
1021
|
)
|
1021
|
-
order_values = "#{klass.table_name}.#{klass.primary_key}"
|
1022
|
+
order_values = "#{_br_quoted_name(klass.table_name)}.#{_br_quoted_name(klass.primary_key)}"
|
1022
1023
|
[self.select(selects), descrip_cols]
|
1023
1024
|
end
|
1024
1025
|
|
@@ -2158,7 +2159,7 @@ class Object
|
|
2158
2159
|
|
2159
2160
|
# %%% Allow params to define which columns to use for order_by
|
2160
2161
|
# Overriding the default by providing a querystring param?
|
2161
|
-
order_by = params['_brick_order']&.split(',')&.map(&:
|
2162
|
+
order_by = params['_brick_order']&.split(',')&.map(&:to_s) || Object.send(:default_ordering, table_name, pk)
|
2162
2163
|
|
2163
2164
|
ar_relation = ActiveRecord.version < Gem::Version.new('4') ? real_model.preload : real_model.all
|
2164
2165
|
params['_brick_is_api'] = true if (is_api = request.format == :js || current_api_root)
|
@@ -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)
|
@@ -467,7 +467,7 @@ function onImagesLoaded(event) {
|
|
467
467
|
if bt.length < 4
|
468
468
|
bt << (option_detail = [["(No #{bt_name} chosen)", '^^^brick_NULL^^^']])
|
469
469
|
# %%% Accommodate composite keys for obj.pk at the end here
|
470
|
-
collection, descrip_cols = bt_class&.order(Arel.sql("#{bt_class.table_name}.#{obj_pk = bt_class.primary_key}"))&.brick_list
|
470
|
+
collection, descrip_cols = bt_class&.order(Arel.sql("#{bt_class._br_quoted_name(bt_class.table_name)}.#{bt_class._br_quoted_name(obj_pk = bt_class.primary_key)}"))&.brick_list
|
471
471
|
collection&.brick_(:each) do |obj|
|
472
472
|
option_detail << [
|
473
473
|
obj.brick_descrip(
|
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
|
@@ -280,7 +280,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
280
280
|
- !ruby/object:Gem::Version
|
281
281
|
version: 1.3.6
|
282
282
|
requirements: []
|
283
|
-
rubygems_version: 3.
|
283
|
+
rubygems_version: 3.2.33
|
284
284
|
signing_key:
|
285
285
|
specification_version: 4
|
286
286
|
summary: Create a Rails app from data alone
|