/// <summary>
        /// Checks the arguments for a return type and reassigns it. Once a return type is found, this doesn't do anything.
        /// </summary>
        public void CheckArgumentsForReturnType()
        {
            if (!string.IsNullOrEmpty(_returnType))
            {
                return;
            }
            //look thru Arguments for a nameless out argument- that's the return type
            DatabaseArgument returnArgument = null;

            foreach (var argument in Arguments)
            {
                if ((argument.Out && string.IsNullOrEmpty(argument.Name)) ||
                    //MySql parameters may be marked "IN" so we look for ordinal and name
                    (argument.Name.Equals("RETURN_VALUE", StringComparison.OrdinalIgnoreCase) &&
                     argument.Ordinal == 0))
                {
                    returnArgument = argument;
                    break;
                }
            }
            //couldn't find one
            if (returnArgument == null)
            {
                return;
            }

            _returnType = returnArgument.DatabaseDataType;
            Arguments.Remove(returnArgument);
        }
Exemple #2
0
        /// <summary>
        /// Gets the name of the C# net data type, correcting for the argument properties
        /// </summary>
        /// <param name="argument">The argument.</param>
        /// <returns></returns>
        public string NetCodeName(DatabaseArgument argument)
        {
            if (!IsNumeric || IsInt)
            {
                return(NetDataTypeCSharpName);
            }
            var precision = argument.Precision.GetValueOrDefault();
            var scale     = argument.Scale.GetValueOrDefault();

            return(NetNameForIntegers(scale, precision));
        }
 private static DatabaseArgument AddArgumentToList(List<DatabaseArgument> list, string argName)
 {
     var existing = list.Find(delegate(DatabaseArgument arg) { return arg.Name == argName; });
     if (existing == null)
     {
         DatabaseArgument argument = new DatabaseArgument();
         argument.Name = argName;
         list.Add(argument);
         return argument;
     }
     return existing;
 }
 private static void AddInOut(DataRow row, string inoutKey, DatabaseArgument argument)
 {
     if (inoutKey == null) return;
     string inout = row[inoutKey].ToString();
     if (inout.Contains("IN")) argument.In = true;
     //can be INOUT
     if (inout.Contains("OUT")) argument.Out = true;
 }
 private static void AddPackage(DataRow row, string packageKey, DatabaseArgument argument)
 {
     if (packageKey != null) argument.PackageName = row[packageKey].ToString();
 }
 private static void ApplyColumnType(string columnType, DatabaseArgument argument)
 {
     switch (columnType)
     {
         case "SQL_PARAM_INPUT":
             argument.In = true;
             return;
         case "SQL_PARAM_INPUT_OUTPUT":
             argument.In = true;
             argument.Out = true;
             return;
         case "SQL_PARAM_OUTPUT":
             argument.Out = true;
             return;
         case "SQL_RETURN_VALUE":
             argument.Ordinal = -1;
             return;
         case "SQL_RESULT_COL":
             //db2 returns result columns?
             break;
     }
 }
 public static string ArgumentCamelCaseName(DatabaseArgument argument)
 {
     var name = argument.NetName;
     if (string.IsNullOrEmpty(name))
     {
         name = NameFixer.ToPascalCase(argument.Name);
         argument.NetName = name;
     }
     return Char.ToLowerInvariant(name[0])
         + (name.Length > 1 ? name.Substring(1) : string.Empty);
 }
        private void WriteArgument(DatabaseArgument argument)
        {
            _cb.AppendLine("");
            _cb.AppendLine("//" + argument.Name + " " + argument.DatabaseDataType);
            string s = string.Format(CultureInfo.InvariantCulture,
                                     "AddWithValue(cmd, \"{0}\", {1});",
                                     argument.Name, SprocLogic.ArgumentCamelCaseName(argument));
            if (!argument.Out)
            {
                //normal in parameters
                _cb.AppendLine(s);
                return;
            }

            // output and input-output parameters.
            var pName = "p" + argument.NetName;
            var isRefCursor = string.Equals("REF CURSOR", argument.DatabaseDataType, StringComparison.OrdinalIgnoreCase);
            if (argument.In)
            {
                //input output
                _cb.AppendLine("var " + pName + " = " + s);
            }
            else
            {
                //just output
                if (isRefCursor)
                {
                    _cb.AppendLine("var " + pName + " = (OracleParameter)cmd.CreateParameter();");
                }
                else
                {
                    _cb.AppendLine("var " + pName + " = cmd.CreateParameter();");
                }
                _cb.AppendLine(pName + ".ParameterName = \"" + argument.Name + "\";");
                _cb.AppendLine("cmd.Parameters.Add(" + pName + ");");
            }
            _cb.AppendLine(pName + ".Direction = ParameterDirection." + (argument.In ? "InputOutput" : "Output") + ";");

            // you may need DbType on output parameters
            if (isRefCursor)
            {
                if (_logic.IsDevart)
                    _cb.AppendLine(pName + ".OracleDbType = OracleDbType.Cursor;");
                else
                    _cb.AppendLine(pName + ".OracleType = OracleType.Cursor;");
                return;
            }
            var dt = argument.DataType;
            if (dt == null)
            {
                _cb.AppendLine(pName + ".DbType = DbType.Object;");
                return;
            }
            var t = dt.GetNetType();
            _cb.AppendLine(pName + ".DbType = DbType." + Type.GetTypeCode(t) + ";");

        }
Exemple #9
0
 /// <summary>
 /// Gets the name of the C# net data type, correcting for the argument properties
 /// </summary>
 /// <param name="argument">The argument.</param>
 /// <returns></returns>
 public string NetCodeName(DatabaseArgument argument)
 {
     if (!IsNumeric || IsInt) return NetDataTypeCSharpName;
     var precision = argument.Precision.GetValueOrDefault();
     var scale = argument.Scale.GetValueOrDefault();
     return NetNameForIntegers(scale, precision);
 }
        public void ProcedureTest()
        {
            var schema = PrepareModel();

            var procedure = new DatabaseStoredProcedure { Name = "SelectCategory" };
            var argument = new DatabaseArgument
                           {
                               Name = "p1",
                               DatabaseDataType = "VARCHAR",
                               Length = 10,
                               DataType = DataTypeConverter.FindDataType("VARCHAR", schema.DataTypes, SqlType.SqlServer, null),
                               In = true,
                           };
            procedure.Arguments.Add(argument);
            var rs = new DatabaseResultSet();
            var resultColumn = new DatabaseColumn { Name = "Output", DbDataType = "VARCHAR" };
            DataTypeConverter.AddDataType(resultColumn);
            rs.Columns.Add(resultColumn);
            procedure.ResultSets.Add(rs);
            schema.StoredProcedures.Add(procedure);

            var directory = TestHelper.CreateDirectory("MySprocTest");
            const string @namespace = "MySprocTest";
            var settings = new CodeWriterSettings
            {
                Namespace = @namespace,
                CodeTarget = CodeTarget.Poco,
                WriteStoredProcedures = true
            };

            var target = new CodeWriter(schema, settings);
            target.Execute(directory);

            var procedures = directory.GetDirectories("Procedures").FirstOrDefault();
            if (procedures == null)
                Assert.Fail("Could not find Procedures subdirectory");
            var files = procedures.GetFiles("*.cs");
            var products = files.FirstOrDefault(f => f.Name == "SelectCategory.cs");
            Assert.IsNotNull(products, "Should have written SelectCategory class for SelectCategory procedure");

            var category = files.FirstOrDefault(f => f.Name == "SelectCategoryResult.cs");
            Assert.IsNotNull(category, "Should have written SelectCategoryResult class to the result of the sproc");
        }
        private static void AddOutputParameter(DbParameter parameter, DatabaseArgument argument)
        {
            parameter.Direction = ParameterDirection.Output;
            if (argument.DataType != null)
            {
                if (argument.DataType.IsString)
                {
                    parameter.DbType = DbType.AnsiString;
                }
                else if (argument.DataType.IsNumeric)
                {
                    parameter.DbType = DbType.Int32;
                }
                else if (argument.DataType.IsDateTime)
                {
                    parameter.DbType = DbType.DateTime;
                }
            }

            if (argument.DatabaseDataType == "REF CURSOR")
            {
                AddRefCursorParameter(parameter);
            }
        }
 private static void AddInputParameter(DbParameter parameter, DatabaseArgument argument)
 {
     if (argument.DataType.IsString)
     {
         parameter.DbType = DbType.AnsiString;
         //a string "1" seems better than a letter (TO_NUMBER, CONVERTs etc)
         parameter.Value = "1";
     }
     else if (argument.DataType.IsNumeric)
     {
         parameter.Value = 1;
     }
     else if (argument.DataType.IsDateTime)
     {
         parameter.Value = DateTime.Now;
     }
 }
        private static void AddParameter(DbParameter parameter, DatabaseArgument argument)
        {
            parameter.ParameterName = argument.Name;
            if (argument.In && argument.DataType != null)
            {
                //add dummy data
                AddInputParameter(parameter, argument);
            }

            if (argument.Out && argument.In)
                parameter.Direction = ParameterDirection.InputOutput;
            if (argument.Out)
            {
                AddOutputParameter(parameter, argument);
            }
        }