On Samstag, 23. Januar 2021 02:00:46 CET Jack wrote: > On 2021.01.01 13:57, Jack wrote: > > On 2020.12.31 19:02, Jack wrote: > >> In looking at https://bugs.kde.org/show_bug.cgi?id=430163 I got both > >> mariadb and postgresql set up. I can save to mariadb (mysql) but > >> not to postgresql. The error I get is: > >> > >> ----- > >> Cannot save to current database: Error in function void > >> MyMoneyStorageSqlPrivate::deleteKeyValuePairs(const QString&, const > >> QVariantList&) : deleting kvp for STORAGE > >> Driver = QPSQL, Host = localhost, User = jack, Database = kmm > >> Driver Error: > >> Database Error No -1: > >> Text: > >> Error type 0 > >> Executed: DELETE FROM kmmKeyValuePairs WHERE kvpType = ? AND kvpId = > >> ?; > >> Query error No 42601: ERROR: syntax error at or near "(" > >> LINE 1: EXECUTE ('STORAGE', '') > >> ^ > >> (42601) QPSQL: Unable to create query > >> Error type 2 > >> /var/tmp/portage/app-office/kmymoney-5.1.9999/work/kmymoney-5.1.9999/kmymoney/plugins/sql/mymoneystoragesql_p.h:1927 > >> ----- > >> > >> In that call, kvpType is "STORAGE" and idList contains one empty > >> string. I have no idea where the question marks in the "Executed" > >> line come from. I see no obvious errors in the qSql code, other > >> than perhaps wondering if the "" is getting correctly bound to > >> :kvpID but I know I'm grabbing at straws here. > >> > >> My other question is where LINE 1: EXECUTE('STORAGE','') comes > >> from. Those would be the proper two values for the single execution > >> of the DELETE statement, but that seems to have come from much > >> deeper in the libraries, although I don't know if it's still within > >> QSql orin actual Postgresql code. > >> > >> Any suggestions on how to further troubleshoot will be appreciated, > >> although I know my next effort will be to run under gdb. > > With a hint from TonyB, I'm beginning to think there might be a > > problem within QSql and its Postgres innards. The syntax error in > > "EXECUTE ('STORAGE', '')" appears to be the lack of a name for the > > prepared statement. I'll have to track down how it creates the > > actual psql PREPARE statement from the query.prepare call.
> The actual current error is "Query error No 0: ERROR: current > transaction is aborted, commands ignored until end of transaction > block" so I'm now digging into tracking if there is a previous SQL > call which is failing, but not triggering an explicit end to that > transaction. I think that is where KMMSqlQuery can help. I had to add a bunch of calls to QSqlQuery::finish() to solve this/a similar problem when reusing a query object. See the following commits git show 457e01f18d985d5e7121477df2dda2525e933d04 git show 81c97785c1f985c09732923101feac64e59389c3 git show 48c0b11efdcfa43217fc247443afda0d9b7a61c4 -- Regards Thomas Baumgart https://www.signal.org/ Signal, the better WhatsApp ------------------------------------------------------------- Stay away from negative people. They have a problem to every solution! -- Albert Einstein -------------------------------------------------------------
signature.asc
Description: This is a digitally signed message part.