Re: M3 feature preview
Andrus Adamchik <[email protected]> Tue, 7 Jul 2026 08:01:42 -0400
| Newsgroups | gmane.comp.java.cayenne.devel |
|---|---|
| Message-ID | <[email protected]> |
As Claude would say, you are absolutely right to question this :)=20 With the disclaimer that we are dealing with a bunch of independent = databases and a myriad driver settings so YMMV, reads should be atomic = in auto-commit mode and the results consistent for whatever moment in = time.=20 Default transaction isolation level (i.e. whether you see uncommitted = data from other transactions; something Cayenne does not touch) is still = in effect. A good example for our mental experiment is disjoint = prefetches (i.e. multiple queries previously ran in a single tx). In = theory, nothing has changed for them under READ UNCOMMITTED and READ = COMMITTED levels. But higher levels of isolation will behave differently = after this change.=20 Also, we may need to explicitly handle edge cases (such as statement = "fetchSize" that may require a tx).=20 Andrus=20 > On Jul 6, 2026, at 6:27=E2=80=AFPM, Michael Gentry = <[email protected]> wrote: >=20 > Could there be an issue where you read in bad data because you are no > longer in a transaction? For example, if some other connection > updated/deleted data while your transactionless SELECT was running? >=20 > On Mon, Jul 6, 2026 at 9:37=E2=80=AFAM Andrus Adamchik = <[email protected]> wrote: >=20 >> Hi, >>=20 >> I wanted to highlight a few things in the upcoming M3. They are = already on >> master, so maybe some brave souls can take it for a spin and give us >> feedback :) >>=20 >> 1. Cayenne no longer wraps selecting queries (or at least those it = can >> reliably identify as selecting) into transactions. >>=20 >> I had a suspicion for years that we shouldn't be doing that. Now I = was >> able to vibecode real benchmarks on multiple databases, and time = savings in >> the JDBC layer with faster queries are about 2x! (as each useless = "commit" >> is a separate command sent to DB that needs to be processed). But = this >> means that for the first time Cayenne operates with Connection >> "autoCommit=3Dtrue". So I'd appreciate feedback if this causes any = weirdness >> with your DataSources. >>=20 >>=20 >> 2. SQL logging changes. There are multiple changes. Some address >> operational concerns (saving hundreds of GB of storage space; = single-line >> logs are easier to parse), others are "quality of life": >>=20 >> * No tx for selects (mentioned above) by itself cuts down on 2 log = lines >> per query >> * The new logger name is short and descriptive "cayenne-sql" >> * ERROR log level for queries that result in exceptions >> * SQL query logs are single-line. Parameters, timers, result = counters, >> generated keys are placed on one line and rendered in a compact = format. Tx >> wrapping is still done on separate lines (as a tx can include more = than one >> SQL statement) >>=20 >> INFO cayenne-sql tx started >> INFO cayenne-sql INSERT INTO BINARY_PK_TEST1(BIN_ID, NAME) VALUES(?, = ?) | >> = bind:[BIN_ID:FBBC4034ED8F0214B2C559CF1029C1868A66F0D59208A36C9365126C248C.= ..,NAME:'master1'] >> updated:1 time_ms:0 >> INFO cayenne-sql tx committed >>=20 >> * Mnemonic table aliases. No more meaningless t0, t1, t2: >>=20 >> INFO cayenne-sql SELECT p.ESTIMATED_PRICE, p.PAINTING_DESCRIPTION, >> p.PAINTING_TITLE, p.ARTIST_ID, p.GALLERY_ID, p.PAINTING_ID, = g.GALLERY_ID, >> g.GALLERY_NAME FROM PAINTING p LEFT JOIN GALLERY g ON p.GALLERY_ID =3D >> g.GALLERY_ID | selected:1 time_ms:0 >>=20 >> * No alias for single-table queries >>=20 >> INFO cayenne-sql - SELECT ESTIMATED_PRICE, PAINTING_DESCRIPTION, >> PAINTING_TITLE, ARTIST_ID, GALLERY_ID, PAINTING_ID FROM PAINTING | >> selected:2 time_ms:0 >>=20 >>=20 >> (I am also thinking of lowercasing the SQL so that logs don't look = like >> they are screaming at you :)) >>=20 >> Andrus >>=20 >>=20 >>=20 >>=20 >>=20