public override void GetFunctions(Common.Entities.MetaDataSchema.Project project)
        {
            foreach (Entities.MetaDataSchema.Database database in project.Databases)
            {
                System.Data.DataTable functions      = new DataTable();
                System.Data.DataTable sqlServerTable = new DataTable();
                functions.Load(database.ParentProject.ExtractorManager.SelectStatement("Select * From " + database.Name + ".INFORMATION_SCHEMA.ROUTINES where ROUTINE_TYPE = 'FUNCTION'"), LoadOption.OverwriteChanges);
                sqlServerTable.Load(database.ParentProject.ExtractorManager.SelectStatement("Select * From " + database.Name + ".sys.all_objects Where [Type] = 'FN'"), LoadOption.OverwriteChanges);
                OnStartLoading(new Common.Events.LoadingEventArgs(database.Name, "Functions", "Database"));
                database.Functions.Clear();
                foreach (DataRow row in functions.Rows)
                {
                    Entities.MetaDataSchema.Function function = new Common.Entities.MetaDataSchema.Function();

                    function.ParentDatabase = database;
                    function.Schema         = row["Routine_Schema"].ToString();
                    function.Name           = row["Routine_Name"].ToString();
                    DataRow[] sqlRows = sqlServerTable.Select("[name] = '" + function.Name + "'");
                    if (sqlRows.Length > 0)
                    {
                        function.FunctionId = sqlRows[0]["object_id"].ToString();
                    }
                    //GetColumns(view);
                    database.Functions.Add(function);
                }
                OnEndLoading(new Common.Events.LoadingEventArgs(database.Name, "Functions", "Database"));
                functions.Dispose();
            }
            GC.Collect();
        }
        public override void GetFunctionParameters(Common.Entities.MetaDataSchema.Function function)
        {
            System.Data.DataTable functions = new DataTable();
            string query = "select " + function.ParentDatabase.Name + ".sys.all_parameters.*," + function.ParentDatabase.Name + ".sys.types.name as typename From " + function.ParentDatabase.Name + ".sys.all_parameters inner join " + function.ParentDatabase.Name + ".sys.types on " + function.ParentDatabase.Name + ".sys.all_parameters.system_type_id = " + function.ParentDatabase.Name + ".sys.types.system_type_id and " + function.ParentDatabase.Name + ".sys.all_parameters.user_type_id = " + function.ParentDatabase.Name + ".sys.types.user_type_id where object_id = " + function.FunctionId;

            functions.Load(function.ParentDatabase.ParentProject.ExtractorManager.SelectStatement(query), LoadOption.OverwriteChanges);
            OnStartLoading(new Common.Events.LoadingEventArgs(function.Name, "Parameters", "Function"));
            function.Parameters.Clear();

            foreach (DataRow row in functions.Rows)
            {
                Entities.MetaDataSchema.Column col = new Common.Entities.MetaDataSchema.Column();
                col.ParentFunction         = function;
                col.Name                   = row["name"].ToString();
                col.OrdinalPosition        = Convert.ToInt32(row["parameter_id"]);
                col.Precision              = Convert.ToInt32(row["precision"]);
                col.Scale                  = Convert.ToInt32(row["scale"]);
                col.AllowNull              = false;
                col.ColumnDataType.SQLType = row["typename"].ToString();
                if (row["max_length"] != DBNull.Value)
                {
                    col.Length = Convert.ToInt32(row["max_length"]) / 2;
                }
                col.IsIdentity = false;
                col.IsComputed = false;
                col.ColumnId   = row["parameter_id"].ToString();
                if (row["is_output"].ToString() == "1" || row["is_output"].ToString() == "True")
                {
                    if (col.Name == "")
                    {
                        function.ResultType.SQLType = col.ColumnDataType.SQLType;
                    }

                    col.ColumnDirection = ColumnDirection.Output;
                    function.Parameters.Add(col);
                }
                else
                {
                    col.ColumnDirection = ColumnDirection.Input;
                    function.Parameters.Add(col);
                }
            }
            OnEndLoading(new Common.Events.LoadingEventArgs(function.Name, "Parameters", "Function"));
            GC.Collect();
        }
        public override void GetFunctions(Common.Entities.MetaDataSchema.Project project)
        {
            foreach (Entities.MetaDataSchema.Database database in project.Databases)
            {

                System.Data.DataTable functions = new DataTable();
                System.Data.DataTable sqlServerTable = new DataTable();
                functions.Load(database.ParentProject.ExtractorManager.SelectStatement("Select * From " + database.Name + ".INFORMATION_SCHEMA.ROUTINES where ROUTINE_TYPE = 'FUNCTION'"), LoadOption.OverwriteChanges);
                sqlServerTable.Load(database.ParentProject.ExtractorManager.SelectStatement("Select * From " + database.Name + ".sys.all_objects Where [Type] = 'FN'"), LoadOption.OverwriteChanges);
                OnStartLoading(new Common.Events.LoadingEventArgs(database.Name, "Functions","Database"));
                database.Functions.Clear();
                foreach (DataRow row in functions.Rows)
                {
                    Entities.MetaDataSchema.Function function = new Common.Entities.MetaDataSchema.Function();

                    function.ParentDatabase = database;
                    function.Schema = row["Routine_Schema"].ToString();
                    function.Name = row["Routine_Name"].ToString();
                    DataRow[] sqlRows = sqlServerTable.Select("[name] = '" + function.Name + "'");
                    if (sqlRows.Length > 0)
                    {
                        function.FunctionId = sqlRows[0]["object_id"].ToString();
                    }
                    //GetColumns(view);
                    database.Functions.Add(function);
                }
                OnEndLoading(new Common.Events.LoadingEventArgs(database.Name, "Functions","Database"));
                functions.Dispose();
            }
            GC.Collect();
        }