table classes on path was not recognized when deleting or populating
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
Direzione di ricerca
Riproduci il problema con test/Upstream.m e test2/Downstream.m, quindi esegui populate(test2.Downstream) e del(test.Upstream) dopo clear all. Inizia con dj.internal.Table/set.className, dj.Relvar e dj.internal.AutoPopulate/getKeySource, quindi traccia dj.Relvar/delQuick. Il lavoro è completato quando le classi delle tabelle parent e downstream qualificate dallo schema vengono riconosciute senza stampare prima nessuna delle due tabelle, così che il popolamento e l’eliminazione a cascata abbiano esito positivo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Bug Report
Description
Some table class is on path, e.g. table test2.Downstream, but when deleting from an upstream table in a different schema, e.g. table test.Upstream, the entries in test2.Downstream would not be detected. If in the command window, we print out test2.Downstream, it will properly get deleted when deleting test.Upstream. Similar behavior happens when populating the downstream table. So I think they might be the same issue.
Reproducibility
dj version 3.4.2, but it probably happened in earlier versions as well.
To reproduce, create the following tables:
+test/Upstream.m
%{
up_id : tinyint
%}
classdef Upstream < dj.Manual
end
+test2/Downstream.m
%{
-> test.Upstream
%}
classdef Downstream < dj.Computed
methods(Access=protected)
function makeTuples(self, key)
self.insert(key)
end
end
end
Now insert an entry in Upstream:
insert(test.Upstream, {1})
Then we do clear all and then populate Downstream table:
>> clear all
>> populate(test2.Downstream)
0: Localhost via UNIX socket Server version 5.5.5-10.4.13-MariaDB
Error using dj.internal.Table/set.className (line 70)
invalid table identification '`test`.`upstream`'. Should be package.ClassName
Error in dj.internal.Table (line 46)
self.className = className;
Error in dj.Relvar (line 13)
[email protected](varargin{:})
Error in dj.internal.AutoPopulate>@(ix)dj.Relvar(self.schema.conn.tableToClass(parents{ix})) (line 76)
r = @(ix) dj.Relvar(self.schema.conn.tableToClass(parents{ix}));
Error in dj.internal.AutoPopulate/getKeySource (line 77)
source = r(1);
Error in dj.internal.AutoPopulate/populateSanityChecks (line 444)
source = self.getKeySource;
Error in dj.internal.AutoPopulate/populate (line 128)
rels{i}.populateSanityChecks
If print test.Upstream first, then it works:
>> test.Upstream
ans =
Object test.Upstream
:: ::
UP_ID
_____
1
1 tuples (0.498 s)
>> populate(test2.Downstream)
**test2.Downstream: Found 1 unpopulated keys
Populating test2.Downstream for:
up_id: 1
Now both tables have one entry. clear all now.
clear all
Then delete from Upstream table:
>> del(test.Upstream)
0: Localhost via UNIX socket Server version 5.5.5-10.4.13-MariaDB
ABOUT TO DELETE:
1 tuples from `test`.`upstream` (manual)
Proceed to delete? (yes/no) > yes
Deleting from test.Upstream
** delete rolled back due to an error
Error using mym
Cannot delete or update a parent row: a foreign key constraint fails (`test2`.`__downstream`, CONSTRAINT `P14Ktde1`
FOREIGN KEY (`up_id`) REFERENCES `test`.`upstream` (`up_id`) ON UPDATE CASCADE)
Error in dj.Connection/query (line 185)
mym(self.connId, queryStr, v{:});
Error in dj.Relvar/delQuick (line 27)
self.schema.conn.query(sprintf('DELETE FROM %s', self.sql))
Error in dj.Relvar/del (line 120)
rel.delQuick;
If print out test2.Downstream first, it works:
>> test2.Downstream
ans =
Object test2.Downstream
:: ::
UP_ID
_____
1
1 tuples (0.221 s)
>> del(test.Upstream)
ABOUT TO DELETE:
1 tuples from `test`.`upstream` (manual)
1 tuples from `test2`.`__downstream` (computed)
Proceed to delete? (yes/no) > yes
Deleting from test2.Downstream
Deleting from test.Upstream
committed
- Lingua principale
- MATLAB
- Stelle
- 41
- Fork
- 42
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di datajoint/datajoint-matlab
-
awaiting-triage enhancement
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
datajoint/datajoint-matlab#437 ·
-
awaiting-triage bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
datajoint/datajoint-matlab#436 ·
-
awaiting-triage enhancement
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
datajoint/datajoint-matlab#431 · 2 commenti ·
-
awaiting-triage bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
datajoint/datajoint-matlab#430 · 2 commenti ·
-
SSL Connection errorApertaawaiting-triage bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
datajoint/datajoint-matlab#425 · 3 commenti ·
Tutte le issue di datajoint/datajoint-matlab
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
flybywiresim/aircraft#11006 ·
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
HenrikBengtsson/R.matlab#61 ·
-
easy first-contributor first-contributors good first issue help wanted matlab up-for-grabs
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
fork-commit-merge/fork-commit-merge#8442 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 87/100
VH-Lab/NDI-matlab#1115 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
iamaisim/ProjectAirSim#241 ·
I maintainer di solito rispondono entro 1 giorno