[interchange-cvs] interchange - heins modified lib/Vend/Order.pm

interchange-cvs at icdevgroup.org interchange-cvs at icdevgroup.org
Sat Mar 6 17:16:58 EST 2004


User:      heins
Date:      2004-03-06 22:16:57 GMT
Modified:  lib/Vend Order.pm
Log:
* Add "exists" order check, which tests for pre-existance of a
  database record.

  Uses the same syntax as the "unique" check, in other word

  	  table(::foreign)?

  For example:

  	  email=exists userdb:email

  will fail if a particular email address does not exist in userdb.

      username=exists userdb

  will fail if $CGI->{username} doesn't exist as a record in userdb.

Revision  Changes    Path
2.64      +42 -2     interchange/lib/Vend/Order.pm


rev 2.64, prev_rev 2.63
Index: Order.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Order.pm,v
retrieving revision 2.63
retrieving revision 2.64
diff -u -r2.63 -r2.64
--- Order.pm	22 Feb 2004 19:28:37 -0000	2.63
+++ Order.pm	6 Mar 2004 22:16:57 -0000	2.64
@@ -1,6 +1,6 @@
 # Vend::Order - Interchange order routing routines
 #
-# $Id: Order.pm,v 2.63 2004/02/22 19:28:37 mheins Exp $
+# $Id: Order.pm,v 2.64 2004/03/06 22:16:57 mheins Exp $
 #
 # Copyright (C) 2002-2003 Interchange Development Group
 # Copyright (C) 1996-2002 Red Hat, Inc.
@@ -29,7 +29,7 @@
 package Vend::Order;
 require Exporter;
 
-$VERSION = substr(q$Revision: 2.63 $, 10);
+$VERSION = substr(q$Revision: 2.64 $, 10);
 
 @ISA = qw(Exporter);
 
@@ -205,6 +205,46 @@
 								}
 							}
 							return (1, $name, '');
+						},
+	'exists'			=> sub {
+							my($name, $value, $code) = @_;
+
+							$code =~ s/(\w+)(:+(\w+))?\s*//;
+							my $tab = $1
+								or return (0, $name, errmsg("no table specified"));
+							my $col = $3;
+							my $msg = $code;
+
+							my $db = database_exists_ref($tab)
+								or do {
+									$msg = errmsg(
+										"Table %s doesn't exist",
+										$tab,
+									);
+									return(0, $name, $msg);
+								};
+							my $used;
+							if(! $col) {
+								$used = $db->record_exists($value);
+							}
+							else {
+#::logDebug("Doing foreign key check, tab=$tab col=$col value=$value");
+								$used = $db->foreign($value, $col);
+							}
+
+#::logDebug("Checking exists, tab=$tab col=$col, used=$used");
+							if($used) {
+								return (1, $name, '');
+							}
+							else {
+								$msg = errmsg(
+										"Key %s does not exist in %s, try again.",
+										$value,
+										$tab,
+									) unless $msg;
+								return(0, $name, $msg);
+							}
+
 						},
 	'unique'			=> sub {
 							my($name, $value, $code) = @_;








More information about the interchange-cvs mailing list