# HG changeset patch
# User martin f. krafft <madduck@madduck.net>
# 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;