protected override void LoadProcedureTableSchema(DataConnection dataConnection, ProcedureSchema procedure, string commandText, List <TableSchema> tables) { var commandType = CommandType.StoredProcedure; if (procedure.IsTableFunction) { var sqlBuilder = dataConnection.DataProvider.CreateSqlBuilder(); commandText = String.Format("SELECT * FROM {0}({1})", commandText, String.Join(",", procedure.Parameters.Select(p => sqlBuilder.Convert(p.ParameterName, ConvertType.NameToQueryParameter)))); commandType = CommandType.Text; } var parameters = HanaSchemaOptions != null ? (HanaSchemaOptions.GetStoredProcedureParameters(procedure) ?? GetStoredProcedureDataParameters(procedure)) : GetStoredProcedureDataParameters(procedure); try { var st = GetProcedureSchema(dataConnection, commandText, commandType, parameters); procedure.IsLoaded = true; if (st != null) { procedure.ResultTable = new TableSchema { IsProcedureResult = true, TypeName = ToValidName(procedure.ProcedureName + "Result"), ForeignKeys = new List <ForeignKeySchema>(), Columns = GetProcedureResultColumns(st) }; foreach (var column in procedure.ResultTable.Columns) { column.Table = procedure.ResultTable; } procedure.SimilarTables = ( from t in tables where t.Columns.Count == procedure.ResultTable.Columns.Count let zip = t.Columns.Zip(procedure.ResultTable.Columns, (c1, c2) => new { c1, c2 }) where zip.All(z => z.c1.ColumnName == z.c2.ColumnName && z.c1.SystemType == z.c2.SystemType) select t ).ToList(); } } catch (Exception ex) { procedure.ResultException = ex; } }
protected override void LoadProcedureTableSchema(DataConnection dataConnection, ProcedureSchema procedure, string commandText, List <TableSchema> tables) { CommandType commandType; DataParameter[] parameters; if (procedure.IsTableFunction) { commandText = "SELECT * FROM " + commandText + "("; commandText += String.Join(",", procedure.Parameters.Select(p => ( p.SystemType == typeof(DateTime) ? "'" + DateTime.Now + "'" : DefaultValue.GetValue(p.SystemType)) ?? "''")); commandText += ")"; commandType = CommandType.Text; parameters = new DataParameter[0]; } else { commandType = CommandType.StoredProcedure; parameters = HanaSchemaOptions != null ? (HanaSchemaOptions.GetStoredProcedureParameters(procedure) ?? GetStoredProcedureDataParameters(procedure)) : GetStoredProcedureDataParameters(procedure); } try { var st = GetProcedureSchema(dataConnection, commandText, commandType, parameters); procedure.IsLoaded = true; if (st != null) { procedure.ResultTable = new TableSchema { IsProcedureResult = true, TypeName = ToValidName(procedure.ProcedureName + "Result"), ForeignKeys = new List <ForeignKeySchema>(), Columns = GetProcedureResultColumns(st) }; foreach (var column in procedure.ResultTable.Columns) { column.Table = procedure.ResultTable; } procedure.SimilarTables = ( from t in tables where t.Columns.Count == procedure.ResultTable.Columns.Count let zip = t.Columns.Zip(procedure.ResultTable.Columns, (c1, c2) => new { c1, c2 }) where zip.All(z => z.c1.ColumnName == z.c2.ColumnName && z.c1.SystemType == z.c2.SystemType) select t ).ToList(); } } catch (Exception ex) { procedure.ResultException = ex; } }