Oggi mentre risolvo bug in qualche codice esistente ho trovato uno strano errore.Esiste qualche limitazione con le query/dichiarazioni numeriche che possiamo scrivere all'interno di cftransaction?
obiettivo Branch compensato troppo grande per breve
Dopo la ricerca ho scoperto che si tratta di qualcosa a che fare con la conversione di codice Java byte. Ecco i link che ho trovato:
- Branch target offset too large for short
- Branch Target Offset Error
- Why does a long cfc file work in CF8, but not CF9? Getting "Branch target offset too large for short" error
Nel mio caso cftransaction contiene circa 870 dichiarazioni e sta lavorando bene. Ma ho bisogno di aggiungere altre 2 query a questa transazione. Ora ricevo questo errore quando aggiungo anche una sola riga di codice all'interno di cftransaction. Al momento non riesco a spostare nessuna delle esistenti cfquery da cftransaction. ci
<cftransaction action="begin">
<cfif URL.action eq 'add'>
Around 200 lines of queries/statements
<cfelseif URL.action eq 'edit'>
Around 200 lines of queries/statements
</cfif>
<cfif URL.action eq 'add' or URL.action 'edit'>
Around 450 lines of queries/statements
</cfif>
</cftransaction>
è alcuna soluzione per risolvere questo problema:
Ecco la struttura complessiva del codice?
Si può sempre spostare tutto ciò che SQL per stored procedure del database. –
Sei sicuro che la transazione sia la causa? Uno dei thread menzionati le transazioni erano * non * coinvolti e la suddivisione di elementi in funzioni/componenti più piccoli risolveva il problema. Alcune cose da testare A) Funziona se rimuovi temporaneamente la transazione? b) Funziona se il codice è stato riorganizzato in funzioni più piccole (o cfc se necessario), quindi chiama quelli da una transazione? c) Detto questo, sembra un sacco di SQL per una query. (Ciò detto, la logica sql complessa IMO è meglio impacchettata in una stored procedure piuttosto che in una query.) – Leigh
@Leigh: A) Sì, funziona correttamente quando ho rimosso la transazione. B) Sì, ho provato a farlo funzionare. C) Sto anche pianificando di comprimerlo all'interno di una procedura memorizzata, ma la cosa è che richiede molto tempo/impegno/test e non sono sicuro che il client sia pronto o meno, ecco perché si cercano soluzioni alternative. –