Hello Andrus, > But this means that for the first time Cayenne operates with Connection > "autoCommit=true".
😱 This setting is more scary that an Halloween costume to me! 😅 I trust your understanding of the trade-offs at play, but I have always considered autoCommit the option used by toy projects, not suitable for serious tasks. But my views may well be obsolete by now. 😁 Cheers, and –as always– huge congratulations to all people involved in moving the project forward. Giulio Cesare On Tue, Jul 7, 2026 at 3:17 PM Andrus Adamchik <[email protected]> wrote: > > I am glad the new change didn't break much stuff :) Always a concern with all > the new ideas. > > BTW, as you probably noticed, we are now exposing translated queries with > parameters as standalone record objects instead of going straight from > translator to PreparedStatement, so they can be captured, inspected, logged, > etc (e.g., what the SQLLogger does). > > And on the broader topic of observability, we started an effort to integrate > OpenTelemetry into Bootique, and I hope this will come back to Cayenne as > well. Would be nice to have otel spans for queries. But as your video > demonstrates, explicit instrumentation is almost irrelevant these days. The > tools are so good... they can grab the logs, or do automated runtime > instrumentation and show you transaction traces with next to zero effort. > > Andrus > > > > > On Jul 6, 2026, at 7:15 PM, Hugi Thordarson <[email protected]> wrote: > > > > Hi Andrus, > > > > first — that logging is a vast, vast improvement, I'm loving it! > > > > So happens I've been playing a lot with Cayenne's logging lately. Very > > happy about how easy it was/is to hook into query logging and I've used it > > to profile SQL-queries in my web application templates for years now — > > keeping track of the time methods spend querying to find performance > > problems (profiling/aggregating by bindings rather than methods really, in > > WO terms) and watching the SQL they executed. > > > > Helpful, but has always been private utility logic for myself since it just > > prints ugly text reports and I never took the time to make it pretty and > > usable for others. > > > > But that was before Claude :). So now there's this: Inline SQL logging. > > Probably easiest described through video — > > https://www.youtube.com/watch?v=hoW1WusKSRo . > > > > …works great with the new SQLLogger interface. Already ported, since I'll > > be switching to -SNAPSHOT (in dev only for a while, to test the behaviour > > of the new transaction setup, really looking forward to putting it through > > it's paces). > > Been using M2 in production since release and it works great, congrats on > > another awesome release :). > > > > Cheers, > > - hugi > > > > > > > >> On 6 Jul 2026, at 13:37, Andrus Adamchik <[email protected]> wrote: > >> > >> Hi, > >> > >> 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 :) > >> > >> 1. Cayenne no longer wraps selecting queries (or at least those it can > >> reliably identify as selecting) into transactions. > >> > >> 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=true". So I'd appreciate feedback if this causes any weirdness > >> with your DataSources. > >> > >> > >> 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": > >> > >> * 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) > >> > >> 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 > >> > >> * Mnemonic table aliases. No more meaningless t0, t1, t2: > >> > >> 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 = > >> g.GALLERY_ID | selected:1 time_ms:0 > >> > >> * No alias for single-table queries > >> > >> INFO cayenne-sql - SELECT ESTIMATED_PRICE, PAINTING_DESCRIPTION, > >> PAINTING_TITLE, ARTIST_ID, GALLERY_ID, PAINTING_ID FROM PAINTING | > >> selected:2 time_ms:0 > >> > >> > >> (I am also thinking of lowercasing the SQL so that logs don't look like > >> they are screaming at you :)) > >> > >> Andrus > >> > >> > >> > >> > > >
