Dzisiaj naprawiając błędy w istniejącym kodzie znalazłem dziwny błąd.Czy istnieją jakiekolwiek ograniczenia dotyczące zapytań liczbowych/stwierdzeń, które możemy napisać w ramach cftransaction?
cel Oddział przesunięcie zbyt duży na krótki
Po poszukiwaniach znalazłem, że jest to coś zrobić z Java kodu bajtowego nawrócenia. Oto linki znalazłem:
- 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
w moim przypadku cftransaction zawiera około 870 wypowiedzi i to działa dobrze. Ale muszę dodać 2 kolejne zapytania do tej transakcji. Teraz otrzymuję ten błąd, gdy dodaję nawet jedną linię kodu wewnątrz cftransaction. Obecnie nie mogę przenieść żadnego z istniejących cfquery z cftransaction.
Oto ogólna struktura kodu:
<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>
Czy istnieje obejście rozwiązać ten problem?
Zawsze możesz przenieść wszystkie że SQL procedur przechowywanych w bazie danych. –
Czy jesteś pewien, że transakcja jest przyczyną? Jedna z wymienionych wątków dotyczyła * nie *, a rozdzielenie rzeczy na mniejsze funkcje/komponenty rozwiązało problem. Niektóre rzeczy do przetestowania A) Czy to działa, jeśli tymczasowo usunąć transakcję? b) Czy to działa, jeśli przestawiłeś kod na mniejsze funkcje (lub cfc, jeśli w dalszym ciągu), a następnie wywołujesz je w ramach transakcji? c) Powiedziawszy to wszystko, brzmi jak dużo SQL dla zapytania. (To powiedziawszy, kompleksowa logika IMO jest lepiej spakowana w procedurze przechowywanej niż w zapytaniu). – Leigh
@ Ligh: A) Tak, to działa poprawnie, gdy usunąłem transakcję. B) Tak, próbowałem jej działania. C) Planuję również spakować go w ramach procedury przechowywanej, ale chodzi o to, że wymaga to dużo czasu/wysiłku/testów i nie jestem pewien, czy klient będzie gotowy na to, czy nie, dlatego szukam małych obejść. –