- Timestamp:
- 09/16/07 08:09:11 (16 months ago)
- Location:
- ext/Muldis-DB
- Files:
-
- 5 modified
-
Changes (modified) (4 diffs)
-
README (modified) (4 diffs)
-
lib/Muldis/DB.pm (modified) (12 diffs)
-
lib/Muldis/DB/Engine/Example.pm (modified) (2 diffs)
-
lib/Muldis/DB/Interface.pm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
ext/Muldis-DB/Changes
r17855 r17866 2 2 --------------------------------------------------------------------------- 3 3 4 2007-09- 14Darren Duncan <perl@DarrenDuncan.net>5 6 * Muldis DB version 0. 3.2for Perl 5 is released on CPAN as7 Muldis-DB-0. 3.2.tar.gz. Muldis DB version 0.3.2for Perl 6 is not4 2007-09-xx Darren Duncan <perl@DarrenDuncan.net> 5 6 * Muldis DB version 0.4.0 for Perl 5 is released on CPAN as 7 Muldis-DB-0.4.0.tar.gz. Muldis DB version 0.4.0 for Perl 6 is not 8 8 released at this time, if ever, since it is currently released only as 9 9 part of the Perl6-Pugs project (in its ext/Muldis-DB/ subdirectory), … … 11 11 Changes entry refers only to the Perl 5 version. 12 12 13 * New file versions are: DB.pm and Interface.pm and Validator.pm and 14 Example.pm 0.4.0. The other pre-existing versioned files are 15 unchanged. 16 17 * (DB.pm, Interface.pm, Example.pm) Updates to various 18 main/introductory documentation. Half rewrote/prepended the 19 DESCRIPTION of DB.pm. Added a small initial DESCRIPTION to each of 20 Interface.pm, Example.pm. Further minor edits to other sections. 21 22 2007-09-14 Darren Duncan <perl@DarrenDuncan.net> 23 24 * Muldis DB version 0.3.2 for Perl 5 is released on CPAN as 25 Muldis-DB-0.3.2.tar.gz. Muldis DB version 0.3.2 for Perl 6 is not 26 released at all. The rest of this Changes entry refers only to the 27 Perl 5 version. 28 13 29 * Removed the file Copying.pod; it isn't particularly useful anymore. 14 30 15 * New file versions are: DB.pm 0.3.2. 31 * New file versions are: DB.pm 0.3.2. The other pre-existing versioned 32 files are unchanged. 16 33 17 34 * (DB.pm) The whole Muldis DB core, that is, all code in this … … 26 43 2007-08-18 Darren Duncan <perl@DarrenDuncan.net> 27 44 45 Record update in the PAUSE modules database: 46 47 modid: [Muldis::DB] 48 statd: [c] 49 stats: [m] 50 statl: [p] 51 stati: [O] 52 statp: [l] was [g] 53 description: [Full-featured truly relational DBMS in Perl] 54 userid: [DUNCAND] 55 chapterid: [7] 56 mlstatus: [list] 57 58 2007-08-18 Darren Duncan <perl@DarrenDuncan.net> 59 28 60 * Muldis DB version 0.3.1 for Perl 5 is released on CPAN as 29 61 Muldis-DB-0.3.1.tar.gz. Muldis DB version 0.3.1 for Perl 6 is not … … 38 70 version number declared in the Makefile.PL. 39 71 40 * New file versions are: DB.pm and Copying.pod 0.3.1. 72 * New file versions are: DB.pm and Copying.pod 0.3.1. The other 73 pre-existing versioned files are unchanged. 41 74 42 75 * (DB.pm, Copying.pod) The license of Muldis DB has been simplified -
ext/Muldis-DB/README
r17781 r17866 10 10 relational DBMS in Perl) and its support structure. 11 11 12 Muldis ::DB is the successor of the now-defunct Rosetta DBMS framework,12 Muldis DB is the successor of the now-defunct Rosetta DBMS framework, 13 13 which it is heavily based on and has learned from, though for all practical 14 purposes, Muldis ::DB is a complete rewrite with significant changes. (Note15 that Muldis ::DB was temporarily named QDRDBMS during its pre-release14 purposes, Muldis DB is a complete rewrite with significant changes. (Note 15 that Muldis DB was temporarily named QDRDBMS during its pre-release 16 16 development phase.) Given the magnitude of the differences, the actual 17 change history of Rosetta itself is not relevant, and so Muldis ::DB does17 change history of Rosetta itself is not relevant, and so Muldis DB does 18 18 not continue its version numbering or maintain the older change log. The 19 first Muldis ::DB release on CPAN was version 0.0.0, and that was released20 2007.06.20. But Muldis ::DB does still declare copyright of 2002-present,19 first Muldis DB release on CPAN was version 0.0.0, and that was released 20 2007.06.20. But Muldis DB does still declare copyright of 2002-present, 21 21 incorporating the Rosetta development/release time-period. 22 22 23 Muldis ::DB has 2 co-developed versions, which are written in native Perl 523 Muldis DB has 2 co-developed versions, which are written in native Perl 5 24 24 and Perl 6 respectively, and which are distributed separately from each 25 25 other. But while the 2 versions would be similar, they are explicitly not … … 39 39 DOCUMENTATION READING ORDER 40 40 41 If you want to read all the Muldis ::DB documentation that exists now in41 If you want to read all the Muldis DB documentation that exists now in 42 42 this distribution, I recommend doing so in this order: 43 43 … … 66 66 67 67 For those of you that are interested in the bleeding edge of development, I 68 have all parts of the Muldis ::DB project in one or more public69 repositories. The Perl 5 Muldis ::DB project is in a Git repository whose68 have all parts of the Muldis DB project in one or more public 69 repositories. The Perl 5 Muldis DB project is in a Git repository whose 70 70 Git read-access url is "git://utsl.gen.nz/Muldis-DB" and whose Gitweb 71 71 information url is at "http://utsl.gen.nz/gitweb/?p=Muldis-DB". The Perl 6 72 Muldis ::DB project is in a Subversion repository at72 Muldis DB project is in a Subversion repository at 73 73 "http://svn.pugscode.org/pugs/ext/Muldis-DB/". The last version of Rosetta 74 74 which was the closest to being functional, created between late 2002 and … … 99 99 Currently, the best place to get basic support is the appropriate user 100 100 forums (see "http://mm.DarrenDuncan.net/mailman/listinfo"), which exist so 101 that Muldis ::DB users can help each other, or that help coming from102 Muldis ::DB developers can be said once to many people, rather than to each101 that Muldis DB users can help each other, or that help coming from 102 Muldis DB developers can be said once to many people, rather than to each 103 103 individually. 104 104 105 105 Alternately, you can purchase more advanced commercial support for 106 Muldis ::DB from the author; contact "perl@DarrenDuncan.net" for details.106 Muldis DB from the author; contact "perl@DarrenDuncan.net" for details. 107 107 108 108 FIN -
ext/Muldis-DB/lib/Muldis/DB.pm
r17855 r17866 25 25 This document is Muldis::DB version 0.3.2. 26 26 27 =head1 PREFACE 27 =head1 DESCRIPTION 28 29 The B<Muldis DB> DBMS framework is a powerful but elegant system, which 30 makes it easy to create and use relational databases in a very reliable, 31 portable, and efficient way. This "DB" file provides a 10,000 mile view of 32 the Muldis DB framework as a whole, and the detail documentation for each 33 component is included with that component. The distribution containing 34 this "DB" file is the I<Muldis DB core> distribution. 35 36 Loosely speaking, the Muldis DB framework at large is like the Perl DBI 37 framework at large, so if you know how to use the Perl DBI to work with 38 databases, it should be easy enough to apply that knowledge to using Muldis 39 DB to work with databases. Like the Perl DBI, Muldis DB has separately 40 distributable core, implementation, and extension distributions. Like an 41 implementation ("driver") of the Perl DBI, an implementation ("engine") of 42 Muldis DB works according to the command design pattern; its API is very 43 minimalistic and mainly serves to process arbitrary "commands" through a 44 single routine or three. Unlike the Perl DBI, which takes commands in some 45 dialect of SQL, which changes based on the implementation in use, Muldis DB 46 takes commands in the B<Muldis D> language, which has just one dialect 47 shared by all implementations. See the separate all-documentation 48 distribution L<Language::MuldisD> for the formal definition of the Muldis D 49 language which Muldis DB is based on. 50 51 The minimal core of the Muldis DB framework, the one component that 52 probably every program would use, is the L<Muldis::DB::Interface> file. It 53 defines a small set of roles/classes that comprise a common API (that 54 processes I<Perl Hosted Abstract Muldis D> commands) for Muldis DB 55 implementations to do and which applications invoke, called the I<Muldis DB 56 Native Interface> (or I<MDBNI>). For the most part, C<Interface> just 57 defines shims and it can only be used when they are subclassed by an 58 implementation. In the Perl DBI framework analogy, C<Interface> 59 corresponds to the L<DBI> module itself. An implementation is called a 60 I<Muldis DB Engine> or I<Engine>. 61 62 Thanks largely to the use of Muldis D as its command language, MDBNI is 63 rigorously defined, such that there should be no ambiguity when trying to 64 invoke or implement it, and so an application written to it should behave 65 identically no matter which conforming Engine is in use. 66 67 The maximal core of the Muldis DB framework, everything else of substance 68 in the same distribution as the minimal core (and this "DB" file), 69 comprises 2 additional components. The first is 70 L<Muldis::DB::Engine::Example>, a self-contained and pure-Perl reference 71 implementation of Muldis DB. The second is L<Muldis::DB::Validator>, a 72 common comprehensive test suite for Muldis DB implementations. Together, 73 these components make it possible for the Muldis DB core distribution to be 74 completely testable on its own. It is therefore also feasible for an 75 application to use Muldis DB in isolation from further framework 76 components, though doing so isn't recommended for production use since 77 C<Example> is kept simple on purpose and doesn't scale well. 78 79 Muldis DB, by way of using the Muldis D language, incorporates a complete 80 and uncompromising implementation of "I<The Third Manifesto>" (I<TTM>), a 81 formal proposal by Christopher J. Date and Hugh Darwen for a solid 82 foundation for data and database management systems (DBMSs); like Edgar F. 83 Codd's original papers, I<TTM> can be seen as an abstract blueprint for the 84 design of a DBMS and the language interface to such a DBMS. Muldis D is a 85 high-level programming language which is computationally complete (and 86 industrial strength) and has fully integrated database functionality; it 87 satisfies I<TTM>'s definition of a "B<D>" language. The main web site for 88 I<TTM> is L<http://www.thethirdmanifesto.com/>, and its authors have also 89 written several books and papers and taught classes on the subject over the 90 last 35+ years, along with Codd himself (some are listed in the separately 91 distributed L<Language::MuldisD::SeeAlso> documentation file). Note that 92 the Muldis DB documentation will be focusing mainly on how Muldis DB itself 93 works, and will not spend much time in providing rationale; you can read 94 I<TTM> itself and various other external documentation for much of that. 28 95 29 96 I<This documentation is pending.> 30 31 =head1 DESCRIPTION32 33 The "Muldis::DB" DBMS framework is a powerful but elegant system, which34 makes it easy to create and use relational databases in a very reliable,35 portable, and efficient way. This "Muldis::DB" file is the core of the36 Muldis::DB framework and defines a truly relational common programmatic37 interface (API), called the Muldis::DB Native Interface, which applications38 invoke and which multiple interchangeable "Engine" back-ends (usually39 provided by third parties) implement. This interface is rigorously40 defined, such that there should be no ambiguity when trying to invoke or41 implement it, and so an application written to it should behave identically42 no matter which conforming "Engine" is in use.43 44 Muldis::DB incorporates a complete and uncompromising implementation of45 "I<The Third Manifesto>" (I<TTM>), a formal proposal by Christopher J. Date46 and Hugh Darwen for a solid foundation for data and database management47 systems (DBMSs); like Edgar F. Codd's original papers, I<TTM> can be seen48 as an abstract blueprint for the design of a DBMS and the language49 interface to such a DBMS. The main web site for I<TTM> is50 L<http://www.thethirdmanifesto.com/>, and its authors have also written51 several books and papers and taught classes on the subject over the last52 35+ years, along with Codd himself (some are listed in the separately53 distributed L<Language::MuldisD::SeeAlso> documentation file). Note that54 the Muldis::DB documentation will be focusing mainly on how Muldis::DB55 itself works, and will not spend much time in providing rationale; you can56 read I<TTM> itself and various other external documentation for much of57 that.58 59 The Muldis::DB Native Interface is defined mainly in terms of a new60 high-level programming language named "Muldis D", which is computationally61 complete (and industrial strength) and has fully integrated database62 functionality; this language, which satisfies I<TTM>'s definition of a63 "B<D>" language, is described fully in the L<Language::MuldisD>64 documentation file that is distributed separately.65 97 66 98 While it is possible that one could write a self-contained application in … … 76 108 Perl code runs). 77 109 78 The classes and methods of L<Muldis::DB::Interface>, together with those of 79 L<Muldis::DB::Literal>, define the balance of the Muldis::DB Native 80 Interface. A Muldis::DB::Interface::DBMS object represents a single active 81 Muldis::DB virtual machine; it has a spartan DBI-inspired set of methods 82 which you use to compile/prepare and/or invoke/execute Muldis D statements 83 and routines within the virtual machine, input data to it, and output data 84 from it. 110 A Muldis::DB::Interface::DBMS object represents a single active Muldis DB 111 virtual machine; it has a spartan DBI-inspired set of methods which you use 112 to compile/prepare and/or invoke/execute Muldis D statements and routines 113 within the virtual machine, input data to it, and output data from it. 85 114 86 115 You can create more than one DBMS object at a time, and they are 87 116 essentially all isolated from each other, even if more than one uses the 88 117 same Engine class to implement it; that is, multiple DBMS objects will not 89 have references to each other at a level visible in the Muldis ::DB Native118 have references to each other at a level visible in the Muldis DB Native 90 119 Interface, if at all. To account for situations where multiple DBMS 91 120 objects want to use the same external resources, such as a repository file 92 121 on disk, it is expected that the Engines will employ appropriate measures 93 122 such as system-managed locks so that resource corruption or application 94 failure is prevented. I<Also, Muldis ::DB should be thread safe and/or123 failure is prevented. I<Also, Muldis DB should be thread safe and/or 95 124 savvy in the future, but for now it officially is not and you should not 96 share Muldis ::DB objects between multiple threads, nor have objects in125 share Muldis DB objects between multiple threads, nor have objects in 97 126 separate threads try to access the same external resources.> 98 127 99 Muldis ::DB does not use any dialect of SQL in its native API (unlike many128 Muldis DB does not use any dialect of SQL in its native API (unlike many 100 129 other DBMS products) because SQL is more ambiguous and error-prone to use, 101 130 and it is less expressive. While Muldis D is very different from SQL, it 102 131 is fully capable of modeling anything in the real world accurately, and it 103 132 can support a complete SQL emulation layer on top of it, so that your 104 legacy applications can be migrated to use the Muldis ::DB DBMS with little133 legacy applications can be migrated to use the Muldis DB DBMS with little 105 134 trouble. Likewise, emulation layers for any other programming language can 106 135 be supported, such as B<Tutorial D> or XQuery or FoxPro or dBase. 107 136 108 One distinctive feature of a Muldis ::DB DBMS (compared to a typical other137 One distinctive feature of a Muldis DB DBMS (compared to a typical other 109 138 vendor's DBMS) is that data definition statements are structured as 110 139 standard data manipulation statements but that the target relation … … 114 143 not by using special 'create' or 'alter' statements. 115 144 116 Each Muldis ::DB Engine has the complete freedom to implement the Muldis::DB117 DBMS and Muldis D however it likes; all Muldis ::DB cares about is that the145 Each Muldis DB Engine has the complete freedom to implement the Muldis DB 146 DBMS and Muldis D however it likes; all Muldis DB cares about is that the 118 147 user interface and behaviour conform to its preconceptions. 119 120 L<Muldis::DB::Engine::Example> is the self-contained and pure-Perl121 reference implementation of an Engine and is included in the "Muldis::DB"122 core distribution to allow the core to be completely testable on its own.123 It is coded intentionally in a simple fashion so that it is easy to124 maintain and and easy for developers to study. As a result, while it125 performs correctly and reliably, it also performs quite slowly; you should126 only use Example for testing, development, and study; you should not use it127 in production.128 148 129 149 For production use, there should be a wide variety of third party Engine … … 131 151 the new (under development) enterprise-strength and Perl implemented 132 152 database server named L<Genezzo> (see also L<http://www.genezzo.com/>) will 133 evolve to implement the Muldis ::DB DBMS natively, and be I<the> back-end153 evolve to implement the Muldis DB DBMS natively, and be I<the> back-end 134 154 which is recommended above all others for production use. 135 155 136 156 Most of the other (near term) third party Engines will likely just map 137 Muldis ::DB's rigorously defined API onto a pre-existing quasi-relational157 Muldis DB's rigorously defined API onto a pre-existing quasi-relational 138 158 database manager (such as SQLite, PostgreSQL, MySQL, Firebird, Teradata, 139 159 Oracle, Sybase, SQL Server, Informix, DB2, OpenBase, FrontBase, etc). Given 140 this fact, Muldis ::DB's most prominent feature is that it provides a common160 this fact, Muldis DB's most prominent feature is that it provides a common 141 161 API for access to those databases, each of which takes a different SQL or 142 162 quasi-SQL dialect. An application written to it should easily port to … … 148 168 is I<Database Driver Independence>, and not I<Database Language 149 169 Independence>. To further demonstrate the difference, it is useful to 150 compare the DBI and Muldis ::DB. I<Such documentation is currently absent.>170 compare the DBI and Muldis DB. I<Such documentation is currently absent.> 151 171 152 172 =head1 FEATURE SUPPORT VALIDATION 153 173 154 The Muldis ::DB Native Interface declares accessors for a large number of174 The Muldis DB Native Interface declares accessors for a large number of 155 175 actual or possible database features, any of which your application can 156 invoke, and all of which each Muldis ::DB Engine would ideally implement or176 invoke, and all of which each Muldis DB Engine would ideally implement or 157 177 interface to. 158 178 … … 163 183 corruption over time. 164 184 165 As an official quality assurance (QA) measure, Muldis ::DB provides a means185 As an official quality assurance (QA) measure, Muldis DB provides a means 166 186 for each Engine to programmatically declare which features it does and does 167 187 not support, so that code using that Engine will know so in advance of … … 177 197 alternatives also support the features you are using. Note that, generally 178 198 speaking, you would have to be using very proprietary features to begin 179 with in order for the majority of Muldis ::DB Engines/databases to not199 with in order for the majority of Muldis DB Engines/databases to not 180 200 support the application outright. 181 201 182 202 Another benefit of this QA feature is that there can be made a common 183 203 comprehensive test suite to run against all Engines in order to tell that 184 they are implementing the Muldis ::DB interface properly or not; said test204 they are implementing the Muldis DB interface properly or not; said test 185 205 suite will be smart enough to only test each Engine's compliance for those 186 206 features that the Engine claims to support, and not fail it for non-working … … 195 215 196 216 The separate all-documentation distribution L<Language::MuldisD> is the 197 formal definition of the Muldis D language which Muldis ::DB is based on.198 199 The Perl module L<Muldis::DB::Validator> is bundled with Muldis ::DB and can200 be used to test Muldis ::DB Engines.201 202 The Perl module L<Muldis::DB::Engine::Example> is bundled with Muldis ::DB203 and implements a self-contained reference implementation of a Muldis ::DB217 formal definition of the Muldis D language which Muldis DB is based on. 218 219 The Perl module L<Muldis::DB::Validator> is bundled with Muldis DB and can 220 be used to test Muldis DB Engines. 221 222 The Perl module L<Muldis::DB::Engine::Example> is bundled with Muldis DB 223 and implements a self-contained reference implementation of a Muldis DB 204 224 Engine. 205 225 … … 251 271 252 272 Several public email-based forums exist whose main topic is all 253 implementations of the Muldis D language, especially the L<Muldis::DB> 254 project, which they are named for. All of these you can reach via 255 L<http://mm.DarrenDuncan.net/mailman/listinfo>; go there to manage your 256 subscriptions to, or view the archives of, the following: 273 implementations of the L<Muldis D|Language::MuldisD> language, especially 274 the L<Muldis DB|Muldis::DB> project, which they are named for. All of 275 these you can reach via L<http://mm.DarrenDuncan.net/mailman/listinfo>; go 276 there to manage your subscriptions to, or view the archives of, the 277 following: 257 278 258 279 =over … … 260 281 =item C<muldis-db-announce@mm.DarrenDuncan.net> 261 282 262 This low-volume list is mainly for official announcements from the 263 Muldis::DB developers, though developers of Muldis::DB extensions can also 264 posttheir announcements here. This is not a discussion list.283 This low-volume list is mainly for official announcements from the Muldis 284 DB developers, though developers of Muldis DB extensions can also post 285 their announcements here. This is not a discussion list. 265 286 266 287 =item C<muldis-db-users@mm.DarrenDuncan.net> 267 288 268 This list is for general discussion among people who are using Muldis ::DB,269 which is not concerned with the implementation of Muldis ::DB itself. This270 is the best place to ask for basic help in getting Muldis ::DB installed on289 This list is for general discussion among people who are using Muldis DB, 290 which is not concerned with the implementation of Muldis DB itself. This 291 is the best place to ask for basic help in getting Muldis DB installed on 271 292 your machine or to make it do what you want. You could also submit feature 272 293 requests or report perceived bugs here, if you don't want to use CPAN's RT … … 276 297 277 298 This list is for discussion among people who are designing or implementing 278 the Muldis ::DB core API (including Muldis D language design), or who are279 implementing Muldis ::DB Engines, or who are writing core documentation,299 the Muldis DB core API (including Muldis D language design), or who are 300 implementing Muldis DB Engines, or who are writing core documentation, 280 301 tests, or examples. It is not the place for non-implementers to get help 281 302 in using said. … … 283 304 =back 284 305 285 An official IRC channel for Muldis ::DB is also intended, but not yet306 An official IRC channel for Muldis DB is also intended, but not yet 286 307 started. 287 308 288 309 Alternately, you can purchase more advanced commercial support for various 289 Muldis D implementations, particularly Muldis ::DB, from its author; contact310 Muldis D implementations, particularly Muldis DB, from its author; contact 290 311 C<perl@DarrenDuncan.net> for details. 291 312 -
ext/Muldis-DB/lib/Muldis/DB/Engine/Example.pm
r17127 r17866 177 177 =head1 DESCRIPTION 178 178 179 B<Muldis::DB::Engine::Example>, aka the I<Muldis DB Example Engine>, aka 180 I<Example>, is the self-contained and pure-Perl reference implementation of 181 Muldis DB. It is included in the Muldis DB core distribution to allow the 182 core to be completely testable on its own. 183 184 Example is coded intentionally in a simple fashion so that it is easy to 185 maintain and and easy for developers to study. As a result, while it 186 performs correctly and reliably, it also performs quite slowly; you should 187 only use Example for testing, development, and study; you should not use it 188 in production. (See the L<Muldis::DB::SeeAlso> file for a list of other 189 Engines that are more suitable for production.) 190 191 This C<Muldis::DB::Engine::Example> file is the main file of the Example 192 Engine, and it is what applications quasi-directly invoke; it directly 193 does/subclasses the roles/classes in L<Muldis::DB::Interface>. The other 194 C<Muldis::DB::Engine::Example::\w+> files are used internally by it, 195 comprising the rest of the Example Engine, and are not intended to be used 196 directly in user code. 197 179 198 I<This documentation is pending.> 180 199 … … 198 217 It also requires these Perl 6 classes that are in the current distribution: 199 218 L<Muldis::DB::Interface-0.3.0|Muldis::DB::Interface>. 219 220 It also requires these Perl 6 classes that are in the current distribution: 221 L<Muldis::DB::Engine::Example::PhysType-0.3.0| 222 Muldis::DB::Engine::Example::PhysType>, 223 L<Muldis::DB::Engine::Example::Operators-0.3.0| 224 Muldis::DB::Engine::Example::Operators>. 200 225 201 226 =head1 INCOMPATIBILITIES -
ext/Muldis-DB/lib/Muldis/DB/Interface.pm
r17127 r17866 430 430 =head1 DESCRIPTION 431 431 432 B<Muldis::DB::Interface>, aka I<Interface>, comprises the minimal core of 433 the Muldis DB framework, the one component that probably every program 434 would use. Together with the Muldis D language (see L<Language::MuldisD>), 435 it defines the common API for Muldis DB implementations to do and which 436 applications invoke. 437 432 438 I<This documentation is pending.> 433 439
