Conversing with myself ... Reading

 
http://www.toadworld.com/TWPIPELINEMarch2008/PIPEMarch08MySQL/tabid/308/Default.aspx

Rather than a StoredProcedure which returns a result set, using a
StoredFunction that returns a single value,

DELIMITER //
CREATE FUNCTION           `DomainCheckFUNC`(domainName VARCHAR(255))
  RETURNS TINYINT
  DETERMINISTIC
  CONTAINS SQL
  BEGIN
    DECLARE `result` TINYINT(1) DEFAULT 0;
    SELECT 1 INTO `result`
      FROM (SELECT `name`
              FROM `DOMAIN`
              WHERE `enabled` = '1'
            UNION DISTINCT
            SELECT `name`
              FROM `DOMAIN_ALIAS`
              WHERE `enabled` = '1'
      ) AS `X`
      WHERE `name`  = `domainName`
    LIMIT 1;
    RETURN(`result`);
  END;
//
DELIMITER ;

and in virtual_mailbox_domains.cf

- query = CALL DomainCheck('%s');
+ query = SELECT DomainCheckFUNC('%s');

seems to work.  At least valid/invalid domains are getting
passed/rejected early in the transaction, as intended.  Need to watch
downstream.

If anyone else has success with this, or has comments why this
approach is wrong, it'd be useful to know.

Rich

Reply via email to