Subject | Re: [Firebird-Architect] Re: External procedures: implementation proposal. |
---|---|
Author | Adriano dos Santos Fernandes |
Post date | 2005-07-26T18:50:35Z |
My opinions about the specification.
Don't store RDB$MODULE_NAME in RDB$EXTERNAL_ENGINE. Use the config file.
Don't initialize RDB$EXTERNAL_ENGINE at CREATE DATABASE. It's
problematic for backup and restore.
Create a DDL statement: CREATE EXTERNAL ENGINE ...
A C++ API is okay for Java and .NET that the project will distribute the
engines.
But C++ programmers will need to use the same compiler vendor/version or
compile everything all the server.
The API is very small. Why not use C and distribute the C++ bridge for
external engine writers?
Could I consider that "virtual ExternalProcedure
getProcedure(ISC_STATUS* status, char* externalName) = 0;" mean "virtual
ExternalProcedure* getProcedure(ISC_STATUS* status, const char*
externalName) = 0;"? Note the ExternalProcedure*.
Why ExternalResource class exist? Why create a "close" method that we
know that will do "delete this"?
Use a virtual destructor.
I think ResultSet::getValue should be replaced with ResultSet::getValues
getting all the return values in one call.
Adriano
Don't store RDB$MODULE_NAME in RDB$EXTERNAL_ENGINE. Use the config file.
Don't initialize RDB$EXTERNAL_ENGINE at CREATE DATABASE. It's
problematic for backup and restore.
Create a DDL statement: CREATE EXTERNAL ENGINE ...
A C++ API is okay for Java and .NET that the project will distribute the
engines.
But C++ programmers will need to use the same compiler vendor/version or
compile everything all the server.
The API is very small. Why not use C and distribute the C++ bridge for
external engine writers?
Could I consider that "virtual ExternalProcedure
getProcedure(ISC_STATUS* status, char* externalName) = 0;" mean "virtual
ExternalProcedure* getProcedure(ISC_STATUS* status, const char*
externalName) = 0;"? Note the ExternalProcedure*.
Why ExternalResource class exist? Why create a "close" method that we
know that will do "delete this"?
Use a virtual destructor.
I think ResultSet::getValue should be replaced with ResultSet::getValues
getting all the return values in one call.
Adriano