Hello, on 02/08/2008 06:15 AM Zoltán Németh said the following: >> Another aspect is that Metastorage features what is called report >> classes. These are classes that perform queries that you define and >> generates SQL and PHP at compile time to retrieve data from the >> persistent objects for read-only purposes. > > and what if you want to switch sql server from mysql to oracle or > whatever? in propel, you change 1 line in the config, you don't have to > regenerate or rewrite anything. > > the base classes are useful too because if you change your schema, you > simply regenerate them and all your extensions remain the same in the > child classes. Metastorage generates totaly database independent code . You don't need to regenerate the code to support multiple databases nor have fat base classes to access your database or do any other ORM operations. Currently it generates code that uses Metabase database abstraction layer, although it can support other database abstraction layers. It supports many databases like MySQL, PostgreSQL, Oracle, Microsoft SQL server, SQLite, etc.. Metabase also generates a separate class for installing or upgrading your database schema. If you change the definition of you objects, you just need to call that class to install, upgrade, downgrade your database schemas, safely without loosing any data that was already in the database. This is something very secure, as it does not do any schema changes if the underlying database does not support certain things you want to change. If you ask for a change that is not possible, it simply fails without changing anything. It is not that error prone migrations method of Ruby on Rails, that you have to write "SQL" manually to do your migrations, and if you made a mistake, your database data is lost. >> For instance, if you want to send a newsletter to a million subscribers >> and you just need the e-mail address and names of the subscribers, you >> can tell Metastorage to generate a report class that queries the users >> objects and retrives just the name and e-mail address. The report >> classes return arrays just like plain SELECT queries. >> >> If you use the Propel approach you would need to retrieve 1 million >> objects of the users class just to pick the name and e-mail address, >> which is totally inefficient in terms of memory and very slow. > > not at all. you can build the criteria for the select and then run a > doSelectRS method which gives you only the result set in an array, no > objects involved. That is not exactly what I am talking about. Metastorage has an Object Query Language (OQL) that lets you express whatever query conditions you want. It generates PHP code with the necessary SQL queries you need. You do not have to build any queries programatically at run-time. The generated code can return full SQL statements if you want to execute them separately by some other application code, but usually I just use the generated report classes directly, as they take care of many things like pagination, so I do not have to deal with SQL directly. That is one of the great benefits of ORM. With Metastorage I just do not have to deal with SQL manually nor I am forced to retrieve all as objects, not even when I am retrieving just a few variables of multiple classes. I do not have to SQL joins manually. That would be walking backwards in productivity. >> There are more differences between Metastorage and Propel (and probably >> others approach). I just wanted to make the point that the fact that >> approaches use generated code, it does not mean that all provide the >> same efficiency. > > yeah, sure. however there is a payoff between efficiency and portability > and maintainability, and of course not all these orms have the same > level of these. choose the one that fits your needs best. Exactly. I choose to develop my own because nothing that existed in PHP matched my needs and code quality code requirements. Of course doing it yourself is an expensive measure because it takes time and skill to reach a mature solution. I have been developing Metastorage for 6 years. It is very mature and reliable, but there is always room for improvement. >> If you are interested about more differences in the approaches, you may >> check the Metastorage documentaion: >> >> http://www.metastorage.net/ >> > > sure, I'll check it out when I have some free time -- Regards, Manuel Lemos PHP professionals looking for PHP jobs http://www.phpclasses.org/professionals/ PHP Classes - Free ready to use OOP components written in PHP http://www.phpclasses.org/ -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php