Subject UDR Engine
Author Adriano dos Santos Fernandes
All,

Current C++ engine implementation (.cpp file), do this:
- Make dynamic libraries available to the database
- Listen for routines (from dynamic libraries) registration
- Isolates routines instances per attachments

All this seem useful for Delphi and others languages. If it's not easy
to use directly, through another layer.

So I propose:
- C++ engine is changed to UDR (user defined routines) engine
- C++ engine header CppEngine.h is split in UdrEngine.h (generic) and
CppEngine.h (C++ things)
- UDR engine creates [1] engines for any languages configured in the
config file
[1] It doesn't necessary need to create different ExternalEngine
instances, but can return the same. Dispose will work with reference
counting.

The config file would look like:

<language CPP>
plugin_module UDR_engine
</language>

<language DELPHI>
plugin_module UDR_engine
</language>

<plugin_module UDR_engine>
filename $(this)/udr_engine
plugin_config UDR_config
</plugin_module>

<plugin_config UDR_config>
path $(this)/udr
</plugin_config>

This makes better layering, and guarantees standard compliance with
minimal effort (languages listed in config file).

It doesn't address the problem of user creating engine plugins not
related to a specific language and having to inform a LANGUAGE in the
database. But I don't know for what tasks that would be needed, as usage
of ExternalEngine directly is very related to metadata loading.


Adriano