# HG changeset patch # User martin f. krafft # Date 1334321789 -7200 # Node ID 75d1c0d6bb8f07d2f8782faffb4bcc2975f864a4 # Parent a0a27688e616de2c2c246dfecef53a58292287eb Cache interpolated destination Instead of running the string modification function for destination interpolation twice, store the result once and use the stored result subsequently. diff -r a0a27688e616 -r 75d1c0d6bb8f pgsql/create_tables-dovecot-1.2.x.pgsql --- a/pgsql/create_tables-dovecot-1.2.x.pgsql Thu Apr 12 18:22:54 2012 +0000 +++ b/pgsql/create_tables-dovecot-1.2.x.pgsql Fri Apr 13 14:56:29 2012 +0200 @@ -612,11 +612,12 @@ record recipient_destination; catchall_cursor refcursor; recipient varchar(320) := localpart || '@' || the_domain; + idestination varchar(320) := + _interpolate_destination(destination, localpart, the_domain); did bigint := (SELECT gid FROM domain_name WHERE domainname=the_domain); BEGIN FOR record IN - SELECT recipient, - _interpolate_destination(destination, localpart, the_domain) + SELECT recipient, idestination FROM alias WHERE gid = did AND address = localpart @@ -634,8 +635,7 @@ -- or relocated entry and return the identity mapping if that is -- the case OPEN catchall_cursor FOR - SELECT recipient, - _interpolate_destination(destination, localpart, the_domain) + SELECT recipient, idestination FROM catchall WHERE gid = did; FETCH NEXT FROM catchall_cursor INTO recordc; diff -r a0a27688e616 -r 75d1c0d6bb8f pgsql/create_tables.pgsql --- a/pgsql/create_tables.pgsql Thu Apr 12 18:22:54 2012 +0000 +++ b/pgsql/create_tables.pgsql Fri Apr 13 14:56:29 2012 +0200 @@ -589,11 +589,12 @@ record recipient_destination; catchall_cursor refcursor; recipient varchar(320) := localpart || '@' || the_domain; + idestination varchar(320) := + _interpolate_destination(destination, localpart, the_domain); did bigint := (SELECT gid FROM domain_name WHERE domainname=the_domain); BEGIN FOR record IN - SELECT recipient, - _interpolate_destination(destination, localpart, the_domain) + SELECT recipient, idestination FROM alias WHERE gid = did AND address = localpart @@ -611,8 +612,7 @@ -- or relocated entry and return the identity mapping if that is -- the case OPEN catchall_cursor FOR - SELECT recipient, - _interpolate_destination(destination, localpart, the_domain) + SELECT recipient, idestination FROM catchall WHERE gid = did; FETCH NEXT FROM catchall_cursor INTO recordc; diff -r a0a27688e616 -r 75d1c0d6bb8f pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql --- a/pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql Thu Apr 12 18:22:54 2012 +0000 +++ b/pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql Fri Apr 13 14:56:29 2012 +0200 @@ -509,11 +509,12 @@ record recipient_destination; catchall_cursor refcursor; recipient varchar(320) := localpart || '@' || the_domain; + idestination varchar(320) := + _interpolate_destination(destination, localpart, the_domain); did bigint := (SELECT gid FROM domain_name WHERE domainname=the_domain); BEGIN FOR record IN - SELECT recipient, - _interpolate_destination(destination, localpart, the_domain) + SELECT recipient, idestination FROM alias WHERE gid = did AND address = localpart @@ -531,8 +532,7 @@ -- or relocated entry and return the identity mapping if that is -- the case OPEN catchall_cursor FOR - SELECT recipient, - _interpolate_destination(destination, localpart, the_domain) + SELECT recipient, idestination FROM catchall WHERE gid = did; FETCH NEXT FROM catchall_cursor INTO recordc; diff -r a0a27688e616 -r 75d1c0d6bb8f pgsql/update_tables_0.5.x-0.6.pgsql --- a/pgsql/update_tables_0.5.x-0.6.pgsql Thu Apr 12 18:22:54 2012 +0000 +++ b/pgsql/update_tables_0.5.x-0.6.pgsql Fri Apr 13 14:56:29 2012 +0200 @@ -487,11 +487,12 @@ record recipient_destination; catchall_cursor refcursor; recipient varchar(320) := localpart || '@' || the_domain; + idestination varchar(320) := + _interpolate_destination(destination, localpart, the_domain); did bigint := (SELECT gid FROM domain_name WHERE domainname=the_domain); BEGIN FOR record IN - SELECT recipient, - _interpolate_destination(destination, localpart, the_domain) + SELECT recipient, idestination FROM alias WHERE gid = did AND address = localpart @@ -509,8 +510,7 @@ -- or relocated entry and return the identity mapping if that is -- the case OPEN catchall_cursor FOR - SELECT recipient, - _interpolate_destination(destination, localpart, the_domain) + SELECT recipient, idestination FROM catchall WHERE gid = did; FETCH NEXT FROM catchall_cursor INTO recordc;