cvsuser 02/08/16 09:07:06
Modified: P5EEx/Blue/P5EEx/Blue Repository.pm
Log:
began work on documenting a revised API
Revision Changes Path
1.22 +83 -2 p5ee/P5EEx/Blue/P5EEx/Blue/Repository.pm
Index: Repository.pm
===================================================================
RCS file: /cvs/public/p5ee/P5EEx/Blue/P5EEx/Blue/Repository.pm,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -w -r1.21 -r1.22
--- Repository.pm 2 Aug 2002 19:33:17 -0000 1.21
+++ Repository.pm 16 Aug 2002 16:07:06 -0000 1.22
@@ -1,6 +1,6 @@
#############################################################################
-## $Id: Repository.pm,v 1.21 2002/08/02 19:33:17 spadkins Exp $
+## $Id: Repository.pm,v 1.22 2002/08/16 16:07:06 spadkins Exp $
#############################################################################
package P5EEx::Blue::Repository;
@@ -121,6 +121,69 @@
# OBJECT FACTORY
$obj = $rep->object($table, $key);
+ #################################################
+ # NEW PROPOSED API (working)
+ #################################################
+
+ # PHYSICAL
+ $row = $rep->_select_row ($table, \@cols, \%paramvalues);
+ $rowhash = $rep->_select_hash ($table, undef, \%paramvalues);
+ $rowhash = $rep->_select_hash ($table, \@cols, \%paramvalues);
+ $rows = $rep->_select_rows ($table, \@cols, \%paramvalues,
\@ordercols, $startrow, $endrow);
+ $value = $rep->_select_values($table, \@cols, \%paramvalues);
+ @values = $rep->_select_values($table, \@cols, \%paramvalues);
+ $ok = $rep->_insert_row ($table, \@cols, \@row);
+ $ok = $rep->_insert_rows ($table, \@cols, \@rows);
+ $ok = $rep->_update_row ($table, \@cols, \@row, \@keycols);
+ $ok = $rep->_update_rows ($table, \@cols, \@row, \%paramvalues);
+ $ok = $rep->_delete_row ($table, \@cols, \@row, \@keycols);
+ $ok = $rep->_delete_rows ($table, \%paramvalues);
+ $ok = $rep->_store_row ($table, \@cols, \@row, \@keycols);
+ $ok = $rep->_store_hash ($table, $rowhash, \@keycols);
+ $nrows = $rep->_store_rows ($table, \@cols, \@rows, \@keycols);
+ $nrows = $rep->_store_rows ($table, \@cols, \@rows, \@keycols,
\%paramvalues);
+
+ # LOGICAL
+ $row = $rep->select_row ($table, \@cols, \%paramvalues);
+ $rowhash = $rep->select_hash ($table, undef, \%paramvalues);
+ $rowhash = $rep->select_hash ($table, \@cols, \%paramvalues);
+ $rows = $rep->select_rows ($table, \@cols, \%paramvalues,
\@ordercols, $startrow, $endrow);
+ $value = $rep->select_values ($table, \@cols, \%paramvalues);
+ @values = $rep->select_values ($table, \@cols, \%paramvalues);
+ $ok = $rep->insert_row ($table, \@cols, \@row);
+ $ok = $rep->insert_rows ($table, \@cols, \@rows);
+ $ok = $rep->update_row ($table, \@cols, \@row, \@keycols);
+ $ok = $rep->update_rows ($table, \@cols, \@row, \%paramvalues);
+ $ok = $rep->delete_row ($table, \@cols, \@row, \@keycols);
+ $ok = $rep->delete_rows ($table, \%paramvalues);
+ $ok = $rep->store_row ($table, \@cols, \@row, \@keycols);
+ $ok = $rep->store_hash ($table, $rowhash, \@keycols);
+ $nrows = $rep->store_rows ($table, \@cols, \@rows, \@keycols);
+ $nrows = $rep->store_rows ($table, \@cols, \@rows, \@keycols,
\%paramvalues);
+
+ $key = $rep->get_key ($table, \@cols, \@values);
+ $key = $rep->get_key ($table, \@cols, \@values, \@keycolidx);
+ @keys = $rep->get_keys($table, \%paramvalues);
+ @values = $rep->get_values($table, $key, \@cols);
+ $value = $rep->get_value ($table, $key, "first_name");
+ $rep->set_values($table, $key, \@cols, \@values);
+ $rep->set_value ($table, $key, $column, $value);
+
+ $relation_names = $rep->get_relation_names($table);
+ $relation_labels = $rep->get_relation_labels($table);
+ $relation_def = $rep->get_relation_def($table, $relation_name);
+ @keys = $rep->get_related_keys($table, $key, $relation_name);
+
+ # OBJECT-ORIENTED
+ $class = $table;
+ $obj = $rep->object($class, $key);
+
+ # OBJECT-ORIENTED (on RepositoryObject)
+ $relation_names = $obj->get_relation_names();
+ $relation_labels = $obj->get_relation_labels();
+ $relation_def = $obj->get_relation_def($relation_name);
+ @objs = $obj->get_related_objects($relation_name);
+
=cut
=head1 DESCRIPTION
@@ -149,7 +212,7 @@
accurately called logical-to-physical-relational mapping.
Despite the fact that the Repository is a relational data storage
-abstraction, persistent objects (i.e. Entity Widgets) can be built to
+abstraction, persistent objects (i.e. RepositoryObjects) can be built to
save and restore their state from a Repository. Furthermore, the
built-in support for non-scalar fields (references to arbitrarily
complex perl data structures) and the ability for Entity Widgets
@@ -174,6 +237,24 @@
* data source independence
* no save/restore
* devel/test/prod environments
+
+What follows are some developing thoughts on this API...
+
+ * The API should have two levels:
+ = physical
+ - no error-checking/defaults/security
+ - provided by the driver
+ - based on a physical table segment
+ - application should never call this (private methods)
+ = logical
+ - error-checking
+ - constraints (foreign key, check constraints)
+ - column-level and row-level security
+ - support transactions, caching, volatility
+ - auditing
+
+ * Isolation levels
+ = do writers block readers, etc.
=cut