On 07/22/14 04:10, Jim Starkey wrote:
> I do have some questions:
>
> 1. Does it reflect a plan to introduce schemas, i.e. two level name spaces.
Yes. It's designed to be expandable to as many new field properties as
will be needed in the future.
> It not, it should be rejected out of hand. The rest of the database world
> accepted that name space control as obligator a decade and a half ago.
> Changing the interface without make it better, i.e. future proof, makes no
> sense.
>
> 2. Does the new interface get rid of fixed interface structures? I
> introduced them 30 years ago for compatibility with DB2 as the only published
> dynamic SQL interface. This was a terrible mistake. The SQLDA, friends, and
> relations were, are, and always will be disasters. Static data structures
> become obsolete in a blink of an eye. The history of Firebird is sufficient
> living proof. The API has been changed many times without making it better.
> Gentlemen, it is time to learn from past failures.
Reviewing API from this POV I've found 2 plain structures.
One is
struct FbCryptKey
{
const char* type; // If NULL type is auth plugin name
const void* encryptKey;
const void* decryptKey; // May be NULL for symmetric keys
unsigned int encryptLength;
unsigned int decryptLength; // Ignored when decryptKey is NULL
};
it's used to pass keys from authentication plugin (like SRP) to wire
crypt plugin (like RC4).
Next is
struct DtcStart
{
IAttachment* attachment;
const unsigned char* tpb;
unsigned int tpbLength;
};
which usage appears obvious - start distributed transaction over >1
attachment.
It's very easy to change them to interfaces, but as a result of
discussion I had to agree that there are no ways for this structures to
be changed. As for me I anyway prefer to see them in interface form, but
had to agree with other people.
What do you think - should that 2 structures become interfaces?
>
> 3. A good interface has strict differentiation from structure and semantics.
> A bad interface requires incompatible tweaking with the semantics are
> extended.
Attention was paid to make interfaces independent from both structure
and semantics.
But how can I surely say "yes, it's ok" provided we still did not have
serious changes after it's design?
> 4. Do all interface objects have methods to interogate the object (not API!!)
> version?
Yes. All interfaces are derived from IVersioned. It has function
getVersion(). Returned value (i.e. interface version) is equal to the
number of virtual functions in the interface.
------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel