| 24 |  |  | 
| 25 | <LI><A HREF="#requirements">REQUIREMENTS</A></LI> | <LI><A HREF="#requirements">REQUIREMENTS</A></LI> | 
| 26 | <LI><A HREF="#description">DESCRIPTION</A></LI> | <LI><A HREF="#description">DESCRIPTION</A></LI> | 
| 27 |  | <UL> | 
| 28 |  |  | 
| 29 |  | <LI><A HREF="#data::storage">Data::Storage</A></LI> | 
| 30 |  | <LI><A HREF="#why">Why?</A></LI> | 
| 31 |  | <LI><A HREF="#what else">What else?</A></LI> | 
| 32 |  | </UL> | 
| 33 |  |  | 
| 34 | <LI><A HREF="#authors / copyright">AUTHORS / COPYRIGHT</A></LI> | <LI><A HREF="#authors / copyright">AUTHORS / COPYRIGHT</A></LI> | 
| 35 | <LI><A HREF="#acknowledgements">ACKNOWLEDGEMENTS</A></LI> | <LI><A HREF="#acknowledgements">ACKNOWLEDGEMENTS</A></LI> | 
| 36 | <LI><A HREF="#support / warranty">SUPPORT / WARRANTY</A></LI> | <LI><A HREF="#support / warranty">SUPPORT / WARRANTY</A></LI> | 
| 52 | <HR> | <HR> | 
| 53 | <P> | <P> | 
| 54 | <H1><A NAME="name">NAME</A></H1> | <H1><A NAME="name">NAME</A></H1> | 
| 55 | <P>Data::Storage - Interface for accessing various Storage implementations for Perl in an independent way</P> | <PRE> | 
| 56 |  | Data::Storage - Interface for accessing various Storage implementations for Perl in an independent way</PRE> | 
| 57 | <P> | <P> | 
| 58 | <HR> | <HR> | 
| 59 | <H1><A NAME="aims">AIMS</A></H1> | <H1><A NAME="aims">AIMS</A></H1> | 
| 175 | }</PRE> | }</PRE> | 
| 176 | <P> | <P> | 
| 177 | <H2><A NAME="note">NOTE</A></H2> | <H2><A NAME="note">NOTE</A></H2> | 
| 178 | <P>This module heavily relies on DBI and Tangram, but adds a lot of additional bugs and quirks. | <PRE> | 
| 179 | Please look at their documentation and/or this code for additional information.</P> | This module heavily relies on DBI and Tangram, but adds a lot of additional bugs and quirks. | 
| 180 |  | Please look at their documentation and/or this code for additional information.</PRE> | 
| 181 | <P> | <P> | 
| 182 | <HR> | <HR> | 
| 183 | <H1><A NAME="requirements">REQUIREMENTS</A></H1> | <H1><A NAME="requirements">REQUIREMENTS</A></H1> | 
| 194 | <P> | <P> | 
| 195 | <HR> | <HR> | 
| 196 | <H1><A NAME="description">DESCRIPTION</A></H1> | <H1><A NAME="description">DESCRIPTION</A></H1> | 
| 197 | <P>Data::Storage is a module for accessing various ``data structures'' stored inside | <P> | 
| 198 | various ``data containers''. It sits on top of DBI and/or Tangram.</P> | <H2><A NAME="data::storage">Data::Storage</A></H2> | 
| 199 |  | <PRE> | 
| 200 |  | Data::Storage is a module for accessing various "data structures / kinds of structured data" stored inside | 
| 201 |  | various "data containers". | 
| 202 |  | We tried to use the AdapterPattern (<A HREF="http://c2.com/cgi/wiki?AdapterPattern">http://c2.com/cgi/wiki?AdapterPattern</A>) to implement a wrapper-layer | 
| 203 |  | around core CPAN modules (Tangram, DBI).</PRE> | 
| 204 |  | <P> | 
| 205 |  | <H2><A NAME="why">Why?</A></H2> | 
| 206 |  | <PRE> | 
| 207 |  | You will get a better code-structure (not bad for later maintenance) in growing Perl code projects, | 
| 208 |  | especially when using multiple database connections at the same time. | 
| 209 |  | You will be able to switch between different _kinds_ of implementations used for storing data. | 
| 210 |  | Your code will use the very same API to access these storage layers. | 
| 211 |  | ... implementation has to be changed for now | 
| 212 |  | Maybe you will be able to switch "on-the-fly" without changing any bits in code in the future.... | 
| 213 |  | ... but that's not the focus</PRE> | 
| 214 |  | <P> | 
| 215 |  | <H2><A NAME="what else">What else?</A></H2> | 
| 216 |  | <PRE> | 
| 217 |  | Having this, we were able to do implement a generic data synchronization module more easy, | 
| 218 |  | please look at Data::Transfer.</PRE> | 
| 219 | <P> | <P> | 
| 220 | <HR> | <HR> | 
| 221 | <H1><A NAME="authors / copyright">AUTHORS / COPYRIGHT</A></H1> | <H1><A NAME="authors / copyright">AUTHORS / COPYRIGHT</A></H1> | 
| 222 | <P>The Data::Storage module is Copyright (c) 2002 Andreas Motl. | <PRE> | 
| 223 | All rights reserved.</P> | The Data::Storage module is Copyright (c) 2002 Andreas Motl. | 
| 224 | <P>You may distribute it under the terms of either the GNU General Public | All rights reserved. | 
| 225 | License or the Artistic License, as specified in the Perl README file.</P> | You may distribute it under the terms of either the GNU General Public | 
| 226 |  | License or the Artistic License, as specified in the Perl README file.</PRE> | 
| 227 | <P> | <P> | 
| 228 | <HR> | <HR> | 
| 229 | <H1><A NAME="acknowledgements">ACKNOWLEDGEMENTS</A></H1> | <H1><A NAME="acknowledgements">ACKNOWLEDGEMENTS</A></H1> | 
| 230 | <P>Larry Wall for Perl, Tim Bunce for DBI, Jean-Louis Leroy for Tangram and Set::Object, | <PRE> | 
| 231 | Sam Vilain for Class::Tangram, Jochen Wiedmann and Jeff Zucker for DBD::CSV and related, | Larry Wall for Perl, Tim Bunce for DBI, Jean-Louis Leroy for Tangram and Set::Object, | 
| 232 | Adam Spiers for MySQL::Diff and all contributors.</P> | Sam Vilain for Class::Tangram, Jochen Wiedmann and Jeff Zucker for DBD::CSV & Co., | 
| 233 |  | Adam Spiers for MySQL::Diff and all contributors.</PRE> | 
| 234 | <P> | <P> | 
| 235 | <HR> | <HR> | 
| 236 | <H1><A NAME="support / warranty">SUPPORT / WARRANTY</A></H1> | <H1><A NAME="support / warranty">SUPPORT / WARRANTY</A></H1> | 
| 237 | <P>Data::Storage is free software. IT COMES WITHOUT WARRANTY OF ANY KIND.</P> | <PRE> | 
| 238 |  | Data::Storage is free software. IT COMES WITHOUT WARRANTY OF ANY KIND.</PRE> | 
| 239 | <P> | <P> | 
| 240 | <HR> | <HR> | 
| 241 | <H1><A NAME="todo">TODO</A></H1> | <H1><A NAME="todo">TODO</A></H1> | 
| 303 | -  .wab - files (Windows Address Book) | -  .wab - files (Windows Address Book) | 
| 304 | -  .pst - files (Outlook Post Storage?) | -  .pst - files (Outlook Post Storage?) | 
| 305 | -  XML (e.g. via XML::Simple?) | -  XML (e.g. via XML::Simple?) | 
| 306 | - Move to t3, look at InCASE</PRE> | - Move to t3, look at InCASE | 
| 307 |  | - some kind of security layer for methods/objects | 
| 308 |  | - acls (stored via tangram/ldap?) for functions, methods and objects (entity- & data!?) | 
| 309 |  | - where are the hooks needed then? | 
| 310 |  | - is Data::Storage & Co. okay, or do we have to touch the innards of DBI and/or Tangram? | 
| 311 |  | - an attempt to start could be: | 
| 312 |  | - 'sub getACLByObjectId($id, $context)' | 
| 313 |  | - 'sub getACLByMethodname($id, $context)' | 
| 314 |  | - 'sub getACLByName($id, $context)' | 
| 315 |  | ( would require a kinda registry to look up these very names pointing to arbitrary locations (code, data, ...) )</PRE> | 
| 316 | <P> | <P> | 
| 317 | <H3><A NAME="links / references">LINKS / REFERENCES</A></H3> | <H3><A NAME="links / references">LINKS / REFERENCES</A></H3> | 
| 318 | <PRE> | <PRE> |