
/**
 * ConnectionProperties()
 * IMMEDIATE
 * CONSTRUCTOR
 *
 * If implName_or_connectionProperties is the name of a backend adapter,
 * (i.e. either "mysql" or "ndb"), this constructor returns the default
 * ConnectionProperties for that adapter.
 * 
 * If implName_or_connectionProperties is a ConnectionProperties object, 
 * then this works as a copy constructor, copying it to and returning a new 
 * ConnectionProperties object.
 * 
 * Otherwise, returns undefined.
 */
ConnectionProperties(implName_or_connectionProperties);


/**
 * TableMapping()
 * IMMEDIATE
 * CONSTRUCTOR
 *
 * The TableMapping constructor is visible as a top-level function.
 * Refer to the TableMapping documentation for details.
 */
TableMapping(tableName_or_tableMapping);

 
/**
 * connect()
 * ASYNC
 * 
 * Connect to the data source. 
 * This is a "superheavyweight" call:  it could involve connecting to many 
 * other nodes on the network, waiting for them to become ready, and making 
 * multiple requests to them. 
 *
 * This function returns a promise.  On success, the promise will be fulfilled 
 * with a SessionFactory.  The optional callback receives an error value and a 
 * SessionFactory.  Any extra arguments passed after the callback function will
 * be returned to the callback verbatim.
 *
 * The "implementation" member of the properties object determines the backend 
 * driver implementating the SessionFactory.
 *
 * The "mappings" parameter can be used to preload metadata for application 
 * tables and to validate the defind mappings between stored data and 
 * JavaScript objects.  If mappings contains a string table name, a Domain 
 * Object Constructor function, or an array of these, then metadata is loaded 
 * from the database and validated against the requirements of the mapping.
 * If mappings is undefined, null, or an empty array, no mappings will be 
 * loaded or validated; this means validation is deferred until tables are 
 * used in application code.
 *  
 *  @param properties  properties object describing the session
 *  @param mappings    mappings to validate when connection is made
 *  @param callback    function called after connection is complete.
 *  @return a promise
 */
connect(properties, mappings, [callback], [...]);


/**
 * openSession()
 * ASYNC
 * 
 * Connect to the data source and get a Session.  
 *
 * This is a convenience method. It returns a Session in the callback function.
 * This is equivalent to calling connect and then getSession on the
 * SessionFactory that is returned in the callback function.
 *
 * The "implementation" member of the properties object determines the 
 * implementation of the Session.
 *
 * The "mappings" parameter can be used to preload metadata for application 
 * tables and to validate the defind mappings between stored data and 
 * JavaScript objects.  If mappings contains a string table name, a Domain 
 * Object Constructor function, or an array of these, then metadata is loaded 
 * from the database and validated against the requirements of the mapping.
 * If mappings is undefined, null, or an empty array, no mappings will be 
 * loaded or validated; this means validation is deferred until tables are 
 * used in application code.
 *
 * This function returns a promise.  On success, the promise will be fulfilled 
 * with a Session.  The optional callback receives an error value and a 
 * Session.  Any extra arguments passed after the callback function will
 * be returned to the callback verbatim.
 *
 *  
 *  @param properties  properties object describing the session
 *  @param mappings    mappings to validate when connection is made
 *  @param callback    function called after connection is complete.
 *  @return a promise
 */
openSession(Properties, mappings, [callback], [...]);


/** Get all SessionFactories that have been created by this module.
 * All session factories are returned in an array. 
 * @return open session factories
 * IMMEDIATE
 */
getOpenSessionFactories();


// The following functions are part of the public API but are not intended for
// application use.  They form part of the contract between mynode and 
// SessionFactory.

Connection();
getConnectionKey();
getConnection();
newConnection();
deleteFactory();
