- Timestamp:
- 04/13/08 02:27:54 (9 months ago)
- Location:
- ext/Muldis-Rosetta
- Files:
-
- 12 modified
-
Changes (modified) (1 diff)
-
Makefile.PL (modified) (1 diff)
-
README (modified) (7 diffs)
-
TODO (modified) (2 diffs)
-
archives/OSCON2008SessionProposal.txt (modified) (3 diffs)
-
lib/Muldis/Rosetta.pm (modified) (12 diffs)
-
lib/Muldis/Rosetta/Engine/Example.pm (modified) (21 diffs)
-
lib/Muldis/Rosetta/Interface.pm (modified) (30 diffs)
-
lib/Muldis/Rosetta/SeeAlso.pod (modified) (13 diffs)
-
lib/Muldis/Rosetta/Validator.pm (modified) (12 diffs)
-
t/Muldis_Rosetta_00_Compile.t (modified) (1 diff)
-
t/Muldis_Rosetta_50_Validate_Example.t (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
ext/Muldis-Rosetta/Changes
r20270 r20273 1 Muldis::DB1 Muldis::Rosetta 2 2 --------------------------------------------------------------------------- 3 3 -
ext/Muldis-Rosetta/Makefile.PL
r20264 r20273 5 5 use inc::Module::Install prefix => '../../inc'; 6 6 7 name ('Muldis:: DB');7 name ('Muldis::Rosetta'); 8 8 version ('0.6.2'); 9 9 abstract ('Full-featured truly relational DBMS in Perl'); -
ext/Muldis-Rosetta/README
r20262 r20273 1 Muldis::DB1 Muldis::Rosetta 2 2 --------------------------------------------------------------------------- 3 3 … … 7 7 8 8 This distribution features the Perl 5 or 6 (depending on which copy of this 9 README file you are reading) module named Muldis:: DB (Full-featured truly10 relational DBMS in Perl) and its support structure.9 README file you are reading) module named Muldis::Rosetta (Full-featured 10 truly relational DBMS in Perl) and its support structure. 11 11 12 Muldis DB has 2 co-developed versions, which are written in native Perl 513 and Perl 6 respectively, and which are distributed separately from each 14 other. But while the 2 versions would be similar, they are explicitly not 15 intended to be drop-in substitutable for each other, as each would have12 Muldis Rosetta has 2 co-developed versions, which are written in native 13 Perl 5 and Perl 6 respectively, and which are distributed separately from 14 each other. But while the 2 versions would be similar, they are explicitly 15 not intended to be drop-in substitutable for each other, as each would have 16 16 some API differences that optimizes it for its host language. The actual 17 17 Muldis D language specification document will be identical for both, … … 33 33 DOCUMENTATION READING ORDER 34 34 35 If you want to read all the Muldis DBdocumentation that exists now in35 If you want to read all the Muldis Rosetta documentation that exists now in 36 36 this distribution, I recommend doing so in this order: 37 37 38 38 1. README 39 39 2. (opt) Changes 40 3. lib/Muldis/ DB.pm41 4. lib/Muldis/ DB/Interface.pm42 5. (opt) lib/Muldis/ DB/Validator.pm43 6. (opt) lib/Muldis/ DB/Engine/Example.pm44 7. lib/Muldis/ DB/SeeAlso.pod40 3. lib/Muldis/Rosetta.pm 41 4. lib/Muldis/Rosetta/Interface.pm 42 5. (opt) lib/Muldis/Rosetta/Validator.pm 43 6. (opt) lib/Muldis/Rosetta/Engine/Example.pm 44 7. lib/Muldis/Rosetta/SeeAlso.pod 45 45 8. (opt) TODO 46 46 … … 48 48 49 49 You may prefer the nicely HTML-formatted versions of the above, which are 50 available at "http://search.cpan.org/dist/Muldis- DB/".50 available at "http://search.cpan.org/dist/Muldis-Rosetta/". 51 51 52 I also suggest the Muldis-DB-Cookbook distribution, when that is available. 52 I also suggest the Muldis-Rosetta-Cookbook distribution, when that is 53 available. 53 54 54 55 KEEPING UP TO DATE … … 59 60 60 61 For those of you that are interested in the bleeding edge of development, I 61 have all parts of the Muldis DBproject in one or more public62 repositories. The Perl 5 Muldis DB project is in a Git repository whose63 Git read-access url is "git://utsl.gen.nz/Muldis-DB" and whose Gitweb 64 information url is at "http://utsl.gen.nz/gitweb/?p=Muldis-DB". The Perl 6 65 Muldis DBproject is in a Subversion repository at66 "http://svn.pugscode.org/pugs/ext/Muldis- DB/".62 have all parts of the Muldis Rosetta project in one or more public 63 repositories. The Perl 5 Muldis Rosetta project is in a Git repository 64 whose Git read-access url is "git://utsl.gen.nz/Muldis-Rosetta" and whose 65 Gitweb information url is at "http://utsl.gen.nz/gitweb/?p=Muldis-Rosetta". 66 The Perl 6 Muldis Rosetta project is in a Subversion repository at 67 "http://svn.pugscode.org/pugs/ext/Muldis-Rosetta/". 67 68 68 69 You can download slightly older versions of all of my modules from the … … 75 76 "http://search.cpan.org/search?author=DUNCAND". 76 77 77 The main CPAN search site url for Muldis DBfor Perl 5 is78 "http://search.cpan.org/dist/Muldis- DB/"; that is the url you should link79 to presently if you want something to consider the "home page" of80 Muldis DB; it is best to refer people there by default.78 The main CPAN search site url for Muldis Rosetta for Perl 5 is 79 "http://search.cpan.org/dist/Muldis-Rosetta/"; that is the url you should 80 link to presently if you want something to consider the "home page" of 81 Muldis Rosetta; it is best to refer people there by default. 81 82 82 83 You can download my oldest tarred and gzipped distributions from BACKPAN, … … 88 89 89 90 Several public email-based forums exist whose main topic is all 90 implementations of the Muldis D language, especially the Muldis DB project,91 which they are named for. They exist so that Muldis D / Muldis DB users 92 can help each other, or that help coming from Muldis D / Muldis DB 93 developers can be said once to many people, rather than to each91 implementations of the Muldis D language, especially the Muldis Rosetta 92 reference implementation. They exist so that Muldis D / Muldis Rosetta 93 users can help each other, or that help coming from Muldis D / Muldis 94 Rosetta developers can be said once to many people, rather than to each 94 95 individually. All of these you can reach via 95 96 "http://mm.DarrenDuncan.net/mailman/listinfo". 96 97 97 98 Alternately, you can purchase more advanced commercial support for various 98 Muldis D implementations, particularly Muldis DB, from its author by way of99 Muldis Data Systems; see "http://www.muldis.com/" for details.99 Muldis D implementations, particularly Muldis Rosetta, from its author by 100 way of Muldis Data Systems; see "http://www.muldis.com/" for details. 100 101 101 102 FIN -
ext/Muldis-Rosetta/TODO
r19337 r20273 1 Muldis::DB1 Muldis::Rosetta 2 2 --------------------------------------------------------------------------- 3 3 4 4 Following is a summary of things that still need doing. It is specific to 5 the Muldis-DB core distribution only, and doesn't talk about things that 6 would go in other distributions. (But, look at lib/Muldis/DB/SeeAlso.pod 7 for a list of other related distributions that should be created.) 5 the Muldis-Rosetta core distribution only, and doesn't talk about things 6 that would go in other distributions. (But, look at 7 lib/Muldis/Rosetta/SeeAlso.pod for a list of other related distributions 8 that should be created.) 8 9 9 10 The following list is loosely ordered by priority, but list items may … … 68 69 * Applicable to the Perl 5 version only: Consider lowering the Perl 69 70 version dependency to 5.6 from 5.8.1, so that other projects which may 70 become dependants of Muldis- DB and already work under 5.6 won't have to71 force Perl core upgrades. If this is done, the list of further71 become dependants of Muldis-Rosetta and already work under 5.6 won't have 72 to force Perl core upgrades. If this is done, the list of further 72 73 dependencies will doubtless increase to include some things bundled with 73 74 Perl 5.8, and/or Unicode may not work so well here. Note that this may -
ext/Muldis-Rosetta/archives/OSCON2008SessionProposal.txt
r20262 r20273 31 31 This session introduces Muldis D, an industrial strength programming 32 32 language with fully integrated database functionality, and shows how to 33 use the Muldis DB database access framework for Perl. The session will 34 focus on a few of the features that I consider the most interesting and 35 unique, and ways users can solve their common database-using problems. 33 use the Muldis Rosetta database access framework for Perl. The session 34 will focus on a few of the features that I consider the most 35 interesting and unique, and ways users can solve their common 36 database-using problems. 36 37 37 38 Muldis D provides access to the entire relational model of data, … … 46 47 understand, and is easier to auto-optimize or auto-parallelize. 47 48 48 Muldis DB is a database access framework in native Perl 5 and Perl 649 versions (for Perl 6 it is also the *first* database tool). It49 Muldis Rosetta is a database access framework in native Perl 5 and Perl 50 6 versions (for Perl 6 it is also the *first* database tool). It 50 51 presents databases to Perl applications as shared libraries of routines 51 52 and data that can be used and updated. The normal way for Perl code to 52 use a database with Muldis DBis to invoke the database's stored53 use a database with Muldis Rosetta is to invoke the database's stored 53 54 routines (and prepared statements) as if those were Perl routines, with 54 55 data being inserted and retrieved via the routine parameters. 55 56 56 Muldis DB is designed for strong inter-DBMS portability, and provides a 57 deeper abstraction than the Perl DBI, such that a Perl application will 58 see all DBMSs as having the same query language (Muldis D by default), 59 rather than them having highly-incompatible dialects of SQL. But while 60 most database abstractors or ORMs treat every DBMS as a stupid data 61 store - a strategy that can result in the user getting fewer features 62 and poorer performance than the original DBMS provided - Muldis DB 63 differentiates DBMSs according to their capability, and optimally 64 leverages their built-in features where at all possible, only emulating 65 missing features in Perl as a last resort. Unlike other tools, Muldis 66 DB features the ability to translate SQL stored procedures (and by 67 extension most other SQL features). Muldis DB also includes a 68 full-featured DBMS natively in Perl, and user queries are compiled into 69 Perl code rather than SQL for execution; this allows database-using 70 projects (and Muldis DB itself) to be fully tested or demonstrated in 71 the absence of a normal DBMS, easing their development. 57 Muldis Rosetta is designed for strong inter-DBMS portability, and 58 provides a deeper abstraction than the Perl DBI, such that a Perl 59 application will see all DBMSs as having the same query language 60 (Muldis D by default), rather than them having highly-incompatible 61 dialects of SQL. But while most database abstractors or ORMs treat 62 every DBMS as a stupid data store - a strategy that can result in the 63 user getting fewer features and poorer performance than the original 64 DBMS provided - Muldis Rosetta differentiates DBMSs according to their 65 capability, and optimally leverages their built-in features where at 66 all possible, only emulating missing features in Perl as a last resort. 67 Unlike other tools, Muldis Rosetta features the ability to translate 68 SQL stored procedures (and by extension most other SQL features). 69 Muldis Rosetta also includes a full-featured DBMS natively in Perl, and 70 user queries are compiled into Perl code rather than SQL for execution; 71 this allows database-using projects (and Muldis Rosetta itself) to be 72 fully tested or demonstrated in the absence of a normal DBMS, easing 73 their development. 72 74 73 75 Muldis D is intended to qualify as a "D" language as defined by … … 91 93 proposal selection process, they are at 92 94 http://search.cpan.org/dist/Muldis-D/ (language spec) and 93 http://search.cpan.org/dist/Muldis- DB/ (Perl 5 impl) respectively. I94 didn't know whether to put those urls in the Abstract or not, so they95 are here instead.95 http://search.cpan.org/dist/Muldis-Rosetta/ (Perl 5 impl) respectively. 96 I didn't know whether to put those urls in the Abstract or not, so 97 they are here instead. 96 98 97 99 This session is arguably both in the Databases and Perl topics; while I -
ext/Muldis-Rosetta/lib/Muldis/Rosetta.pm
r20272 r20273 4 4 ########################################################################### 5 5 6 package Muldis:: DB-0.6.2 {6 package Muldis::Rosetta-0.6.2 { 7 7 # Note that Perl code only exists at all in this file in order to help 8 8 # the CPAN indexer handle the distribution properly. 9 } # package Muldis:: DB9 } # package Muldis::Rosetta 10 10 11 11 ########################################################################### … … 18 18 =head1 NAME 19 19 20 Muldis:: DB-20 Muldis::Rosetta - 21 21 Full-featured truly relational DBMS in Perl 22 22 23 23 =head1 VERSION 24 24 25 This document is Muldis:: DBversion 0.6.2.25 This document is Muldis::Rosetta version 0.6.2. 26 26 27 27 =head1 DESCRIPTION 28 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 29 The B<Muldis Rosetta> DBMS framework is a powerful but elegant system, 30 which makes it easy to create and use relational databases in a very 31 reliable, portable, and efficient way. This "Rosetta" file provides a 32 10,000 mile view of the Muldis Rosetta framework as a whole, and the detail 33 documentation for each component is included with that component. The 34 distribution containing this "Rosetta" file is the I<Muldis Rosetta core> 35 distribution. 36 37 Loosely speaking, the Muldis Rosetta framework at large is like the Perl 38 DBI framework at large, so if you know how to use the Perl DBI to work with 38 39 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<Muldis::D> for the formal definition of the Muldis D 49 language which Muldis DBis based on.50 51 The minimal core of the Muldis DBframework, the one component that52 probably every program would use, is the L<Muldis:: DB::Interface> file. It53 defines a small set of roles/classes that comprise a common API (that 54 processes I<Perl Hosted Data Muldis D> commands) for Muldis DB 55 implementations to do and which applications invoke, called the I<Muldis DB56 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 an40 Rosetta to work with databases. Like the Perl DBI, Muldis Rosetta has 41 separately distributable core, implementation, and extension distributions. 42 Like an implementation ("driver") of the Perl DBI, an implementation 43 ("engine") of Muldis Rosetta works according to the command design pattern; 44 its API is very minimalistic and mainly serves to process arbitrary 45 "commands" through a single routine or three. Unlike the Perl DBI, which 46 takes commands in some dialect of SQL, which changes based on the 47 implementation in use, Muldis Rosetta takes commands in the B<Muldis D> 48 language, which has just one dialect shared by all implementations. See 49 the separate all-documentation distribution L<Muldis::D> for the formal 50 definition of the Muldis D language which Muldis Rosetta is based on. 51 52 The minimal core of the Muldis Rosetta framework, the one component that 53 probably every program would use, is the L<Muldis::Rosetta::Interface> 54 file. It defines a small set of roles/classes that comprise a common API 55 (that processes I<Perl Hosted Data Muldis D> commands) for Muldis Rosetta 56 implementations to do and which applications invoke, called the I<Muldis 57 Rosetta Native Interface> (or I<MRNI>). For the most part, C<Interface> 58 just defines shims and it can only be used when they are subclassed by an 58 59 implementation. In the Perl DBI framework analogy, C<Interface> 59 60 corresponds to the L<DBI> module itself. An implementation is called a 60 I<Muldis DBEngine> or I<Engine>.61 62 Thanks largely to the use of Muldis D as its command language, M DBNI is61 I<Muldis Rosetta Engine> or I<Engine>. 62 63 Thanks largely to the use of Muldis D as its command language, MRNI is 63 64 rigorously defined, such that there should be no ambiguity when trying to 64 65 invoke or implement it, and so an application written to it should behave 65 66 identically no matter which conforming Engine is in use. 66 67 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 the Muldis DB core 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<Muldis::D::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. 68 The maximal core of the Muldis Rosetta framework, everything else of 69 substance in the same distribution as the minimal core (and this "Rosetta" 70 file), comprises 2 additional components. The first is 71 L<Muldis::Rosetta::Engine::Example>, a self-contained and pure-Perl 72 reference implementation of Muldis Rosetta. The second is 73 L<Muldis::Rosetta::Validator>, a common comprehensive test suite for Muldis 74 Rosetta implementations. Together, these components make it possible for 75 the Muldis Rosetta core distribution to be completely testable on its own. 76 It is therefore also feasible for an application to use the Muldis Rosetta 77 core in isolation from further framework components, though doing so isn't 78 recommended for production use since C<Example> is kept simple on purpose 79 and doesn't scale well. 80 81 Muldis Rosetta, by way of using the Muldis D language, incorporates a 82 complete and uncompromising implementation of "I<The Third Manifesto>" 83 (I<TTM>), a formal proposal by Christopher J. Date and Hugh Darwen for a 84 solid foundation for data and database management systems (DBMSs); like 85 Edgar F. Codd's original papers, I<TTM> can be seen as an abstract 86 blueprint for the design of a DBMS and the language interface to such a 87 DBMS. Muldis D is a high-level programming language which is 88 computationally complete (and industrial strength) and has fully integrated 89 database functionality; it satisfies I<TTM>'s definition of a "B<D>" 90 language. The main web site for I<TTM> is 91 L<http://www.thethirdmanifesto.com/>, and its authors have also written 92 several books and papers and taught classes on the subject over the last 93 35+ years, along with Codd himself (some are listed in the separately 94 distributed L<Muldis::D::SeeAlso> documentation file). Note that the 95 Muldis Rosetta documentation will be focusing mainly on how Muldis Rosetta 96 itself works, and will not spend much time in providing rationale; you can 97 read I<TTM> itself and various other external documentation for much of 98 that. 95 99 96 100 I<This documentation is pending.> … … 101 105 either named modules or anonymous routines) and write the rest of the 102 106 application in their other language(s) of choice. Assuming the main 103 application is written in Perl, it is the L<Muldis:: DB::Interface> file104 which provides the glue between your Perl code and your Muldis D code;105 "Muldis:: DB::Interface" implements a virtual machine that is embedded in106 your Perl application and in which the Muldis D code runs (it is analogous107 to the Perl interpreter itself, which provides a virtual machine in which 108 Perl code runs).109 110 A Muldis:: DB::Interface::Machine object represents a single active Muldis111 DB virtual machine; it has a spartan DBI-inspired set of methods which you 112 use to compile/prepare and/or invoke/execute Muldis D statements and 113 routines within the virtual machine, input data to it, and output data from 114 it.107 application is written in Perl, it is the L<Muldis::Rosetta::Interface> 108 file which provides the glue between your Perl code and your Muldis D code; 109 "Muldis::Rosetta::Interface" implements a virtual machine that is embedded 110 in your Perl application and in which the Muldis D code runs (it is 111 analogous to the Perl interpreter itself, which provides a virtual machine 112 in which Perl code runs). 113 114 A Muldis::Rosetta::Interface::Machine object represents a single active 115 Muldis Rosetta virtual machine; it has a spartan DBI-inspired set of 116 methods which you use to compile/prepare and/or invoke/execute Muldis D 117 statements and routines within the virtual machine, input data to it, and 118 output data from it. 115 119 116 120 You can create more than one Machine object at a time, and they are 117 121 essentially all isolated from each other, even if more than one uses the 118 122 same Engine class to implement it; that is, multiple Machine objects will 119 not have references to each other at a level visible in the Muldis DB123 not have references to each other at a level visible in the Muldis Rosetta 120 124 Native Interface, if at all. To account for situations where multiple 121 125 Machine objects want to use the same external resources, such as a 122 126 repository file on disk, it is expected that the Engines will employ 123 127 appropriate measures such as system-managed locks so that resource 124 corruption or application failure is prevented. I<Also, Muldis DB should 125 be thread safe and/or savvy in the future, but for now it officially is not 126 and you should not share Muldis DB objects between multiple threads, nor 127 have objects in separate threads try to access the same external 128 resources.> 129 130 Muldis DB does not use any dialect of SQL in its native API (unlike many 131 other DBMS products) because SQL is more ambiguous and error-prone to use, 132 and it is less expressive. While Muldis D is very different from SQL, it 133 is fully capable of modeling anything in the real world accurately, and it 134 can support a complete SQL emulation layer on top of it, so that your 135 legacy applications can be migrated to use the Muldis DB DBMS with little 136 trouble. Likewise, emulation layers for any other programming language can 137 be supported, such as B<Tutorial D> or XQuery or FoxPro or dBase. 138 139 One distinctive feature of a Muldis DB DBMS (compared to a typical other 140 vendor's DBMS) is that data definition statements are structured 128 corruption or application failure is prevented. I<Also, Muldis Rosetta 129 should be thread safe and/or savvy in the future, but for now it officially 130 is not and you should not share Muldis Rosetta objects between multiple 131 threads, nor have objects in separate threads try to access the same 132 external resources.> 133 134 Muldis Rosetta does not use any dialect of SQL in its native API (unlike 135 many other DBMS products) because SQL is more ambiguous and error-prone to 136 use, and it is less expressive. While Muldis D is very different from SQL, 137 it is fully capable of modeling anything in the real world accurately, and 138 it can support a complete SQL emulation layer on top of it, so that your 139 legacy applications can be migrated to use the Muldis Rosetta DBMS with 140 little trouble. Likewise, emulation layers for any other programming 141 language can be supported, such as B<Tutorial D> or XQuery or FoxPro or 142 dBase. 143 144 One distinctive feature of a Muldis Rosetta DBMS (compared to a typical 145 other vendor's DBMS) is that data definition statements are structured 141 146 fundamentally as standard data manipulation statements but that the target 142 147 relation variables are system catalog relation variables rather than … … 145 150 read-only, not only by using special 'create' or 'alter' statements. 146 151 147 Each Muldis DB Engine has the complete freedom to implement the Muldis DB148 DBMS and Muldis D however it likes; all Muldis DB cares about is that the 149 user interface and behaviour conform to its preconceptions.152 Each Muldis Rosetta Engine has the complete freedom to implement the Muldis 153 Rosetta DBMS and Muldis D however it likes; all Muldis Rosetta cares about 154 is that the user interface and behaviour conform to its preconceptions. 150 155 151 156 For production use, there should be a wide variety of third party Engine … … 153 158 the new (under development) enterprise-strength and Perl implemented 154 159 database server named L<Genezzo> (see also L<http://www.genezzo.com/>) will 155 evolve to implement the Muldis DB DBMS natively, and be I<the> back-end156 which is recommended above all others for production use.160 evolve to implement the Muldis Rosetta DBMS natively, and be I<the> 161 back-end which is recommended above all others for production use. 157 162 158 163 Most of the other (near term) third party Engines will likely just map 159 Muldis DB's rigorously defined API onto a pre-existing quasi-relational 160 database manager (such as SQLite, PostgreSQL, MySQL, Firebird, Teradata, 161 Oracle, Sybase, SQL Server, Informix, DB2, OpenBase, FrontBase, etc). Given 162 this fact, Muldis DB's most prominent feature is that it provides a common 163 API for access to those databases, each of which takes a different SQL or 164 quasi-SQL dialect. An application written to it should easily port to 165 alternative relational database engines with minimal effort. 164 Muldis Rosetta's rigorously defined API onto a pre-existing 165 quasi-relational database manager (such as SQLite, PostgreSQL, MySQL, 166 Firebird, Teradata, Oracle, Sybase, SQL Server, Informix, DB2, OpenBase, 167 FrontBase, etc). Given this fact, Muldis Rosetta's most prominent feature 168 is that it provides a common API for access to those databases, each of 169 which takes a different SQL or quasi-SQL dialect. An application written 170 to it should easily port to alternative relational database engines with 171 minimal effort. 166 172 167 173 This might seem strange to somebody who has not tried to port between … … 170 176 is I<Database Driver Independence>, and not I<Database Language 171 177 Independence>. To further demonstrate the difference, it is useful to 172 compare the DBI and Muldis DB. I<Such documentation is currently absent.> 173 174 In the context of a Muldis DB implementation over the Perl DBI, if one were 175 to categorize Muldis DB among other Perl modules, it could reasonably be 176 called a database abstraction layer; but it should I<not> be called a Perl 177 object persistence layer, as that is a different paradigm. 178 compare the DBI and Muldis Rosetta. I<Such documentation is currently 179 absent.> 180 181 In the context of a Muldis Rosetta implementation over the Perl DBI, if one 182 were to categorize Muldis Rosetta among other Perl modules, it could 183 reasonably be called a database abstraction layer; but it should I<not> be 184 called a Perl object persistence layer, as that is a different paradigm. 178 185 179 186 =head1 FEATURE SUPPORT VALIDATION 180 187 181 The Muldis DB Native Interface declares accessors for a large number of182 actual or possible database features, any of which your application can183 invoke, and all of which each Muldis DB Engine would ideally implement or184 interface to.188 The Muldis Rosetta Native Interface declares accessors for a large number 189 of actual or possible database features, any of which your application can 190 invoke, and all of which each Muldis Rosetta Engine would ideally implement 191 or interface to. 185 192 186 193 In reality, however, all Engines or underlying databases probably don't … … 190 197 corruption over time. 191 198 192 As an official quality assurance (QA) measure, Muldis DB provides a means193 for each Engine to programmatically declare which features it does anddoes194 not support, so that code using that Engine will know so in advance of 195 trying to use said features. Feature support declarations are typically 196 coarse grained and lump closely similar things together, for simplicity; 197 they will be just as fine grained as necessary and no finer (this can be 198 changed over time). See the C<features()> method, which is how you read 199 the declarations.199 As an official quality assurance (QA) measure, Muldis Rosetta provides a 200 means for each Engine to programmatically declare which features it does 201 and does not support, so that code using that Engine will know so in 202 advance of trying to use said features. Feature support declarations are 203 typically coarse grained and lump closely similar things together, for 204 simplicity; they will be just as fine grained as necessary and no finer 205 (this can be changed over time). See the C<features()> method, which is 206 how you read the declarations. 200 207 201 208 One benefit of this QA feature is that, after you have written your … … 204 211 alternatives also support the features you are using. Note that, generally 205 212 speaking, you would have to be using very proprietary features to begin 206 with in order for the majority of Muldis DBEngines/databases to not213 with in order for the majority of Muldis Rosetta Engines/databases to not 207 214 support the application outright. 208 215 209 216 Another benefit of this QA feature is that there can be made a common 210 217 comprehensive test suite to run against all Engines in order to tell that 211 they are implementing the Muldis DB interface properly or not; said test212 suite will be smart enough to only test each Engine's compliance for those 213 features that the Engine claims to support, and not fail it for non-working 214 features that it explicitly says it doesn't support. This common test 215 suite will save each Engine maker from having to write their own module 216 tests. It would be used similarly to how Sun has an official validation 217 suite for Java Virtual Machines to make sure they implement the official 218 Java specification. Please see the L<Muldis::DB::Validator> module(s), 219 which implements this test suite.218 they are implementing the Muldis Rosetta interface properly or not; said 219 test suite will be smart enough to only test each Engine's compliance for 220 those features that the Engine claims to support, and not fail it for 221 non-working features that it explicitly says it doesn't support. This 222 common test suite will save each Engine maker from having to write their 223 own module tests. It would be used similarly to how Sun has an official 224 validation suite for Java Virtual Machines to make sure they implement the 225 official Java specification. Please see the L<Muldis::Rosetta::Validator> 226 module(s), which implements this test suite. 220 227 221 228 =head1 SEE ALSO 222 229 223 The separate all-documentation distribution L<Muldis::D> is the 224 formal definition of the Muldis D language which Muldis DBis based on.225 226 The Perl module L<Muldis:: DB::Validator> is bundled with Muldis DB and can227 be used to test Muldis DBEngines.228 229 The Perl module L<Muldis:: DB::Engine::Example> is bundled with Muldis DB230 and implements a self-contained reference implementation of a Muldis DB 231 Engine.232 233 Go to the L<Muldis:: DB::SeeAlso> file for the majority of external230 The separate all-documentation distribution L<Muldis::D> is the formal 231 definition of the Muldis D language which Muldis Rosetta is based on. 232 233 The Perl module L<Muldis::Rosetta::Validator> is bundled with Muldis 234 Rosetta and can be used to test Muldis Rosetta Engines. 235 236 The Perl module L<Muldis::Rosetta::Engine::Example> is bundled with Muldis 237 Rosetta and implements a self-contained reference implementation of a 238 Muldis Rosetta Engine. 239 240 Go to the L<Muldis::Rosetta::SeeAlso> file for the majority of external 234 241 references. 235 242 … … 240 247 =head1 LICENSE AND COPYRIGHT 241 248 242 This file is part of the Muldis DB framework. 243 244 Muldis DB is Copyright © 2002-2008, Darren Duncan. All rights reserved. 245 <
