API Docs for:
Show:

File: lib\DatabaseSchemaReader.js

var path = require('path');

var edge = require('edge');
var _ = require('underscore');

var dbc = require('happy.dbc').DesignByContract;


var assemblyFile = path.resolve(__dirname, './clr/bin/Happy.Edge.DatabaseSchemaReader.dll');
var readAll = edge.func({
    assemblyFile: assemblyFile,
    typeName: 'Happy.Edge.DatabaseSchemaReader.SchemaReader',
    methodName: 'ReadAll'
});


/**
 * 数据库结构读取器,用来读取数据库的所有表和视图的元数据。
 *
 * @class DatabaseSchemaReader
 * @extends Object
 * @constructor
 * @param {String} providerName 数据提供程序
 * @param {String} connectionString 数据库连接字符串
 * @example
        var reader = DatabaseSchemaReader.createSqlClientReader(
            'Data Source=(LocalDB)\\v11.0;AttachDbFilename=E:\\node\\happy_node\\demo\\database_schem_reader\\test_database\\Test.mdf;Integrated Security=True;Connect Timeout=30'
        );

        reader.readAll(function (error, schema) {
            console.log(util.inspect(schema, { depth: null }));
        });
        
        //schema 的结构如下:
        {
            tables: [
                {
                    name: 'Table',
                    owner: 'dbo',
                    columns: [
                        {
                            dataType: {
                                isDateTime: false,
                                isFloat: false,
                                isInt: false,
                                isNumeric: false,
                                isString: false,
                                netDataType: 'System.Guid',
                                netDataTypeCSharpName: 'System.Guid',
                                typeName: 'uniqueidentifier'
                            },
                            dateTimePrecision: null,
                            dbDataType: 'uniqueidentifier',
                            defaultValue: null,
                            foreignKeyTableName: null,
                            identityIncrement: 1,
                            identitySeed: 1,
                            isForeignKey: false,
                            isIdentity: false,
                            isIndexed: false,
                            isIsPrimaryKey: true,
                            isUniqueKey: false,
                            length: null,
                            name: 'Id',
                            netName: null,
                            nullable: false,
                            nullableIndicator: '',
                            ordinal: 1,
                            precision: null,
                            scale: null,
                            tableName: 'Table'
                        }
                    ]
                }
            ],
            views: [
                //和tables的内容一样
            ]
        };
 */
var DatabaseSchemaReader = function (providerName, connectionString) {
    var me = this;
    dbc.mustBeDefined('providerName', providerName);
    dbc.mustBeDefined('connectionString', connectionString);

    _.extend(me, {
        providerName: providerName,
        connectionString: connectionString
    });
};

module.exports = DatabaseSchemaReader;

/**
* @private
* @readOnly
* @property providerName
* @type String
*/

/**
* @private
* @readOnly
* @property connectionString
* @type String
*/


_.extend(DatabaseSchemaReader, {

    /**
     * 用于 SQL Server 的 数据提供程序。
     * 
     * @static
     * @final
     * @property SQL_CLIENT
     * @type String
     * @default 'System.Data.SqlClient'
     */
    SQL_CLIENT: 'System.Data.SqlClient',

    /**
     * 用'System.Data.SqlClient'做为ProviderName,创建一个DatabaseSchemaReader。
     * 
     * @static
     * @method createSqlClientReader
     * @param {String} connectionString 数据库连接字符串
     * @return {DatabaseSchemaReader} 数据库结构读取器
     * @example
        var connectionString = 'Data Source=(LocalDB)\\v11.0;AttachDbFilename=E:\\Test.mdf;Integrated Security=True;Connect Timeout=30';
        var reader = DatabaseSchemaReader.createSqlClientReader(connectionString);
     */
    createSqlClientReader: function (connectionString) {
        var me = this;

        return new DatabaseSchemaReader(DatabaseSchemaReader.SQL_CLIENT, connectionString);
    }
});


_.extend(DatabaseSchemaReader.prototype, {

    /**
     * 读取整个数据库的结构。
     *
     * @async
     * @method readAll
     * @param {Function} callback 读取成功后的回调函数,函数签名如下:
     *      @param {Error} callback.error 异常信息
     *      @param {Object} callback.schema 数据库结构
     *      @param callback.return
     * @return
     * @example
        reader.readAll(function (error, schema) {
            console.log(util.inspect(schema, { depth: null }));
        });
     */
    readAll: function (callback) {
        var me = this;
        dbc.mustBeDefined('callback', callback);
        dbc.mustBeAFunction('callback', callback);

        return readAll(me.getOptions(), callback);
    },

    /**
     * @private
     * @method getOptions
     * @return {Object}
     */
    getOptions: function () {
        var me = this;

        return {
            providerName: me.providerName,
            connectionString: me.connectionString
        };
    }
});