(sorry, i only read the digest version of list and always create i new thread by "fake-Re")
Hello,
Perhaps you can implement some updating procedure that would only involve a percentage of your users at one time.
no way, i want to fix this! but i need help because i have no idea of c-programming. i can read the code a little bit, but never lerned it.
solution is to edit dovecot-1.2.11/src/lib-dict/dict-sql.c i can avoid using ON DUPLICATE KEY UPDATE by changing line 91 to:
orig: dict->has_on_duplicate_key = strcmp(driver->name, "mysql") == 0; changed: dict->has_on_duplicate_key = strcmp(driver->name, "mysqlXXX") == 0;
this works only 50%. if a user has no entry in quotatable, dovecot is updating his quota with 2 queries:
INSERT INTO quota (bytes,username) VALUES ('2456','myuser') INSERT INTO quota (messages,username) VALUES ('2','myuser')
The first query works, the second throws an error because username-field is uniqe. Duplicate entry 'myuser' for key 1
So i have to find a way to make this query in one step: INSERT INTO quota (bytes,messages, username) VALUES ('2456','2','myuser')
or turn the second insert into an update
update quota SET messages='2' where username='myuser'
But iam afraid this is too much for my c-skills. I need help of an C-Crack or timo as developer. if timo could create a switch for mysql 4.0 would surely be the best.
Thanks, Andre