[interchange-cvs] interchange - racke modified lib/Vend/Table/Shadow.pm

interchange-core@icdevgroup.org interchange-core@icdevgroup.org
Sat Jul 13 08:45:01 2002


User:      racke
Date:      2002-07-13 12:44:38 GMT
Modified:  lib/Vend/Table Shadow.pm
Log:
bunch of new functions added, but not usable for now

Revision  Changes    Path
1.5       +112 -7    interchange/lib/Vend/Table/Shadow.pm


rev 1.5, prev_rev 1.4
Index: Shadow.pm
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /anon_cvs/repository/interchange/lib/Vend/Table/Shadow.pm,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Shadow.pm	9 Jul 2002 17:42:12 -0000	1.4
+++ Shadow.pm	13 Jul 2002 12:44:36 -0000	1.5
@@ -1,6 +1,6 @@
 # Vend::Table::Shadow - Access a virtual "Shadow" table
 #
-# $Id: Shadow.pm,v 1.4 2002/07/09 17:42:12 mheins Exp $
+# $Id: Shadow.pm,v 1.5 2002/07/13 12:44:36 racke Exp $
 #
 # Copyright (C) 2002 Stefan Hornburg (Racke) <racke@linuxia.de>
 #
@@ -20,7 +20,7 @@
 # MA  02111-1307  USA.
=20
 package Vend::Table::Shadow;
-$VERSION =3D substr(q$Revision: 1.4 $, 10);
+$VERSION =3D substr(q$Revision: 1.5 $, 10);
=20
 # TODO
 #
@@ -29,8 +29,8 @@
=20
 use strict;
=20
-use vars qw($CONFIG $TABLE $KEY $NAME $TYPE $OBJ);
-($CONFIG, $TABLE, $KEY, $NAME, $TYPE, $OBJ) =3D (0 .. 5);
+use vars qw($CONFIG $TABLE $KEY $NAME $TYPE $OBJ $PENDING);
+($CONFIG, $TABLE, $KEY, $NAME, $TYPE, $OBJ, $PENDING) =3D (0 .. 6);
=20
 sub config {
 	my ($s, $key, $value) =3D @_;
@@ -40,8 +40,17 @@
 }
=20
 sub import_db {
-	my($s) =3D @_;
-	my $db =3D Vend::Data::import_database($s->[0], 1);
+	my ($s) =3D @_;
+	my ($db);
+
+	if ($s->[$PENDING]) {
+		die "Recursive call to Vend:Table::Shadow::import_db detected (database =
$s->[0]->{name})\n";
+	}
+=09
+	$s->[$PENDING] =3D 1;
+	$db =3D Vend::Data::import_database($s->[0], 1);
+	$s->[$PENDING] =3D 0;
+
 	return undef if ! $db;
 	$Vend::Database{$s->[0]{name}} =3D $db;
 	Vend::Data::update_productbase($s->[0]{name});
@@ -69,7 +78,7 @@
 sub open_table {
 	my ($class, $config, $tablename) =3D @_;
 	my $obj;
-=09
+#::logDebug ("CLASS: $class CONFIG: " . ::Vend::Util::uneval($config));=09
 	no strict 'refs';
 	$obj =3D &{"Vend::Table::$config->{OrigClass}::open_table"}("Vend::Table:=
:$config->{OrigClass}",$config,$tablename);
 	my $s =3D [$config, $tablename, undef, undef, undef, $obj];
@@ -80,6 +89,7 @@
=20
 sub close_table {
 	my $s =3D shift;
+	return 1 unless defined $s->[$OBJ];
 	$s->[$OBJ]->close_table();
 }
=20
@@ -89,6 +99,97 @@
 	return $s->[$OBJ]->columns();
 }
=20
+sub test_column {
+	my ($s, $column) =3D @_;
+	$s =3D $s->import_db() unless defined $s->[$OBJ];
+	return $s->[$OBJ]->test_column($column);
+}
+
+sub numeric {
+	my ($s, $column) =3D @_;
+	my ($map, $locale);
+
+	$s =3D $s->import_db() if ! defined $s->[$OBJ];
+	$locale =3D $::Scratch->{mv_locale} || 'default';
+	if (exists $s->[$CONFIG]->{MAP}->{$column}->{$locale}) {
+		$column =3D $s->[$CONFIG]->{MAP}->{$column}->{$locale};
+	}
+=09
+	return $s->numeric($column);
+}
+
+sub column_index {
+	my ($s, $column) =3D @_;
+	$s =3D $s->import_db() unless defined $s->[$OBJ];
+	return $s->[$OBJ]->column_index($column);
+}
+
+sub column_exists {
+    my ($s, $column) =3D @_;
+	my ($locale);
+=09
+	$s =3D $s->import_db() if ! defined $s->[$OBJ];
+	$locale =3D $::Scratch->{mv_locale} || 'default';
+	if (exists $s->[$CONFIG]->{MAP}->{$column}->{$locale}) {
+		$column =3D $s->[$CONFIG]->{MAP}->{$column}->{$locale};
+	}
+=09
+	return defined($s->[$CONFIG]{COLUMN_INDEX}{lc $column});
+}
+
+sub set_row {
+	my ($s, @fields) =3D @_;
+
+	if ($s->[$PENDING]) {
+		no strict 'refs';
+		return &{"Vend::Table::$s->[0]->{OrigClass}::set_row"}($s, @fields);
+	}
+=09=09
+	$s =3D $s->import_db() if ! defined $s->[$OBJ];
+	$s->[$OBJ]->set_row(@fields);
+}
+
+sub row {
+	my ($s, $key) =3D @_;
+	my ($column, $locale);
+=09
+	$s =3D $s->import_db() if ! defined $s->[$OBJ];
+	$locale =3D $::Scratch->{mv_locale} || 'default';
+=09
+	my @row =3D $s->[$OBJ]->row($key);
+	if (@row) {
+		my @cols =3D $s->columns();
+		for (my $i =3D 0; $i < @cols; $i++) {
+			$column =3D $cols[$i];
+			if (exists $s->[$CONFIG]->{MAP}->{$column}->{$locale}) {
+				$column =3D $s->[$CONFIG]->{MAP}->{$column}->{$locale};
+				$row[$i] =3D $s->field($key, $column);
+			}
+		}
+	}
+	return @row;
+}
+
+sub row_hash {
+	my ($s, $key) =3D @_;
+	my ($ref, $column, $locale);
+=09
+	$s =3D $s->import_db() unless defined $s->[$OBJ];
+	$locale =3D $::Scratch->{mv_locale} || 'default';
+	$ref =3D $s->[$OBJ]->row_hash($key);
+	if ($ref) {
+		my @cols =3D $s->columns();
+		for (my $i =3D 0; $i < @cols; $i++) {
+			$column =3D $cols[$i];
+			if (exists $s->[$CONFIG]->{MAP}->{$column}->{$locale}) {
+				$column =3D $s->[$CONFIG]->{MAP}->{$column}->{$locale};
+				$ref->{$cols[$i]} =3D $s->field($key, $column);
+			}
+		}
+	}
+	return $ref;
+}
+
 sub field {
 	my ($s, $key, $column) =3D @_;
 	my ($map, $locale);
@@ -104,6 +205,10 @@
 sub ref {
 	return $_[0] if defined $_[0]->[$OBJ];
 	return $_[0]->import_db();
+}
+
+sub test_record {
+	1;
 }
=20
 sub record_exists {