datajoint-matlab
datajoint-matlab copied to clipboard
Cannot do foreign key renaming for multiple fields coming from different original parent table in 3.4.1
Cannot declare a table with foreign key renaming for multiple fields
Reproducibility
Include:
- OS MACOS
- MATLAB Version 2020a
- MySQL version 10.4.13-MariaDB Homebrew
- MySQL Deployment Strategy local-native
- DataJoint Version 3.4.1
- Minimum number of steps to reliably reproduce the issue:
%{
pk_a: varchar(12)
%}
classdef A < dj.Manual
end
%{
pk_b : varchar(12)
%}
classdef B < dj.Manual
end
%{
-> subject.A
-> subject.B
%}
classdef C < dj.Manual
end
%{
(pk_da, pk_db) -> subject.C
%}
classdef D < dj.Manual
end
- Complete error stack as a result of evaluating the above steps When declaring D, I got the following error:
>> subject.D
ans =
Object subject.D
Error using dj.internal.Declare.makeFK (line 304)
Mapped fields (pk_da,pk_db) and () must match in the foreign key.
Error in dj.internal.Declare.declare (line 152)
dj.internal.Declare.makeFK( ...
Error in dj.internal.Table/create (line 624)
[sql, external_stores] = dj.internal.Declare.declare(self, def);
Error in dj.internal.Table/get.plainTableName (line 116)
self.create
Error in dj.internal.Table/get.tableHeader (line 83)
self.tableHeader = self.schema.headers(self.plainTableName);
Error in dj.internal.GeneralRelvar/compile (line 676)
header = derive(tab.tableHeader);
Error in dj.internal.GeneralRelvar/get.header (line 43)
header = self.compile;
Error in dj.internal.GeneralRelvar/disp (line 73)
hdr = self.header;
If I do
%{
pk1: varchar(12)
pk2: varchar(12)
%}
classdef A < dj.Manual
end
%{
(f1, f2) -> subject.A(pk1, pk2)
%}
classdef B < dj.Manual
end
It worked.
Tried two more cases, good to be added to the test cases.
This works:
%{
pk_a: varchar(12)
%}
classdef A < dj.Manual
end
%{
-> subject.A
pk_b: varchar(12)
%}
classdef B < dj.Manual
end
%{
(pk_ca, pk_cb) -> subject.B
%}
classdef C < dj.Manual
end
This does not:
%{
pk_a: varchar(12)
%}
classdef A < dj.Manual
end
%{
-> subject.A
pk_b: varchar(12)
%}
classdef B < dj.Manual
end
%{
-> subject.B
%}
classdef C < dj.Manual
end
%{
(pk_da, pk_db)-> subject.C(pk_a, pk_b)
%}
classdef D < dj.Manual
end
It gave error:
Mapped fields (pk_da,pk_db) and () must match in the foreign key.
Error in dj.internal.Declare.declare (line 152)
dj.internal.Declare.makeFK( ...
Error in dj.internal.Table/create (line 624)
[sql, external_stores] = dj.internal.Declare.declare(self, def);
Error in dj.internal.Table/get.plainTableName (line 116)
self.create
Error in dj.internal.Table/get.tableHeader (line 83)
self.tableHeader = self.schema.headers(self.plainTableName);
Error in dj.internal.GeneralRelvar/compile (line 676)
header = derive(tab.tableHeader);
Error in dj.internal.GeneralRelvar/get.header (line 43)
header = self.compile;
Error in dj.internal.GeneralRelvar/disp (line 73)
hdr = self.header;