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

 


Reply via email to