Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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;
            }
        }