It is currently 30 March 2020, 0:51 Advanced search

parametri output... ma funzionano??

Domande e risposte su come utilizzare Instant Developer Foundation al meglio

Re: parametri output... ma funzionano??

Postby theguru » 2 October 2019, 15:48

d.termini wrote:
lucabaldini wrote:Non ho capito. Se il parametro è di tipo Oggetto:
lucabaldini wrote:Questo caso funziona come mi aspetto:
parinrs.png

Non funzionava, è stato cambiato nelle ultime versioni?

In effetti, anche io mi ricordo che... boh, qualche anno fa? questo passaggio non funzionava.
Quindi avevo preso l'abitudine di "replicare" il parametro da passare con una varibile locale, e poi assegnare alla proprietà la variabile ritornata.
Ho aperto questo thread perché mi sono ritrovato nella situazione di avere procedure con decine di parametri, e con questo metodo il codice si appesantiva.

Comunque Luca, visto che ci stai lavorando ed abbiamo la tua attenzione, :) potresti controllare se:
- utilizzando un ciclo foreach di tipo readwrite su tabella IMDB
- passando le variabili di ciclo ad una funzione con diversi parametri in/out
- questi vengono tornati in effetti modificati?
- le mie ultime prove in tal senso (ultima r della v19) mostravano che il valore non tornava
- le imdb sono in effetti... matrici di idvariant?

PS: credo nessuno abbia mai contestato l'uso di idvariant, generamente il boxing è una buona cosa e (come tu hai descritto) permette di affrontare meglio alcune situazioni spinose. A scapito di un po' di performance, ma ci sta.
User avatar
theguru
 
Posts: 776
Joined: 29 January 2014, 13:01

Re: parametri output... ma funzionano??

Postby lucabaldini » 3 October 2019, 6:47

Ho verificato che il caso che hai descritto non funziona:
errpario.png
errpario.png (34.63 KiB) Viewed 577 times

errpario2.png
errpario2.png (36.67 KiB) Viewed 577 times


Dopo tanti messaggi, sono riuscito ad avere il caso che non funziona... che era quello che volevo! :-)))

Normalmente chiederei di inviare un progetto semplice che replica il problema... ma dato che (per questa volta) l'ho fatto io, lo segnalo direttamente io.

Non credo sarebbe giusto risolverlo in questa versione (anche perché è già completa, testata, e una modifica di questo tipo va fatta ad inizio sviluppo non alla fine... premesso che devo capire ancora come risolvere il caso, è bene poterla testare in diverse configurazioni e, oltre ai test che eseguiamo, è meglio che permanga internamente per tanto tempo per essere sicuri che non cambi il comportamento di qualcosa).
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4006
Joined: 1 October 2010, 17:03
Location: Bologna

Re: parametri output... ma funzionano??

Postby lucabaldini » 3 October 2019, 6:51

- le imdb sono in effetti... matrici di idvariant?

Più o meno sì. Le IMDB sono matrici di IDVariant. Però è un po' più complesso di così. Perché ci sono le query.

Mi spiego meglio. Supponi di avere una tabella IMDB così fatta:
Code: Select all
    string Campo1
    int Campo2


In effetti, internamente, è una matrice di n-righe per 2 colonne, dove ogni cella è un IDVariant.

Ora, se scrivi questa query:
Code: Select all
   string v1
   int v2
   select
      v1 = Campo1 + 'C'
   from
      tabellaIMDB

Quella è una query IMDB che, a sua volta, è un'altra matrice... con una forma diversa da quella di prima (ha una sola colonna) ma "prende i dati da lì" e "se cambiano li scrive lì".
In altre parole, il sistema deve eseguire una procedura (io le chiamo query procedurali) che deve andare a prendere i dati dalla prima tabella e, dopo averli trattati (filtrati se ci sono where clause, raggruppati se ci sono funzioni di aggregazione, trasformati se ci sono espressioni come nel caso sopra) e poi copiare nella nuova tabella IMDB temporanea.

Per i For-Each è anche più complicato. C'è anche lì la query procedurale del for-each (che ha, normalmente, una forma e contenuto differenti dalla tabella originale) ma se il for-each è scrivibile e tu modifichi una colonna diretta, il sistema deve anche andare a modificare il valore originale della tabella IMDB originale. Quindi, quello che ho detto sopra, non è totalmente corretto... Una tabella IMDB non è una semplice "matrice di IDVariant" bensì una "matrice di oggetti che possono essere IDVariant nel caso semplice ma anche puntatori ad altre celle di altre tabelle se sono usate in query che contengono riferimenti diretti a campi". Non so se mi sono spiegato... :-)))
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4006
Joined: 1 October 2010, 17:03
Location: Bologna

Re: parametri output... ma funzionano??

Postby lucabaldini » 3 October 2019, 6:59

Dovesse servire a qualcuno: ho creato l'NPQ04410 per gestire il caso.
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4006
Joined: 1 October 2010, 17:03
Location: Bologna

Re: parametri output... ma funzionano??

Postby theguru » 3 October 2019, 7:13

lucabaldini wrote: [...] Una tabella IMDB non è una semplice "matrice di IDVariant" bensì una "matrice di oggetti che possono essere IDVariant nel caso semplice ma anche puntatori ad altre celle di altre tabelle se sono usate in query che contengono riferimenti diretti a campi". Non so se mi sono spiegato... :-)))

Abbastanza in realtà :)

Ogni volta che affronto un problema con inde ho sempre queste 2 strutture tra cui scegliere: collection e imdb. e non sempre è facile decidere.
Le prime tutto sommato le associo alle omonime strutture in java e c#, immagino che anche in compilazione vadano a ricalcare queste strutture.
Le imdb sono una scatola chiusa, che mi offrono in più le query e quello che immagino essere un accesso random ai dati, ma perdo molto in termini di funzionalità OOP.
per cui ogni informazione si come sono implementate mi aiuta a scegliere.
User avatar
theguru
 
Posts: 776
Joined: 29 January 2014, 13:01

Re: parametri output... ma funzionano??

Postby lucabaldini » 3 October 2019, 9:08

L'dea che siano "matrici di IDVariant" comunque è corretta. In generale una tabella IMDB è esattamente quello.

Le query sono qualcosa di diverso. Per fare una query InDe crea una nuova "tabella IMDB accessoria" collegata alla query. Subito prima di eseguire la query viene eseguita una apposita "procedura" che prende i dati dalla matrice originale e, applicando le regole che descrivevo sotto (select list con espressioni, forma differente, filtri, raggruppamenti, etc) popola la tabella IMDB fittizia con il risultato della query. Da cui poi tu puoi estrarre le info che ti servono (pensa, per esempio, ad una select into variable su IMDB).

Se poi la "query è scrivibile", come nei pannelli su IMDB o i for-each scrivibili su IMDB, allora la query fittizia ha alcune celle "collegate" alle corrispondenti celle della tabella IMDB principale... così che quando tu scrivi nella query (perché tu fai quello) in realtà scrivi ANCHE nella tabella originale.
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4006
Joined: 1 October 2010, 17:03
Location: Bologna

Re: parametri output... ma funzionano??

Postby lucabaldini » 3 October 2019, 9:10

Le Collection (IDCollection comprese9 sono simili alle ArrayList, ObList, LinkedList, etc... tipiche dei vari linguaggi... in più hanno la gestione degli eventi e una "conoscenza" del fatto che possono essere collegate alla UI e che quindi devono fare qualcosina in più... Se una collection è attaccata ad un pannello, quando il sistema la scorre lo fa saltando record nascosti, invisibli, eliminati, etc... Mentre se la scorri tu da codice non fa così...

Ma, concettualmente, è simile alle "liste tradizionali"
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4006
Joined: 1 October 2010, 17:03
Location: Bologna

Re: parametri output... ma funzionano??

Postby theguru » 3 October 2019, 19:57

Ti chiedo quest'ultima cosa, poi non ti disturbo più (su questo thread :))
Io forse sono un po' fissato con gli "O" grandi.. diciamo che questa è una domanda pivot su tutte le curiosità che ho riguardo alla implementazione delle imdd.

L'accesso ai dati su una tabella IMDB è effettivamente random? intendo, abbiamo delle prestazioni (ordinamento più ricerca dicotomica) nell'ordine di nLog(n)?

So che è un discorso complesso, e non voglio mettere su un tavolo di ricerca operativa:
Ma vorrei capire se in effetti una query su IMDB ha performance superiori alla stessa ricerca su collection, che ha solo accessi sequenziali.
Ne approfitto un po' visto che in questi gg sei molto sul forum :)
User avatar
theguru
 
Posts: 776
Joined: 29 January 2014, 13:01

Re: parametri output... ma funzionano??

Postby lucabaldini » 7 October 2019, 6:58

No, non ci possono essere ottimizzazioni specifiche perché IMDB sono troppo generici.
Non sempre la ricerca è del tipo I = x e i dati sono ordinati per I e quindi potrei eseguire una ricerca dicotomica... magari fosse sempre quello il caso.

Il caso più comune è "dati non ordinati", o "dati ordinati per 2-3 colonne" con criteri di ricerca complessi (per esempio con LIKE o più criteri insieme). In quel caso non c'è pezza... devo fare un table scan dell'intera IMDB.

Pertanto le IMDB si comportano esattamente come la collection. Quello che dici tu (ricerca dicotomica su dati ordinati) potrebbe funzionare solo se identificassi che sto eseguendo una ricerca su dati ordinati e il campo per cui sto cercando è esattamente quello per cui ho ordinato. Ma solo in quel caso specifico.
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4006
Joined: 1 October 2010, 17:03
Location: Bologna

Previous

Return to Tips & Tricks - Foundation

Who is online

Users browsing this forum: Google [Bot] and 22 guests

cron