On 3-apr-11, at 16:52, Piotr Szturmaj wrote:
[...]
Thanks. At this time, you can write an interface for MySQL, SQLite
or other relational databases, using the same DBRow struct. Naming
of course may be changed to DataRow, Row or other, depending on the
choice of community.
In regards of base interfaces like IConnection or (semi-)abstract
class DBConnection, I think we should have common API for all
clients, but only to some extent. There are many features available
in some database servers, while not available in others, for example
OIDs (object identifiers) are fundamental thing in PostgreSQL, but
they simply don't exist in MySQL. So, PGCommand would give you
information on lastInsertedOID, while MySQLCommand would not.
This is also proven in ADO.NET, where each client is rarely used
with common base interface, because it blocks many of its useful
features.
I think base interface should be defined only after some of the most
popular RDBMS clients are finished. Also interface should be choosen
to cover the most featured/advanced database client. This is why I
started with PostgreSQL, as its the most powerful open-source RDBMS.
If base interface will cover it, it will also cover some less
powerful RDBMSes.
I think that you project looks nice, but see some of the comments in
my other message.
I would for example consider separating table definition from row
object, and while your row object is really nice, often one has either
a single DB model, described in a few model files or goes with a fully
dynamic model.
In large project one does not/should not, define RowTypes on the fly
everywhere in the code.
So I would try to improve the way one describes a table, or a full
database.
Your DBRow type is definitely nice, and is a good starting point, but
there is definitely more work to do (not that you had said otherwise :).
Fawzi