# HG changeset patch
# User martin f. krafft <madduck@madduck.net>
# Date 1334505060 -7200
# Node ID 867d950ce7b7386dce2378292c7d634fd1ebf797
# Parent  44a808af6cf40508a5e1d4e37454feebf3274188
Fix transport_maps function for non-existent domains

The postfix_transport_maps function had a bug causing

  2012-04-15 17:40:22 CEST LOG:  statement: SELECT transport FROM postfix_transport_map('logcheck', 'domine.madduck.net');
  2012-04-15 17:40:22 CEST ERROR:  query returned no rows

when the domain was not in the database. This would make did be NULL and make
the query fail.

This patch moves the tid query until after a check for did. If the latter is
NULL, the function RETURNs (rather than fails).

diff -r 44a808af6cf4 -r 867d950ce7b7 pgsql/create_tables-dovecot-1.2.x.pgsql
--- a/pgsql/create_tables-dovecot-1.2.x.pgsql	Sun Apr 15 17:36:26 2012 +0200
+++ b/pgsql/create_tables-dovecot-1.2.x.pgsql	Sun Apr 15 17:51:00 2012 +0200
@@ -571,9 +571,16 @@
         record recipient_transport;
         recipient varchar(320) := localpart || '@' || the_domain;
         did bigint := (SELECT gid FROM domain_name WHERE domainname = the_domain);
-        transport_id bigint := (SELECT tid FROM users
-                                  WHERE gid = did AND local_part = localpart);
+        transport_id bigint;
     BEGIN
+        IF did IS NULL THEN
+            RETURN;
+        END IF;
+
+        SELECT tid INTO transport_id
+          FROM users
+         WHERE gid = did AND local_part = localpart;
+
         IF transport_id IS NULL THEN
             SELECT tid INTO STRICT transport_id
               FROM domain_data
diff -r 44a808af6cf4 -r 867d950ce7b7 pgsql/create_tables.pgsql
--- a/pgsql/create_tables.pgsql	Sun Apr 15 17:36:26 2012 +0200
+++ b/pgsql/create_tables.pgsql	Sun Apr 15 17:51:00 2012 +0200
@@ -549,9 +549,16 @@
         record recipient_transport;
         recipient varchar(320) := localpart || '@' || the_domain;
         did bigint := (SELECT gid FROM domain_name WHERE domainname = the_domain);
-        transport_id bigint := (SELECT tid FROM users
-                                  WHERE gid = did AND local_part = localpart);
+        transport_id bigint;
     BEGIN
+        IF did IS NULL THEN
+            RETURN;
+        END IF;
+
+        SELECT tid INTO transport_id
+          FROM users
+         WHERE gid = did AND local_part = localpart;
+
         IF transport_id IS NULL THEN
             SELECT tid INTO STRICT transport_id
               FROM domain_data
diff -r 44a808af6cf4 -r 867d950ce7b7 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	Sun Apr 15 17:36:26 2012 +0200
+++ b/pgsql/update_tables_0.5.x-0.6-dovecot-1.2.x.pgsql	Sun Apr 15 17:51:00 2012 +0200
@@ -496,9 +496,16 @@
         record recipient_transport;
         recipient varchar(320) := localpart || '@' || the_domain;
         did bigint := (SELECT gid FROM domain_name WHERE domainname = the_domain);
-        transport_id bigint := (SELECT tid FROM users
-                                  WHERE gid = did AND local_part = localpart);
+        transport_id bigint;
     BEGIN
+        IF did IS NULL THEN
+            RETURN;
+        END IF;
+
+        SELECT tid INTO transport_id
+          FROM users
+         WHERE gid = did AND local_part = localpart;
+
         IF transport_id IS NULL THEN
             SELECT tid INTO STRICT transport_id
               FROM domain_data
diff -r 44a808af6cf4 -r 867d950ce7b7 pgsql/update_tables_0.5.x-0.6.pgsql
--- a/pgsql/update_tables_0.5.x-0.6.pgsql	Sun Apr 15 17:36:26 2012 +0200
+++ b/pgsql/update_tables_0.5.x-0.6.pgsql	Sun Apr 15 17:51:00 2012 +0200
@@ -475,9 +475,16 @@
         record recipient_transport;
         recipient varchar(320) := localpart || '@' || the_domain;
         did bigint := (SELECT gid FROM domain_name WHERE domainname = the_domain);
-        transport_id bigint := (SELECT tid FROM users
-                                  WHERE gid = did AND local_part = localpart);
+        transport_id bigint;
     BEGIN
+        IF did IS NULL THEN
+            RETURN;
+        END IF;
+
+        SELECT tid INTO transport_id
+          FROM users
+         WHERE gid = did AND local_part = localpart;
+
         IF transport_id IS NULL THEN
             SELECT tid INTO STRICT transport_id
               FROM domain_data