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(); }