• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

MDB/H03-May-2022-25,14813,102

doc/H03-May-2022-1,355269

tests/H03-May-2022-4,8503,746

MAINTAINERSH A D05-Aug-2003608 1614

MDB.phpH A D01-Mar-200426 KiB733345

READMEH A D05-Aug-200310.9 KiB249198

TODOH A D05-Aug-20031.3 KiB2624

README

1** Introduction:
2
3PEAR MDB is a project to merge PEAR DB and Metabase into one DB
4abstraction layer.
5
6You can get info on these at:
7  PEAR DB: http://pear.php.net
8  Metabase: http://phpclasses.upperdesign.com/browse.html/package/20/
9
10At these URLs you will also find the licensing information on these two
11projects along with the credits.
12
13If you have any questions or suggestions you can contact me (Lukas Smith)
14at this email address:
15  smith@backendmedia.com
16Co-Author is Christopher Linn:
17  clinn@backendmedia.com
18
19Or even better post a message to these 3 mailinglists (please include
20all of these because there are people on each of these mailinglists that
21care about this project and have asked to be included in any
22discussion):
23  pear-dev@lists.php.net
24  metabase-dev@yahoogroups.com
25  dev@binarycloud.tigris.org
26
27** Features
28
29MDB provides a common API for all support RDBMS. The main difference to most
30other DB abstraction packages is that MDB goes much further to ensure
31portability. Among other things MDB features:
32* An OO-style query API
33* A DSN (data source name) or array format for specifying database servers
34* Datatype abstraction and on demand datatype conversion
35* Portable error codes
36* Sequential and non sequential row fetching as well as bulk fetching
37* Ordered array and associative array for the fetched rows
38* Prepare/execute (bind) emulation
39* Sequence emulation
40* Replace emulation
41* Limited Subselect emulation
42* Row limit support
43* Transactions support
44* Large Object support
45* Index/Unique support
46* Extension Framework to load advanced functionality on demand
47* Table information interface
48* RDBMS management methods (creating, dropping, altering)
49* RDBMS independent xml based schema definition management
50* Altering of a DB from a changed xml schema
51* Reverse engineering of xml schemas from an existing DB (currently only MySQL)
52* Full integration into the PEAR Framework
53* Wrappers for the PEAR DB and Metabase APIs
54* PHPDoc API documentation
55
56Currently supported RDBMS:
57MySQL
58PostGreSQL
59Oracle (beta)
60Frontbase SQL (alpha)
61Querysim
62Other soon to follow.
63
64** Getting started:
65
66I would first recommend taking a look at MDB_test.php.
67This should give you a general feel of how to interact with MDB.
68
69After that you may want to take a look at the rather large API
70at www.backendmedia.com/MDB/docs. There you will also find a document
71describing the xml schema format and a little tutorial (it was
72just recently ported from Metabase, so it may contain errors).
73
74** Current State:
75
76The current release can be found at the PEAR webpage:
77  http://pear.php.net/package-info.php?package=MDB
78
79----------------------------------- WARNING -----------------------------------
80MDB is still undergoing active development and therefore its API might
81change slightly until drivers for ODBC and Sybase/MS-SQL have been added. But
82since MDB is heavily based on PEAR DB and Metabase who both have drivers for
83these RDBMS this is probably fairly unlikely to happen or have large effects.
84It is unlikely that BC specific code will be written to maintain BC for only
85release prior to this version.
86
87Furthermore the manager might see some drastic changes in the future which would
88affect the manager.php and the get*Definition() methods in the manager_*.php.
89However this will most likely be extending the functionality and not changing
90existing functionality.
91----------------------------------- WARNING -----------------------------------
92
93All but the MySQL driver are still missing the reverse engineering of xml schemas.
94
95The core of MDB is very stable since quite sometime, with very few bugs that
96had to be fixed or API changes that had to be made. The manager is still in a
97bit of flux as the API is still not final and some methods still need to be
98split up into smaller methods to improve readability and flexability. Also
99new features will be added as needed by the MDB_frontend project.
100
101The 1.0 of MDB can be considered stable for the RDBMS it currently
102supports. As with any software there is the possiblity of bugs which I am
103commited to fix quickly. As explained above there may be changes in the API
104that may break BC until we hit 1.1. The version number 1.0 was just a natural
105progression from the initial version number of 0.9. This 1.0 release is a
106definite milestone and the version number reflects this. The next milestone
107will be 1.1 to be expected in Fall 2002 (see the Roadmap for details).
108
109** Package Content:
110
111As a user the only php script you will need to include is MDB.php which will
112install to your PEAR root directory. All other files and their containing
113classes will be included via MDB::factory(), MDB::connect(), MDB::loadFile().
114
115Currently the supported drivers are mysql and pgsql.
116File you may include are:
117peardb_wrapper (PEAR DB Wrapper)
118metabase_wrapper (Metabase Wrapper)
119Date (MDB_Date class which helps in converting MDB Timestamps to other formats)
120Manager (MDB_Manager class which does the XML schema handling)
121
122The only exception to this rule is reverse_engineer_xml_schema.php which you
123have to call directly from a browser. This very simple script will help you
124with handling schema files and create schema files from existing databases. This
125script requires PEAR::Var_Dump package.
126
127The package also contains various files that explain how MDB works. These files
128will install into your docs dir found in the PEAR root dir.
129
130Furthermore MDB provides an extensive testing framework that works through a
131browser and command line interface. There are several other test that test the
132two wrappers. These files will install into your test dir found in the
133PEAR root dir.
134
135** Documentation:
136
137PHPDoc generated documentation can be found at: http://www.backendmedia.com/MDB/docs/
138
139The entire "public" API and most of the "private" methods (except for some of
140the lob classes) have been documented with PHPDoc comments. Most of the API
141is borrowed from PEAR DB, so you can look there for detailed documentation.
142Since there are a large number of new methods available thanks to the Metabase
143heritage of MDB you will also have to take a look in the Metabase documentation
144(which can be found at the URL mentioned above, but does require that
145you register with phpclasses). Most of these Metabase functions have
146been renamed. Looking at the metabase_wrapper.php file should help finding
147the new method name in MDB.
148
149For example ($db being an MDB object):
150  $converted_value = MetabaseGetTimestampFieldValue($database, $value);
151would now be
152  $converted_value = $db->getTimestampValue($value);
153
154If you want to help out with documentation please email me.
155
156** Testing:
157
158For most of the tests you can set the username/password/hostname in the relevant
159config file. The user will need to have the right to create new databases.
160
161test.php/clitest.php/testchoose.php: Is the native testing suite provided by
162MDB. Please see the README in the tests directory for details.
163
164driver_test.php: Is the testing suite provided by Metabase you will need
165to configure what driver to test and the relevant section in the array found in
166driver_test_config.php to fit your enviornment.
167
168MDB_test.php: Several test calls to MDB's native API.
169MDB_pear_wrapper_test.php: Several test calls to MDB's PEAR DB Wrapper.
170
171MDB_test.php and MDB_pear_wrapper_test.php require PEAR::VAR_Dump package and
172are configured to use the following settings:
173username = metapear
174password = funky
175hostname = localhost
176
177** How to write new Drivers:
178
179Skeleton drivers are provided in the docs directory of the MDB package.
180
181MDB is mostly based in Metabase. The method naming and formatting is
182changed to better match the PEAR CS however. Therefore the best starting
183point is to first take one of the Metabase drivers (metabase_[DRIVER NAME].php)
184and compare it with a corresponding MDB driver ([DRIVER NAME].php and
185manager_[DRIVER NAME].php). This will give a good idea what changes you have to
186make to an existing Metabase driver in order to make it MDB compatible.
187
188(Note: In order to get the Metabase code you will need to download it from
189phpclasses using the URL provided at the top).
190
191Alot of methods have been renamed from the original Metabase API. The best
192place to find the name to what a method has been renamed you should look
193at the metabase_wrapper.php file.
194
195Please also note that some methods have been taken from PEAR DB so for some
196missing methods you can check the PEAR DB driver.
197
198Another alternative would be to take a MDB driver and hack it to fit
199the new RDBMS. I would however recommend working with the existing
200Metabase driver for that RDBMS when doing those changes. This will
201surely be faster and it will ensure that the new driver takes full
202advantage of the MDB framework (which is to large parts based on
203Metabase).
204
205In order to check compliance of the driver with MDB you can use the testing
206suite (see the "testing" section above)
207
208** History
209
210MDB was started after Manuel broad be into the discussion about getting the
211features of Metabase into PEAR that was going on (again) in December 2001. He
212suggested that I could take on this project. After alot of discussion about
213how when and if etc I started development in February 2002.
214
215MDB is based on Metabase but has been reworked severely to better match
216the PEAR DB API and PEAR CS. The approach I have taken so far is to take DB.php
217from PEAR DB and make it create a Metabase object. I have changed the
218Metabase structure slightly. The formatting has been reworked
219considerably to better fit the final structure (MDB standalone with a
220BC-wrapper for Metabase and PEAR DB), to fit the PEAR CS and to make it
221easier for other people to contribute.
222
223The metabase_interface.php was been renamed to metabase_wrapper.php and
224now only serves as a wrapper to keep BC with Metabase. A wrapper will
225have to be created for PEAR DB as well.
226
227Basically the result is a Metabase that is really close to the PEAR DB
228structure. I have also added any missing methods from PEAR DB. Work on
229moving the error handling to PEAR error handling is under way but still
230needs some work.
231
232** Credits (never to early for those huh? :-)  ):
233
234I would especially like to thank Manuel Lemos (Author of Metabase) for
235getting me involved in this and generally being around to ask questions.
236I would also like to thank Tomas Cox and Stig S. Bakken from the PEAR
237projects for help in undertstanding PEAR, solving problems and trusting
238me enough. Paul Cooper for the work on the pgsql driver. Furthermore I
239would like to thank Alex Black for being so enthusiastic about this
240project and offering binarycloud as a test bed for this project.
241Christian Dickmann for being the first to put MDB to some real use,
242making MDB use PEAR Error and working on the XML schema manager.
243
244Finally Peter Bowyer for starting the discussion that made people pick
245up this project again after the first versions of what was then called
246"metapear" have been ideling without much feedback. I guess I should
247also thank BackendMedia (my company :-)  ) for providing the necessary means
248to develop this on company time (actually for the most part my entire
249life is company time ... so it goes)